07-Dockerfile详解(三)

ENV

  • 用于为镜像定义所需要的环境变量,并能被Dockefile文件中其后的其他指令(如ENV,COPY,ADD)所调用;
  • 调用格式为: v a r s n a m e vars_name或 {vars_name}
  • 语法: ENV key value:这种形式一次只能设置一个变量;
    ENV key=value…:这种形式一次可以定义多个键值对,如果value中有空格,可以用 (\)来转义,或对value加引号用于标识,反斜杠也用于续行;
  • 演示:
    定义Dockerfile文件:
    在这里插入图片描述
    制作镜像:
    在这里插入图片描述
    注意:在镜像初始化容器时,可以向容器环境变量赋值:docker run --env

RUN

  • 这个命令在docker build的时候会被执行;

  • 语法:RUN COMMAND1 &&
    COMMAND2 &&

在docker run 初始化容器的时候,RUN这些命令是不会在被用到了;

CMD

  • 在docker run 的时候执行CMD,只有一个有效,Dockerfile中有多个CMD,在docker
    run的时候,只执行最后一个;
  • RUN运行在在构建一个镜像过程中,而CMD是基于Dockerfile构建出的镜像启动容器的时候;
  • 语法:CMD 或CMD [“”,“”];
  • 第一种CMD /bin/httpd -f -h ${PATH}演示:-----进入shell子进程
    编辑Dockerfile文件:
    在这里插入图片描述
    制作镜像:
    #docker build -t smallboy:v9 ./
    启动容器:
    #docker run --name w8 --rm -it smallboy:v9 —会卡住,因为进入的是CMD命令;
    #docker exec -it w8
    在这里插入图片描述
  • 第二种CMD [“/bin/httpd”,“-f”, “-h ${PATH}”]演示:—不会进入shell子进程:
    编辑Dockerfile文件,制作镜像:
    在这里插入图片描述
    用该镜像起容器:

在这里插入图片描述
报错:这种方式不会进入shell子进程,所以无法对${PATH}进行解析。可以使用这种方式:
在这里插入图片描述

总结:

下面这幅图解释了RUN和CMD指令分别在什么时候运行。 在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_38753143/article/details/99562476