文章目录
- 指令格式
指令格式
dockerfile
包含了两种格式:注释和指令:
# Comment
INSTRUCTION argument
注释以#号开头,指令以大写的指令名开始,后面是指令的参数。
# First Dockerfile
FROM ubuntu:14.04
MAINTAINER zhiqiangho "zhiqiangho@outlook.com"
RUN apt-get update
RUN apt-get install -y nginx
EXPOSE 80
- FROM:FROM指令包含了两种格式的参数
- 镜像名:
FROM <image>
- 镜像名和标签名:
FROM <image>:<tag>
通过FROM
指定的镜像名必须是已经存在的镜像,后续指令基于这个镜像执行,这个镜像也称作基础镜像。并且必须是第一条非注释指令。
- MAINTAINER:用来指定镜像的作者信息,包含镜像的所有者和联系信息。
- RUN:指定当前镜像中运行的命令,包含两种参数格式:
-
RUN <command>
(shell 模式) shell模式下是以/bin/sh -c
command的形式来执行命令,例如:RUN echo hello
。 -
RUN [‘ 'executable” ,“param1” ,“param2”]
(exec模式) 在exec
模式下RUN
指令可以用来指定其它形式的shell来运行指令。如:RUN ["/bin/bash", "-c", "echo hello"]
- EXPOSE:
EXPOSE <port> [<port>...]
。用来指定运行改镜像的容器使用的端口,可以指定一个或多个端口,也可以在一个dockerfile
中使用多个expose
命令。处于安全的考虑docker并不会自动打开端口,而是需要在使用时,在run
命令中添加对端口的映射指令。
$ docker run -p 80 -d zhiqiangho/df_testl nginx -g "daemon off;"
- CMD:
CMD [“executable” ,“param1” ,“param2” ]
(exec模式);CMD command param1 param2
(shell模式);CMD [“param1” ,“param2” ]
(作为ENTRYPOINT指令的默认参数)。CMD
指令用来提供容器运行的默认命令。与前面讲过的RUN
命令类似,都是执行一个命令,但是RUN
指令执行的命令是在镜像构建过程中执行的,而CMD
指定的命令是在容器运行时运行的。并且当我们使用docker RUN
命令启动一个容器时,如果指定了容器运行时的命令,那么CMD
指令中的指令会被覆盖不会执行。也就是说CMD
指令是用来指定容器运行的默认行为。
- ENTERYPOINT:
ENTRYPOINT [“ executable”,‘ param1”,“param2” ]
( exec模式)ENTRYPOINT command param1 param2
(shell模式)。ENTERYPOINT
与CMD
命令非常类似,但是ENTERYPOINT
命令不会被docker run
命令中指定的启动命令所覆盖。如果需要覆盖entrypoint
命令,需要在docker run
命令中指定entrypoint
选项。
这两个指令用来指定在容器运行时运行的命令。这两个命令可以组合使用,用entrypoint
指定命令,CMD
指定参数。
- ADD:
ADD <src>... <dest>
;ADD ["<src>... "<dest>"]
(适用于文件路径中有空格的情况) - COPY:
COPY <src>... <dest>
;COPY[“<src>'..., “<dest>”]
(适用于文件路径中有空格的情况) - VOLUME:
VOLUME ["/data"]
,用来向基于镜像创建的容器添加卷,一个卷可以存在于一个或多个容器的特定目录,这个目录可以绕过联合文件系统,并提供共享数据或数据持久化的功能。
这三个指令用来设置镜像的目录和文件。ADD
和COPY
将文件复制到DockerFile构建的镜像中,他们都支持两种参数来源地址和目标地址。文件可以是本地地址也可以是远程的URL
,如果是本地地址必须是构建目录中的相对地址。而目标路径,需要指定镜像中的绝对路径。ADD
指令包含类似tar
的解压功能,在安装压缩的软件包时会有所帮助,如果单纯复制文件,Docker
推荐使用COPY
。
- WORKDIR:
WORKDIR /path/to/workdir
。用来在从镜像创建一个新容器时,在新容器的内部设置工作目录。entrypoint
或者CMD
指定的命令都会在这个目录下执行。通常会使用绝对路径,如果使用了相对路径,工作路径会一直传递下去。 - ENV:
ENV <key> <value>
;ENV <key>=<value>
用来设置环境变量,与WORKDIR
指令类似。 - USER:
USER daemon
用来指定镜像以什么样的用户去运行。默认使用root
用户。
这三个指令用来指定镜像在构建及容器运行时的环境设置
- ONBUILD:
ONBUILD
指定的命令并不会在本次镜像中构建。
ONBUILD
是一个类似触发器的指令。