例子
# 最简单的 Dockerfile
# 文件名为 Dockerfile
FROM ubuntu:14.04
RUN echo 'hello'命令
# 是的, 你没看错, 这就完了...
# 格式: docker build <context>
> docker build .添加 仓库信息 定位
命令
# -t 选项, 可以提供 标签 的配置 # 格式: docker build -t <repo>[:tag] <context> > docker build -t myrepo/image:0.0.1 .
自定义 Dockerfile 和 context
命令
# 手动指定 Dockerfile 和 context # 格式: docker build -t <repo>[:tag] -f <DockerfilePath> <context> > docker build -t myrepo/image:0.0.2 -f /root/myDockerfile /root/context
结果
> docker build -t <repo>/demo:0.0.2 -f Dockerfile .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM ubuntu:latest
---> 7698f282e524
Step 2/2 : RUN echo 'hello'
---> Using cache
---> 331b9ab46190
Successfully built 331b9ab46190
Successfully tagged <repo>/demo:0.0.2格式
# 以 # 开头的行
# 行中出现的 # 则一律不被视为 注释
# 注释不支持 换行例子
# syntax=docker/dockerfile例子
# 这个例子
# escape=`示例
FROM ubuntu:latestfrom 一定要大写
Dockerfile
# Version 0.0.4
ARG version
FROM ubuntu:$version命令
# 通过 --build-arg 指定了 version 参数
# -f 指定了 Dockerfile
> docker image build --build-arg version=19.04 -t repo/demo:0.0.4 -f Dockerfile04 .版本正确
> docker image inspect -f '{{.RepoTags}}' repo/demo:0.0.4 Dockerfile
# Version 0.0.5
ARG version=19.04
FROM ubuntu:${version}命令
> docker image build -t repo/demo:0.0.5 -f Dockerfile05 .Dockerfile
# Version 0.0.6
ARG version=19.04
FROM ubuntu:${version}
RUN echo ${version}命令
> docker image build -t repo/demo:0.0.6 -f Dockerfile06 .重新声明即可
# Version 0.0.7
ARG version=19.04
FROM ubuntu:${version}
ARG version
RUN echo "hello ${version}"列表
# 本质上只有 四个
# 具体干啥, 我现在还不知道
# 但是乍一看, 是跟 网络相关的
# 这个等以后有机会, 再讲吧
HTTP_PROXY
http_proxy
HTTPS_PROXY
https_proxy
FTP_PROXY
ftp_proxy
NO_PROXY
no_proxyDockerfile
# Version 0.0.8
ARG version=19.04
FROM ubuntu:${version}
ARG version
RUN echo "hello ${version}"
ENV var="docker"
RUN echo "hello ${var}"命令
> docker image build -t repo/demo:0.0.8 -f Dockerfile08 .Dockerfile
# Version 0.0.9
ARG version=19.04
FROM ubuntu:${version}
ARG version
RUN echo "hello ${version}"
ENV var=${version}
RUN echo "hello ${var}"命令
> docker image build -t repo/demo:0.0.9 -f Dockerfile09 .命令
# RUN <command> [<options and args>]
RUN echo "hello, docker."命令
# 1. 使用 json 的 数组格式
# 2. 命令和参数作为数组的成员
# 3. 空格隔开的, 就是一个参数
# 4. 每个参数, 都要用 "" 引起来
RUN ["echo", "hello, docker."]
# 如果硬要 环境变量
RUN ["/bin/sh", "-c", "echo", "hello, docker."]将多个命令, 写到一个 run 里
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
命令
# linux
SHELL ["/bin/bash"]
# win
SHELL ["powershell", "-command"]命令
# 官网上给的例子
# 其他的搭配, 估计只有自己尝试了...
--chown=<userId>:<groupName>
--chown=<userName>
--chown=<userId>
--chown=<userId>:<groupId> 命令
COPY [--chown=<user>:<group>] <src> ... <dest>命令
# 从 url 获取(不解压)
ADD http://wordpress.org/latest.zip /root/wordpress.zip
# 解压
ADD http://wordpress.org/latest.zip /root/wordpress/命令
# 类似 RUN
CMD command param1 param2exec 模式
```
# 类似 RUN
CMD ["executable","param1","param2"]
```命令
LABEL maintainer='repo'查看
> docker image inspect -f '{{json .ContainerConfig.Labels}}' repo/demo:0.0.1默认执行命令的用户
命令
USER <user>[:<group>]
USER <UID>[:<GID>]可以解析环境变量
命令格式
WORKDIR /absolutePath
WORKDIR relativePath命令
ONBUILD <otherInstruction>命令
# 列表式
VOLUME /myvol /root/test
# json 式
VOLUME ["/myvol", /root/test]命令
# 指定端口和协议
# 默认协议是 tcp
# 可以指定 多个
expose <port>[:<protocol>]创建容器
# 一定要加 -P
# 这样 expose 的端口, 会随机映射到 host 的可用端口上
# 如果没有, 则会别 映射到 null
# 不影响 -p 选项来暴露端口
> docker container run --rm --name demo03 -it -P -p 32769:90/tcp repo/demo:0.0.1验证
# 可以在 ports 那里, 看到暴露端口
> docker container ls docker container ps 的 status 栏里命令
# 拒绝继承,
CHECKHEALTH NONE
# 简单示例
# 注意, 那个 CMD 是格式, 跟 CMD 命令要区别开
# curl 如果失败, 则容器状态变为 不健康
checkout --interval=10s --timeout=3s --retries=3 CMD curl http://192.168.30.5:5000/v2原文:https://www.cnblogs.com/xy14/p/11944535.html