1 语法格式
Dockerfile的语法格式如下
# 注释 命令 参数
其中,<命令>是不区分大小写的。但为了同后面的参数区分开来,通常写成大写字母。
2 注释
在Dockerfile中,以#开头的行是注释。注释不会影响docker build的执行过程。
2.1 注释中的指示
注释中如果出现格式为
# directive=value
的内容,会被当作指示进行处理。
2.1.1 escape指示
escape指示的用法为
# escape=\
或
# escape=`
3 环境变量
部分指令支持在参数中使用环境变量。环境变量的语法格式如下:
$variable_name
${variable_name}
环境变量支持一些变形用法,如
${variable:-word} # 如果variable已设置,表达式以variable为结果,否则表达式以word为结果。
和
${variable:+word} # 如果变量variable已设置,表达式以word为结果。
支持环境变量的命令有
ADD COPY ENV EXPOSE LABEL USER WORKDIR VOLUME STOPSIGNAL
4 dockerignore文件
在使用docker build构建镜像时,docker会将工作目录(包括其中的文件和子目录)作为context发送给构建进程。对于构建过程中不会被用到的文件,可以把这些文件的名字写在.dockerfile文件中,以加速构建过程。 dockerignore文件中每个文件名占一行,并支持通配符,如
*~ */*/temp/* temp?
5 命令
5.1 首个命令FROM
Dockerfile的第一个命令必须是FROM。FROM命令用于定义基准镜像。后续一切命令都是在基准镜像上进行操作。 FROM命令的用法为
FROM <image>[:<tag>]
或
FROM <image>@<digest>
5.2 MAINTAINER命令
MAINTAINER指令指明了Dockerfile的维护者。MAINTAINER命令的用法为
MAINTAINER <name>
5.3 RUN命令
RUN命令用于在基础镜像中执行程序。RUN命令的语法为
RUN <command>
或
RUN ["executable", "param1", "param2"]
5.4 CMD命令
CMD命令用于为可执行容器指定默认行为。CMD指令在一个Dockerfile中最多出现一次,其语法为
CMD ["executable", "param1", "param2"]
或
CMD ["param1", "param2"] # 以param1、param2为参数执行ENTRYPOINT
或
CMD command param1 param2
5.5 LABEL命令
LABEL命令为镜像增加一组键值对作为元信息。
LABEL <key>=<value> <key2>=<value2>
5.6 EXPOSE命令
EXPOSE命令告诉docker容器需要监听指定的端口。
EXPOSE <port> [<port>...]
5.7 ENV命令
ENV命令用于设置环境变量。
ENV <key> <value> ENV <key>=<value>
5.8 ADD命令
复制文件、目录或URL。
ADD <src>... <dest>
5.9 COPY命令
复制文件、目录或URL。
COPY <src>... <dest>
5.10 ENTRYPOINT命令
ENTRYPOINT定义了容器运行的程序。
ENTRYPOINT command param1 param2
5.11 VOLUME命令
VOLUME命令将外部存储挂载为容器内的目录。
VOLUME ["/data"]
5.12 USER命令
设置执行RUN/CMD/ENTRYPOINT命令时使用的用户。
USER <username_or_userid>
5.13 WORKDIR命令
设置执行RUN/CMD/ENTRYPOINT命令时使用目录。
WORKDIR <path/to/work/directory>
5.14 ARG命令
设置构建期参数。
ARG <name>[=<default value>]
6 Dockerfile示例
6.1 使用Alpine构建Go开发环境
FROM alpine MAINTAINER Wang Qian VOLUME ["/home/git", "/data/repo"] RUN apk update RUN apk add go RUN apk add make RUN apk jenkins RUN apk git RUN apk openssh RUN addgroup git RUN adduser -h /home/git -s /bin/false -S -G git git CMD /bin/sh
7 参考
- Dockerfile参考 https://docs.docker.com/engine/reference/builder/