编写Dockerfile的方法

1 语法格式

Dockerfile的语法格式以下git

# 注释
命令 参数

其中,<命令>是不区分大小写的。但为了同后面的参数区分开来,一般写成大写字母。docker

2 注释

在Dockerfile中,以#开头的行是注释。注释不会影响docker build的执行过程。ssh

2.1 注释中的指示

注释中若是出现格式为ui

# directive=value

的内容,会被看成指示进行处理。spa

2.1.1 escape指示

escape指示的用法为进程

# escape=\

开发

# escape=`

3 环境变量

部分指令支持在参数中使用环境变量。环境变量的语法格式以下: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

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"] # 以param一、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 参考

相关文章
相关标签/搜索