CMD/ENTRYPOINT镜像案例
- 都是指定一个容器启动时要运行的命令
- CMD
- ENTRYPOINT
- docker run 以后的参数会被看成参数传递给 ENTRYPOINT,以后造成新的命令
- case
- 制做CMD版能够查询IP信息的容器
DockerFilehtml
FROM centos RUN yum install -y curl CMD ["curl","-s","http://ip.cn" ]
建立查询ip的镜像linux
[root@localhost mydocker]# ll 总用量 8 -rw-r--r--. 1 root root 144 10月 11 15:01 Dockerfile -rw-r--r--. 1 root root 238 10月 12 15:05 Dockerfile2 [root@localhost mydocker]# vim Dockerfile3 [root@localhost mydocker]# cat Dockerfile3 FROM centos RUN yum install -y curl CMD ["curl","-s","http://ip.cn" ] [root@localhost mydocker]# docker build -f /mydocker/Dockerfile3 -t myip . Sending build context to Docker daemon 4.096kB Step 1/3 : FROM centos ---> 75835a67d134 Step 2/3 : RUN yum install -y curl ---> Running in 1e3f94b33032 Loaded plugins: fastestmirror, ovl Determining fastest mirrors * base: mirrors.163.com * extras: mirrors.163.com * updates: mirrors.cn99.com Package curl-7.29.0-46.el7.x86_64 already installed and latest version Nothing to do Removing intermediate container 1e3f94b33032 ---> 1bd5b74f7407 Step 3/3 : CMD ["curl","-s","http://ip.cn" ] ---> Running in 3a3c44f38737 Removing intermediate container 3a3c44f38737 ---> 9e3c14f76b1d Successfully built 9e3c14f76b1d Successfully tagged myip:latest
运行容器docker
[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE myip latest 9e3c14f76b1d About a minute ago 299MB mycentos 1.0 c2d4f6acb9af 22 hours ago 455MB zhaoyoung/nodocstomcat 1.0 84498728984a 2 days ago 463MB centos latest 75835a67d134 3 days ago 200MB tomcat latest 41a54fe1f79d 4 weeks ago 463MB hello-world latest 4ab4c602aa5e 5 weeks ago 1.84kB [root@localhost ~]# docker run -it myip 当前 IP:112.16.153.216 来自:浙江省杭州市 移动
在宿主机终端执行curl -s -i http://ip.cnvim
[root@localhost /]# curl -s http://ip.cn 当前 IP:112.16.153.216 来自:浙江省杭州市 移动 [root@localhost /]# curl -s -i http://ip.cn HTTP/1.1 200 OK Date: Sat, 13 Oct 2018 07:15:59 GMT Content-Type: text/html; charset=UTF-8 Transfer-Encoding: chunked Connection: keep-alive Set-Cookie: __cfduid=de9797f2bb3b7b4cbf7e271a857dad0e01539414958; expires=Sun, 13-Oct-19 07:15:58 GMT; path=/; domain=.ip.cn; HttpOnly Server: cloudflare CF-RAY: 469004a530f3b22a-HKG 当前 IP:112.16.153.216 来自:浙江省杭州市 移动
在容器终端执行centos
[root@localhost ~]# docker run myip -i docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"-i\": executable file not found in $PATH": unknown.
也就是说本来DockerFile中的CMD命令被 -i 替换了,若是要加入 -i 这个命令,则 docker run myip curl -s -i http://ip.cntomcat
- 制做ENTRYPOINT版能够查询IP信息的容器
DockerFiledom
FROM centos RUN yum install -y curl ENTRYPOINT ["curl","-s","http://ip.cn" ]
建立镜像curl
[root@localhost mydocker]# vim Dockerfile4 [root@localhost mydocker]# cat Dockerfile4 FROM centos RUN yum install -y curl ENTRYPOINT ["curl","-s","http://ip.cn" ] [root@localhost mydocker]# docker build -f /mydocker/Dockerfile4 -t myip2 . Sending build context to Docker daemon 5.12kB Step 1/3 : FROM centos ---> 75835a67d134 Step 2/3 : RUN yum install -y curl ---> Using cache ---> 1bd5b74f7407 Step 3/3 : ENTRYPOINT ["curl","-s","http://ip.cn" ] ---> Running in 3b769d41c963 Removing intermediate container 3b769d41c963 ---> dcbb4656e640 Successfully built dcbb4656e640 Successfully tagged myip2:latest
运行容器ui
[root@localhost ~]# docker run myip 当前 IP:112.16.153.216 来自:浙江省杭州市 移动
对比下CMD 和 ENTRYPOINT,就能够很清楚的区分两个命令的不一样点:前者会被新加的命令覆盖,后者则是在原有的命令后加上新的命令url
[root@localhost ~]# docker run myip2 当前 IP:112.16.153.216 来自:浙江省杭州市 移动 [root@localhost ~]# docker run myip2 -i HTTP/1.1 200 OK Date: Sat, 13 Oct 2018 07:31:14 GMT Content-Type: text/html; charset=UTF-8 Transfer-Encoding: chunked Connection: keep-alive Set-Cookie: __cfduid=d26cb3e44761590c2df6178cfd18fc6ee1539415874; expires=Sun, 13-Oct-19 07:31:14 GMT; path=/; domain=.ip.cn; HttpOnly Server: cloudflare CF-RAY: 46901afe67e9b1c4-HKG 当前 IP:112.16.153.216 来自:浙江省杭州市 移动