Dockerfile 常用指令说明。
FROM 指令
为当前要构建的镜像指定其基础镜像。
格式:
1 | FROM 镜像名[:标签] |
MAINTAINER 指令
用于指定当前镜像的维护者信息,该命令通常紧跟在 FROM 指令后面
格式:
1 | MAINTAINER 名称 |
RUN 指令
RUN 指令用于指定在构建镜像时运行的命令。
格式一:
1 | RUN ["命令", "参数1", ... "参数n"] |
格式二:
1 | CMD 命令 参数1...参数N |
Docker 在运行命令是会在命令前加上 “bin/sh -c”
CMD 指令
CMD 指令用于指定容器启动时要运行的命令。
可以使用两种格式如下,
格式一:
1 | CMD ["命令名", "参数1", "参数2", ... , "参数N"] |
Docker 将按照命令原样来运行。
格式二:
1 | CMD 命令 参数1...参数N |
Docker 在运行命令是会在命令前加上 “bin/sh -c”
需要注意的是,1. CMD 中指定的命令会被 docker run 命令指定的命令覆盖。 2. Dockerfile中如果有多条CMD指令,只有最后一条生效。
ENTRYPOINT 指令
ENTRYPOINT 指令用于指定容器启动时要运行的命令。与 CMD 指令的不同之处在于 ENTRYPOINT 不会被 docker run 命令的参数覆盖,实际上,docker run 中指定的命令会被当作 ENTRYPOINT 命令执行时的参数。
格式:
1 | ENTRYPOINT ["命令名", "参数1", "参数2", ... , "参数N"] |
当同时使用 ENTRYPOINT, CMD 指令时,CMD 的内容被当作参数传递给 ENTRYPOINT 指定的命令
如果真的需要在 docker run 命令时覆盖 Dockerfile 中 ENTRYPOINT 指定的命令,可以在 docker run 中指定 –entrypoint 参数。
WORKDIR 指令
用来在容器构建是指定一个工作目录,ENTRYPOINT 和 CMD 命令将在其指定的目录运行。
格式:
1 | WORKDIR 目录名 |
在 docker run 命令中,可用 -w 选项进行覆盖
ENV 指令
在镜像构建或容器运行时指定环境变量。
格式:
1 | ENV 环境变量1=值1 [ ... 环境变量n=值n ] |
USER 指令
指定容器运行时的用户和组。
格式:
1 | USER 用户名[:组名] |
也可以使用用户id和组id
在没有使用USER指令时,容器默认以root用户运行
VOLUME 指令
为容器创建添加文件卷,(概念上可以近似理解为在 window 系统中添加一个磁盘),该文件卷在容器中可以访问,但实际是映射到 Docker 运行的主机文件系统上的。因此可以脱离于容器的生命周期而存在,也可以在多个容器间共享。通常用来存储需要持久化的文件,数据或配置信息。
格式:
1 | VOLUME ["目录1","目录2",..."目录n"] |
可以在docker run 命令中指定参数 -v 进行覆盖
ADD 指令
用于将 Docker 运行的主机文件系统中的文件或目录复制到镜像中。
格式:
1 | ADD 源地址 目的地址 |
源地址可以是URL的格式,也就说可以使用网络上的地址,比如某台HTTP服务器上的文件
如果源地址文件是一个zip文件,ADD命令会自动解压
COPY 指令
用于将 Docker 运行的主机文件系统中的文件或目录复制到镜像中。
格式:
1 | COPY 源地址 目的地址 |
与ADD命令的不同在于:
- COPY 命令的源文件必须在当前构建环境目录中,与Dockerfile文件同级或是子目录
LABEL 指令
为镜像指定元数据。元数据以键值对的形式指定。
格式1】:
1 | LABEL key1=value1 [key2=value2] ... [keyN=valueN] |