Dockerfile指令说明

偏向技术
/ 0 评论 / 69 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年03月31日,已超过1144天没有更新,若内容或图片失效,请留言反馈。

1. ADD

从构建环境的上下文或远程 URL 复制文件至镜像。如果是从一个本地路径添加一个归档文件,那么它会被自动解压。由于 ADD 指令涵盖的功能相当广泛,一般最好还是使用相对简单的 COPY 指令来复制构建环境上下文的文件和目录,并用 RUN 指令配合 curl 或wget 来下载远程资源(这样还可以在同一个指令中处理和删除下载文件)。

2. CMD

当容器启动时执行指定的指令。如果还定义了 ENTRYPOINT ,该指令将被解释为ENTRYPOINT 的参数(在这种情况下,请确保使用的是 exec 格式(JSON数组))。CMD 指令也会被docker run 命令中镜像名称后面的所有参数覆盖。假如定义了多个 CMD 指令,那么只有最后一个生效,前面出现过的 CMD 指令全部无效(包括出现在基础镜像中的那些)。

3. COPY

用于从构建环境的上下文复制文件至镜像。它有两种形式,COPY src dest 以及 COPY["src", "dest"],两者皆从上下文中的 src 复制文件或目录至容器内的 dest。如果路径中有空格的话,那么必须使用 JSON 数组的格式。通配符可以用来指定多个文件或目录。请注意,你不能指定上下文以外的 src 路径(例如 CPoVJerAFKrO[file 是不管用的)。

4. ENTRYPOINT

设置一个于容器启动时运行的可执行文件(以及默认参数)。任何 CMD 指令或 dockerrun 命令中镜像名称之后的参数,将作为参数传给这个可执行文件。ENTRYPOINT 指令通常用于提供“启动”脚本,目的是在解析参数之前,对变量和服务进行初始化。

5. ENV

设置镜像内的环境变量。这些变量可以被随后的指令引用。例如:

dockerfile
ENV MY_VERSION 1.3
RUN apt-get install -y mypackage=$MY_VERSION
12

在镜像中这些变量仍然可用。

6. EXPOSE

向 Docker 表示该容器将会有一个进程监听所指定的端口。提供这个信息的目的是用于连接容器或在执行 docker run 命令时通过 -P 参数把端口发布开来;EXPOSE 指令本身并不会对网络有实质性的改变。

7. FROM

设置 Dockerfile 使用的基础镜像;随后的指令皆执行于这个镜像之上。基础镜像以“镜像:标签”(IMAGE:TAG)的格式表示(例如 debian:wheezy)。如果省略标签,那么就被视为最新(latest),但我强烈建议你一定要给标签设置为某个特定版本,以免出现任何意想不到的事情。FROM 必须为 Dockerfile 的第一条指令。

8. MAINTAINER

把镜像中的“作者”元数据设定为指定的字符串。可以通过 docker inspect -f {{.Author}} IMAGE 这个命令来查看该信息。这个指令通常用于设置镜像维护者的姓名和联系方式。

9. ONBUILD

指定当镜像被用作另一个镜像的基础镜像时将会执行的指令。对于处理一些将要添加到子镜像的数据,这个指令将会非常有用(例如,把代码从一个已选定的目录中复制出来,并在执行构建脚本时使用它)。

10. RUN

在容器内执行指定的指令,并把结果保存下来。

11. USER

设置任何后续的 RUN、CMD 或 ENTRYPOINT 指令执行时所用的用户(用户名或 UID)。请注意,UID 在主机和容器中是相同的,但用户名则可能被分配到不同的 UID,导致设置权限时变得复杂。

12. VOLUME

指定为数据卷的文件或目录。如果该文件或目录已经在镜像中存在,那么当容器启动时,它就会被复制至这个卷。如果提供了多个参数,那么就会被解释成多个数据卷。出于对可移植性和安全性的考虑,你不能在 Dockerfile 中指定数据卷将会使用的主机目录。

13. WORKDIR

对任何后续的 RUN、CMD、ENTRYPOINT、ADD 或 COPY 指令设置工作目录。这个指令可多次使用。支持使用相对路径,按上次定义的 WORKDIR 解析。

0

评论 (0)

取消