docker学习之Dockerfile指令分析

我爱海鲸 2021-08-31 22:20:50 暂无标签

简介Dockerfile指令分析

1、在docker学习之Dockerfile 我们知道了Dockerfile的一些基本的保留字指令,对比一下比较容器混淆的指令,如下:

CMD    指定一个容器启动时要运行的命令。Dockerfile 中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换

ENTRYPOINT    指定一个容器启动时要运行的命令。ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数

2、我们去tomcat官方Dockerfile中发现最后执行的指令为

CMD ["catalina.sh", "run"] ,如图:

undefined

所以当我们执行docker run -it -p 8080:8080 tomcat后tomcat就会运行起来,如图:

undefined

现在我们执行docker run -it -p 8080:8080 tomcat ls -l 看看是什么效果,如图:

undefined

发现tomcat根本没有运行起来,这就是CMD 指令的效果,最后的指令会被docker run后面的参数替换

3、下面我们看一下CMD和ENTRYPOINT的区别,重新创建一个DokcerFile,http://ip.cn 是一个查询ip的网站,能够解析出你当前的所在的区域,相关脚本如下:

FROM centos

RUN yum install -y curl

CMD ["curl", "-s","https://ip.cn/api/index?ip=&type=0"]

执行docker build -f /mydocker/Dockerfile3 -t myip .(注意后面有一个点)

构建完成后docker images查看镜像,如图:

undefined

执行docker run -it myip 返回结果如下:


undefined


4、我们知道curl -s https://ip.cn/api/index?ip=&type=0 能够返回请求的结果,但是当我们也需要返回http的头信息时,CMD指令就不行了

,因为我们知道docker run后面的参数会替换CMD指令后面的参数,这时ENTRYPOINT的作用就体现出来了,我们重新编写Dockerfile的指令,如下:

FROM centos

RUN yum install -y curl

ENTRYPOINT ["curl", "-s","https://ip.cn/api/index?ip=&type=0"]

重新执行docker build -f /mydocker/Dockerfile3 -t myip .(注意后面有一个点)构建镜像后,运行docker run -it myip -i,如图:

undefined

这样执行的命令就是 curl -s https://ip.cn/api/index?ip=&type=0 -i

5、总结:

CMD指令会覆盖

ENTRYPOINT指令是追加

你好:我的2025