CMD/ENTRYPOINT 镜像案例

CMD/ENTRYPOINT 都是指定一个容器启动时要运行的命令

一、CMD

Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换。

Case讲解演示:(tomcat)

(1)执行命令:生成tomcat容器实例的时候,显示默认容器路径的目录

docker run -it --name tomcat-demo tomcat ls -l

 输出结果:

这是为什么呢?

我们到Docker hub的官网查看一下tomcat的Dockerfile:

二、ENTRYPOINT (追加)

docker run 之后的参数会被当做参数传递给 ENTRYPOINT,之后形成新的命令组合。

Case讲解演示:(制作CMD版可以查询IP信息的容器)

编写自定义的Dockerfile(cmd版本):

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

构建(build):

hadoop@Docker:~/myDocker$ docker build -f ~/myDocker/Dockerfile -t centos:cmd .
Sending build context to Docker daemon  3.072kB
Step 1/3 : FROM centos
 ---> 75835a67d134
Step 2/3 : RUN yum install -y curl
 ---> Running in 67c67e8ffc8f
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
 * base: mirrors.aliyun.com
 * extras: mirrors.163.com
 * updates: mirrors.aliyun.com
Package curl-7.29.0-46.el7.x86_64 already installed and latest version
Nothing to do
Removing intermediate container 67c67e8ffc8f
 ---> 99f208d9a380
Step 3/3 : CMD [ "curl", "-s", "http://ip.cn" ]
 ---> Running in 0a4bd2cf2f58
Removing intermediate container 0a4bd2cf2f58
 ---> 1afc862eecd7
Successfully built 1afc862eecd7
Successfully tagged centos:cmd
hadoop@Docker:~/myDocker$ 

运行:

我们可以看到可执行文件找不到的报错,executable file not found。之前我们说过,跟在镜像名后面的是 command,运行时会替换 CMD 的默认值。因此这里的 -i 替换了原来的 CMD,而不是添加在原来的 curl -s http://ip.cn 后面。而 -i 根本不是命令,所以自然找不到。

那么如果我们希望加入 -i 这参数,我们就必须重新完整的输入这个命令:

$ docker run myip curl -s http://ip.cn -i

命令:

docker run -it centos:cmd -i  等价于 如下Dockerfile

# Dockerfile

FROM centos
RUN yum install -y curl
CMD [ "i"]

CMD命令会被覆盖掉。

制作ENTROYPOINT版查询IP信息的容器:

Dockerfile文件内容如下:

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

构建(build):

hadoop@Docker:~/myDocker$ docker build -f ~/myDocker/Dockerfile3 -t centos:entropy .
Sending build context to Docker daemon  4.096kB
Step 1/3 : FROM centos
 ---> 75835a67d134
Step 2/3 : RUN yum install -y curl
 ---> Using cache
 ---> 99f208d9a380
Step 3/3 : ENTRYPOINT [ "curl", "-s", "http://ip.cn" ]
 ---> Running in 5254fb4f1c16
Removing intermediate container 5254fb4f1c16
 ---> 906847735fbe
Successfully built 906847735fbe
Successfully tagged centos:entropy
hadoop@Docker:~/myDocker$ cat Dockerfile3
FROM centos
RUN yum install -y curl
ENTRYPOINT [ "curl", "-s", "http://ip.cn" ]
hadoop@Docker:~/myDocker$ 

运行:

猜你喜欢

转载自blog.csdn.net/kaizuidebanli/article/details/83780817