Dockerfile的语法格式以下git
# 注释 命令 参数
其中,<命令>是不区分大小写的。但为了同后面的参数区分开来,一般写成大写字母。docker
在Dockerfile中,以#开头的行是注释。注释不会影响docker build的执行过程。ssh
注释中若是出现格式为ui
# directive=value
的内容,会被看成指示进行处理。spa
escape指示的用法为进程
# escape=\
或开发
# escape=`
部分指令支持在参数中使用环境变量。环境变量的语法格式以下:get
$variable_name
${variable_name}
环境变量支持一些变形用法,如jenkins
${variable:-word} # 若是variable已设置,表达式以variable为结果,不然表达式以word为结果。
和dockerfile
${variable:+word} # 若是变量variable已设置,表达式以word为结果。
支持环境变量的命令有
ADD COPY ENV EXPOSE LABEL USER WORKDIR VOLUME STOPSIGNAL
在使用docker build构建镜像时,docker会将工做目录(包括其中的文件和子目录)做为context发送给构建进程。对于构建过程当中不会被用到的文件,能够把这些文件的名字写在.dockerfile文件中,以加速构建过程。 dockerignore文件中每一个文件名占一行,并支持通配符,如
*~ */*/temp/* temp?
Dockerfile的第一个命令必须是FROM。FROM命令用于定义基准镜像。后续一切命令都是在基准镜像上进行操做。 FROM命令的用法为
FROM <image>[:<tag>]
或
FROM <image>@<digest>
MAINTAINER指令指明了Dockerfile的维护者。MAINTAINER命令的用法为
MAINTAINER <name>
RUN命令用于在基础镜像中执行程序。RUN命令的语法为
RUN <command>
或
RUN ["executable", "param1", "param2"]
CMD命令用于为可执行容器指定默认行为。CMD指令在一个Dockerfile中最多出现一次,其语法为
CMD ["executable", "param1", "param2"]
或
CMD ["param1", "param2"] # 以param一、param2为参数执行ENTRYPOINT
或
CMD command param1 param2
LABEL命令为镜像增长一组键值对做为元信息。
LABEL <key>=<value> <key2>=<value2>
EXPOSE命令告诉docker容器须要监听指定的端口。
EXPOSE <port> [<port>...]
ENV命令用于设置环境变量。
ENV <key> <value> ENV <key>=<value>
复制文件、目录或URL。
ADD <src>... <dest>
复制文件、目录或URL。
COPY <src>... <dest>
ENTRYPOINT定义了容器运行的程序。
ENTRYPOINT command param1 param2
VOLUME命令将外部存储挂载为容器内的目录。
VOLUME ["/data"]
设置执行RUN/CMD/ENTRYPOINT命令时使用的用户。
USER <username_or_userid>
设置执行RUN/CMD/ENTRYPOINT命令时使用目录。
WORKDIR <path/to/work/directory>
设置构建期参数。
ARG <name>[=<default value>]
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