Dockerfile
/ / 点击#逐步介绍 Dockerfile里的命令
ENV
格式:
ENV <key> <val>或 ENV<key>=<val> ...
ENV指令可以为镜像创建出来的容器声明环境变量,可被后边的指令解释使用,
使用格式为$variable_name或${variable_name}。如果是带$的字符串,可使用\来转义。
FROM
格式:
FROM <image>或FROM <image>:<tag>
FROM指令为后边的指令提供基础镜像
COPY
格式:
COPY <src> <dest>
COPY指令复制<src>所指向的文件或目录,将它添加到新镜像中,src所指向的源必须在上下文中。
context上下文: 当构建镜像时,会执行docker build PATH|-|URL命令,最后的PATH|-|URL即为上下文环境,在构建过程中,docker程序会将指定目录的所有文件(可用.dockerignore文件来忽略文件)复制到构建环境(实际是由docker-client提交到daemon去构建镜像),这些文件作为构建镜像的上下文。可同时拷贝多个文件,如
COPY src1 src2 workdir/,如果src1,src2是目录,则执行时会将src1,src2两个目录下的文件复制到workdir/中去。
ADD
格式:
ADD <src> <dest>ADD与COPY功能上很相似,都支持将本地文件复制到镜像中,但ADD还支持其他功能,src可以是一个指向网络文件的 URL,此时若dest指向目录,则URL必须是完全路径;还可以是本地压缩归档文件,该文件复制到容器时会被解压提取,但URL中的归档文件不会被解压。推荐使用
COPY,相比之下它更透明
RUN
两种格式:
RUN <command>shell格式RUN ["exec","param1","param2"]exec格式
RUN命令会在前一条命令创建的镜像基础上创建一个容器,并在容器中运行命令,在命令结束后提交容器为新镜像,新镜像被Dockerfile中的下一条指令使用。
当使用shell格式,时,命令通过
/bin/sh -c运行,当使用exec格式时,命令是直接运行的,exec中参数会被当成json数组解析,因此必须使用双引号。因为其不在shell中执行,因此环境变量不会被替换。如果希望运行shell程序,可写成CMD ["sh","-c","progress"]
CMD
三种格式:
CMD <command>shell格式CMD ["exec","param1","param2"]exec格式,推荐CMD ["param1","param2"]为ENTRYPOINT指令提供参数可以有多条CMD命令,但只有一条会被执行。前两种执行方式一致,但执行时机不通:RUN 是在构建过程中执行命令并生成新镜像,CMD 在构建时不执行而是在容器启动时作为第一条命令执行。
使用第三种格式时,会将值作为参数传给ENTRYPOINT指令
ENTRYPOINT
两种格式:
ENTRYPOINT <command>shell格式ENTRYPOINT ["exec","param"]exec格式,推荐
ENTRYPOINT与CMD命令类似,都可以让容器在启动时执行相同的命令,但又有区别。ENTRYPOINT指令可以有多条,但只有最后一条有效,当使用shell格式时,
会忽略所有CMD指令和docker run参数,并运行在/bin/sh -c中,这意味着该指令进程是/bin/sh -c的子进程,在容器中的PID将不再是1,且不能接受UNIX信号,即使使用docker stop命令,也收不到SIGTERM信号。
ONBUILD
格式:
ONBUILD [INSTRUCTION]添加一个将来执行的触发器指令到镜像中,当该镜像作为FROM指令的参数时,这些触发器指令就会在FROM指令执行时假如到构建过程中。