Docker_Dockerfile中保留字指令CMD和ENTRYPOINT区别

CMD

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

ENTRYPOINT

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

验证

验证中使用的命令为curl

首先编写Dockerfile文件,内容如下:

FROM centos:7
RUN yum -y install curl
CMD ["curl","-s","https://ip.cn"]

build构建新的镜像

[root@localhost myDocker]# docker build -f /myDocker/DockerfileTree -t myip .
Sending build context to Docker daemon  4.096kB
Step 1/3 : FROM centos:7
 ---> 5e35e350aded
Step 2/3 : RUN yum -y install curl
 ---> Running in cb4a10126aa2
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
 * base: mirror.bit.edu.cn
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Package curl-7.29.0-54.el7.x86_64 already installed and latest version
Nothing to do
Removing intermediate container cb4a10126aa2
 ---> 88d37e3c7f89
Step 3/3 : CMD ["curl","-s","https://ip.cn"]
 ---> Running in 80b594b5d5ae
Removing intermediate container 80b594b5d5ae
 ---> 38e3d380c971
Successfully built 38e3d380c971
Successfully tagged myip:latest

运行容器

[root@localhost myDocker]# docker run myip
{"ip": "118.113.40.151", "country": "四川省成都市", "city": "电信"}

现在需要在原有的 curl -s https://ip.cn 后面追加一个-i得到报文头

[root@localhost myDocker]# docker run myip -i
docker: Error response from daemon: OCI runtime create failed: container_linux.go:346: starting container process caused "exec: \"-i\": executable file not found in $PATH": unknown.

可以看到,CMD后面的命令,会被docker run后面的命令覆盖掉,也就是我刚才写的 -i

测试ENTRYPOINT指令,方法一样,只不过构建文件的最后CMD替换为ENTRYPOINT

FROM centos:7
RUN yum -y install curl
ENTRYPOINT ["curl","-s","https://ip.cn"]

build新镜像

[root@localhost myDocker]# docker build -f /myDocker/DockerfileFour -t myip2 .
Sending build context to Docker daemon   5.12kB
Step 1/3 : FROM centos:7
 ---> 5e35e350aded
Step 2/3 : RUN yum -y install curl
 ---> Using cache
 ---> 88d37e3c7f89
Step 3/3 : ENTRYPOINT ["curl","-s","https://ip.cn"]
 ---> Running in 41efe0250802
Removing intermediate container 41efe0250802
 ---> 0c174d9b9d07
Successfully built 0c174d9b9d07
Successfully tagged myip2:latest

运行myip2

[root@localhost myDocker]# docker run myip2
{"ip": "118.113.40.151", "country": "四川省成都市", "city": "电信"}

在末尾添加-i

[root@localhost myDocker]# docker run myip2 -i
HTTP/1.1 200 OK
Date: Mon, 25 Nov 2019 13:56:30 GMT
Content-Type: application/json; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Set-Cookie: __cfduid=d66201e01a5389c244826811f2a98b9d31574690190; expires=Wed, 25-Dec-19 13:56:30 GMT; path=/; domain=.ip.cn; HttpOnly
CF-Cache-Status: DYNAMIC
Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
Server: cloudflare
CF-RAY: 53b4205b9fc8eb91-LAX

{"ip": "118.113.40.151", "country": "四川省成都市", "city": "电信"}

可以证明ENTRYPOINT后面的写的命令,并没有被我后面添加的-i指令覆盖,而是被追加在了后面,相当于最后的命令变为了 curl -s https://ip.cn -i

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值