Dockerfile 常用命令

镜像构建过程

Dockerfile描述了组装镜像的步骤,其中每条指令都是单独执行的。除了FROM指令,其他每一条指令都会在上一条指令所生成镜像的基础上执行,执行完成后会生成一个新的镜像层,新的镜像层覆盖在原来的镜像之上从而形成了新的镜像。Dockerfile所生成的最终镜像就是在基础镜像上面一层层的镜像组建的。

指令

备注:指令不区分大小写,但是为了与参数区分,推荐大写。Docker会顺序执行Dockerfile中的指令,第一条指令必须是FROM指令,它用于指定构建镜像的基础镜像。在Dockerfile中以#开头的行是注释,而在其他位置出现的#会被当成参数。

  • 声明环境变量:ENV <key> <value>ENV <key>=<value>
  • 为后面的镜像提供基础镜像:FROM <image>FROM <image>:<tag>
  • 复制到镜像:
    • COPY <src> <dest>
    • ADD <src> <dest>
    • 区别:ADD的 <src> 可以是指向网络文件的URL,也可以指向一个本地压缩归档文件,该文件在复制到容器中会被解压提取,若URL中的文件为归档文件则不会被解压。一般推荐使用 COPY,因为 COPY 只支持本地文件,相比 ADD 更透明。
  • 容器中运行命令:
    • RUM <command> (shell格式)
    • RUN ["executable","param1","param2"] (exec格式,推荐格式)
    • 区别:shell格式命令通过 /bin/sh -c 运行;exec格式命令是直接运行的,容器不调用shell程序,即容器中没有shell程序。exec中的参数会当成json数组被docker解析,故必须使用双引号而不能使用单引号。
  • 指令:
    • CMD <command> (shell格式)
    • CMD ["executable","param1","param2"] (exec格式,推荐格式)
    • CMD ["param1","param2"] (为ENTRYPOINT指令提供参数)
    • 一个Dockerfile中可以有多条CMD命令,但只有最后一条CMD命令有效。CMD与RUN在容器中运行方式相同,不同在于RUN在构建镜像时执行命令,并生成新的镜像;CMD在构建镜像并不执行命令,而是在容器启动时默认将CMD作为第一条执行的命令。如果用户在命令时指定了命令参数,则会覆盖CMD指令中的命令。

猜你喜欢

转载自blog.csdn.net/smicry/article/details/80601253