1、FROM指定基础镜像。FROM指令是Dockfile文件中的收条命令,启动构建流程后,Docker将会给予该镜像构建新镜像。

FROM <image>
或者
FROM <image>:<tag>
或者
FROM <image>:<digest>

 2、RUN执行命令。在镜像的构建过程中执行特定的命令,并生成一个中间镜像。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
RUN <command>
或者
RUN ["executable", "param1", "param2"]

 3、COPY复制文件

COPY <源路径>...<目标路径>
COPY ["<源路径1>",..."目标路径"]

 <目标路径>可以是容器的绝对路径,也可以是相对工作目录的相对路径。目标路径不需要实现创建,如果目标目录不存在会在复制文件前先行创建却是穆勒。

4、ADD添加文件

ADD <源路径>...<目标路径>
ADD ["<源路径1>",..."目标路径"]

 <源路径>可以是URL,Docker引擎会试图去下载这个链接的文件到目标路径去。

5、ENV设置环境变了

ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...

 后面的其他指令,以及运行时的应用都可以使用。

6、EXPOSE为构建的镜像设置监听端口,使容器在运行时监听。

EXPOSE <port> [<port>...]

 EXPOSE指令并不会让容器监听host的端口。

7、VOLUME用于创建挂载点,即向基于所构建镜像创始的容器添加卷。

VOLUME ["/data"]

一个卷可以存在于一个或多个容器的指定目录,该目录可以绕过联合文件系统,并具有以下功能:

  • 卷可以容器间共享和重用
  • 容器并不一定要和其它容器共享卷
  • 修改卷后会立即生效
  • 对卷的修改不会对镜像产生影响
  • 卷会一直存在,直到没有任何容器在使用它

VOLUME 让我们可以将源代码、数据或其它内容添加到镜像中,而又不并提交到镜像中,并使我们可以多个容器间共享这些内容。

8、WORKDIR指定工作目录。

WORKDIR /path/to/workdir

 通过WORKDIR设置工作目录后,Dockerfile 中其后的命令 RUN、CMD、ENTRYPOINT、ADD、COPY 等命令都会在该目录下执行

9、USER指定当前用户

USER user
USER user:group
USER uid
USER uid:gid
USER user:gid
USER uid:group

 使用USER指定用户时,可以使用用户名、UID 或 GID,或是两者的组合

使用USER指定用户后,Dockerfile 中其后的命令 RUN、CMD、ENTRYPOINT 都将使用该用户。镜像构建完成后,通过 docker run 运行容器时,可以通过 -u 参数来覆盖所指定的用户。

10、CMD用于指定容器启动时所要执行的命令。

CMD ["executable","param1","param2"]
CMD ["param1","param2"]
CMD command param1 param2

CMD 在容器运行的时候执行,在构建时不进行任何操作。

11、ENTRYPOINT

ENTRYPOINT 用于给容器配置一个可执行程序。也就是说,每次使用镜像创建容器时,通过 ENTRYPOINT 指定的程序都会被设置为默认程序。ENTRYPOINT 有以下两种形式:

 
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2

 

ENTRYPOINT 与 CMD 非常类似,不同的是通过docker run执行的命令不会覆盖 ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给 ENTRYPOINT。Dockerfile 中只允许有一个 ENTRYPOINT 命令,多指定时会覆盖前面的设置,而只执行最后的 ENTRYPOINT 指令。

docker run运行容器时指定的参数都会被传递给 ENTRYPOINT ,且会覆盖 CMD 命令指定的参数。如,执行docker run <image> -d时,-d 参数将被传递给入口点。

也可以通过docker run --entrypoint重写 ENTRYPOINT 入口点。如:可以像下面这样指定一个容器执行程序:

 
ENTRYPOINT ["/usr/bin/nginx"]

 

完整构建代码:# Version: 0.0.3

FROM ubuntu:16.04
MAINTAINER 何民三 "cn.liuht@gmail.com"
RUN apt-get update
RUN apt-get install -y nginx
RUN echo 'Hello World, 我是个容器' \ 
   > /var/www/html/index.html
ENTRYPOINT ["/usr/sbin/nginx"]
EXPOSE 80

使用docker build构建镜像,并将镜像指定为 itbilu/test:

 
docker build -t="itbilu/test" .

构建完成后,使用itbilu/test启动一个容器: 

docker run -i -t  itbilu/test -g "daemon off;"

在运行容器时,我们使用了 -g "daemon off;",这个参数将会被传递给 ENTRYPOINT,最终在容器中执行的命令为 /usr/sbin/nginx -g "daemon off;"

12、LABEL

LABEL用于为镜像添加元数据,元数以键值对的形式指定:

LABEL <key>=<value> <key>=<value> <key>=<value> ...

 13、ARG指定传递给构建运行时的变量

ARG <name>[=<default value>]

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄