ENV
- 用于为镜像定义所需要的环境变量,并能被Dockefile文件中其后的其他指令(如ENV,COPY,ADD)所调用;
- 调用格式为: {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指令分别在什么时候运行。