文章目录

  • 指令格式


指令格式

  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指令包含了两种格式的参数
  1. 镜像名FROM <image>
  2. 镜像名和标签名FROM <image>:<tag>

  通过FROM指定的镜像名必须是已经存在的镜像,后续指令基于这个镜像执行,这个镜像也称作基础镜像。并且必须是第一条非注释指令。

  • MAINTAINER:用来指定镜像的作者信息,包含镜像的所有者和联系信息。
  • RUN:指定当前镜像中运行的命令,包含两种参数格式:
  1. RUN <command> (shell 模式) shell模式下是以/bin/sh -c command的形式来执行命令,例如:RUN echo hello
  2. RUN [‘ 'executable” ,“param1” ,“param2”](exec模式) 在exec模式下RUN指令可以用来指定其它形式的shell来运行指令。如:RUN ["/bin/bash", "-c", "echo hello"]
  • EXPOSEEXPOSE <port> [<port>...]。用来指定运行改镜像的容器使用的端口,可以指定一个或多个端口,也可以在一个dockerfile中使用多个expose命令。处于安全的考虑docker并不会自动打开端口,而是需要在使用时,在run命令中添加对端口的映射指令。
$ docker run -p 80 -d zhiqiangho/df_testl nginx -g "daemon off;"
  • CMDCMD [“executable” ,“param1” ,“param2” ](exec模式);CMD command param1 param2(shell模式);CMD [“param1” ,“param2” ] (作为ENTRYPOINT指令的默认参数)。CMD指令用来提供容器运行的默认命令。与前面讲过的RUN命令类似,都是执行一个命令,但是RUN指令执行的命令是在镜像构建过程中执行的,而CMD指定的命令是在容器运行时运行的。并且当我们使用docker RUN命令启动一个容器时,如果指定了容器运行时的命令,那么CMD指令中的指令会被覆盖不会执行。也就是说CMD指令是用来指定容器运行的默认行为。

docker compse 复制文件到容器内 复制文件到docker中_绝对路径

  • ENTERYPOINTENTRYPOINT [“ executable”,‘ param1”,“param2” ] ( exec模式) ENTRYPOINT command param1 param2 (shell模式)。ENTERYPOINTCMD命令非常类似,但是ENTERYPOINT命令不会被docker run命令中指定的启动命令所覆盖。如果需要覆盖entrypoint命令,需要在docker run命令中指定entrypoint选项。

  这两个指令用来指定在容器运行时运行的命令。这两个命令可以组合使用,用entrypoint指定命令,CMD指定参数。

  • ADDADD <src>... <dest>ADD ["<src>... "<dest>"] (适用于文件路径中有空格的情况)
  • COPYCOPY <src>... <dest>COPY[“<src>'..., “<dest>”](适用于文件路径中有空格的情况)
  • VOLUMEVOLUME ["/data"],用来向基于镜像创建的容器添加卷,一个卷可以存在于一个或多个容器的特定目录,这个目录可以绕过联合文件系统,并提供共享数据或数据持久化的功能。

  这三个指令用来设置镜像的目录和文件。ADDCOPY将文件复制到DockerFile构建的镜像中,他们都支持两种参数来源地址和目标地址。文件可以是本地地址也可以是远程的URL,如果是本地地址必须是构建目录中的相对地址。而目标路径,需要指定镜像中的绝对路径。ADD指令包含类似tar的解压功能,在安装压缩的软件包时会有所帮助,如果单纯复制文件,Docker推荐使用COPY

  • WORKDIRWORKDIR /path/to/workdir。用来在从镜像创建一个新容器时,在新容器的内部设置工作目录。entrypoint或者CMD指定的命令都会在这个目录下执行。通常会使用绝对路径,如果使用了相对路径,工作路径会一直传递下去。
  • ENVENV <key> <value>ENV <key>=<value>用来设置环境变量,与WORKDIR指令类似。
  • USERUSER daemon用来指定镜像以什么样的用户去运行。默认使用root用户。

  这三个指令用来指定镜像在构建及容器运行时的环境设置

  • ONBUILDONBUILD指定的命令并不会在本次镜像中构建。

  ONBUILD是一个类似触发器的指令。