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的区别

  1. 编写Dockerfile
FROM centos
CMD [ "ls", "-a" ]
  1. 构建镜像
docker build -t myls:1.2 .
  1. 启动镜像
docker run -it myls:1.2 -lh

出现错误,这是因为Dockerfile里面使用的是CMD ["ls", "-a"]运行是传一个-lh过去会覆盖

  1. 修改Dockerfile
FROM centos
ENTRYPOINT [ "ls", "-a" ]
  1. 构建镜像
docker build -t myls:1.3 .
  1. 运行镜像
docker run -it myls:1.3 -l

发现 【 -l 】被追加到 ls 后面了哦

posted @ 2020-02-15 14:37  Leader_TBlog  阅读(73)  评论(0编辑  收藏  举报