上一篇文章介绍了Dockerfile指令详解之一,包括:
目录
上一篇文章介绍太详细,接下来将简单介绍:ARG 构建参数、VOLUME 定义匿名卷、EXPOSE 声明端口、WORKDIR 指定工作目录、USER 指定当前用户、HEALTHCHECK 健康检查、ONBUILD 定制镜像、SHELL 。
1. ARG 构建参数
指定一些镜像内使用的参数(如版本号信息等),这些参数在执行 docker build 命令时才以 --build-arg <key>=<value> 格式传入。
格式为 ARG <name> [=<default value>].
那么可以用 docker build --build-arg <key>=<value> 来指定参数值。
2. VOLUME 定义匿名卷
创建一个数据卷挂载点。
格式为 VOLUME ["/data"].
可以从本地主机或其他容器挂载数据卷,一般用来存放数据库和需要保存的数据等。
3. EXPOSE 声明端口
声明镜像内服务所监听的端口。
格式为 EXPOSE <port> [<port>...]
例如:
EXPOSE 22 80 8443
注意,该指令只是起到声明的作用,并不会自动完成端口映射。
在启动容器时需要使用 -P 。Docker主机会自动分配一个宿主机的临时端口转发到指定的端口;使用 -P ,则可以具体指定哪个宿主机的本地端口映射到容器中。
4. WORKDIR 指定工作目录
为后续的 RUN 、CMD和ENTRYPOINT 指令配置工作目录。
格式为 WORKDIR /path/to/workdir 。
可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径,例如:
WORKDIR /opt
WORKDIR stack
WORKDIR nova
RUN pwd
则最终路径为 /opt/stack/nova 。
5. USER 指定当前用户
指定运行容器时的用户名和UID,后续的 RUN 等指令也会使用指定的用户身份。
格式为 USER daemon
当服务不需要管理员权限时,可以通过该命令指定运行用户,并且可以在之前创建所需要的用户,例如:
RUN groupadd -r postgres && useradd -r -g postgres postgres
要临时获取管理员权限可以使用 gosu 或 sudo。
6. HEALTHCHECK 健康检查
配置所启动容器如何进行健康检查(如何判断健康与否)。
格式有两种:
- HEALTHCHECK [OPTIONS] CMD COMMAND:根据所执行的命令返回值是否为0来判断。
- HEALTHCHECK NONE:禁止基础镜像中的健康检查。
OPTIIONS 支持:
- --interval=DURATION (默认为30s):每隔多长时间检查一次。
- --timeout=DURATION(默认为30s):每次检查等待结果的超时时间。
- --retries=N(默认为3):若开始时就失败了,重试几次才最终确定失败。
7. ONBUILD 定制镜像
配置当所创建的镜像作为其他镜像的基础镜像时,所至执行的创建操作指令。
格式为:ONBUILD [INSTRUCTIONS]
例如,Dockerfile使用如下的内容创建镜像 image-A。
[..]
ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build --dir /app/src
[..]
如果基于 image-A 创建新的镜像时,新的Dockerfile 中使用 FROM image-A 指定基础镜像,会自动执行 ONBUIDL 指令的内容,等价于后面添加了两条指令:
FROM image-A
#当指定了ONBUILD创建的镜像时,会自动执行以下命令
ADD . /app/src
RUN /usr/local/bin/python-build --dir /app/src
8. SHELL
指定其他命令使用shell 是默认的shell类型。
SHELL ["executable", "parameters"]
默认值为["/bin/sh", "-c"]。