14-Dockerfile详解【3】
CMD说明
Dockerfile 中可以有多个CMD的命令,但只有最后一个生效,CMD会被docker run之后的参数替换掉。
可以使用tomcat的案例演示
查看tomcat的Dockerfile
从上面的可以看出最后执行了一个catalina.sh的命令 相当于./bin/catalina.sh
运行如下命令,可以看出下图的效果
docker run -it -p 9999:8080 tomcat ls -lh
发现这个tomcat的容器启动之后就退出了
那是因为在启动容器的时候后面加了ls -lh那么会覆盖Dockerfile里面的 CMD ["catalina.sh", "run"]
ENTRYPOINT说明
使用ENTRYPOINT来运行命令,在run 运行的参数会追加到新的命令后面。
自定义ls镜像来说明CMD和ENTRYPOINT的区别
目地:讲解CMD和ENTRYOINT的区别
- 编写Dockerfile
FROM centos
CMD [ "ls", "-a" ]
- 构建镜像
docker build -t myls:1.2 .
- 启动镜像
docker run -it myls:1.2 -lh
出现错误,这是因为Dockerfile里面使用的是CMD ["ls", "-a"]运行是传一个-lh过去会覆盖
- 修改Dockerfile
FROM centos
ENTRYPOINT [ "ls", "-a" ]
- 构建镜像
docker build -t myls:1.3 .
- 运行镜像
docker run -it myls:1.3 -l
发现 【 -l 】被追加到 ls 后面了哦