Dockerfile的一个例子以及CMD和ENTRYPOINT区别说明(九)
目录
2.创建/root/docker/mycenos/Dockerfile
1.Dockerfile的一个例子
1.思路
创建一个自定义的centos 里面有vim 和net-tools
2.创建/root/docker/mycenos/Dockerfile
Touch Dockerfile
3.编写Dockerfile
4.构造镜像build
如果你的文件不是Dockerfile
Docker build -f /root/mycentos/Dockerfile -t mycentos:1.0 .
否则
Docker build -t mycentos:1.0 .
5.运行镜像
6.进入镜像
2.CMD与ENTYRPOINT区别
1,CMD说明
Dockerfile 中可以有多个CMD的命令,但只有最后一个生效,CMD会被docker run之后的参数替换掉
可以使用tomcat的案例演示
2.1查看tomcat的Dockerfile
从上面的可以看出最后执行了一个catalina.sh的命令 相当于./bin/catalina.sh
运行如下命令,可以看出下图的效果
docker run -it -p 9999:8080 tomcat ls -lh
发现这个tomcat的容器启动之后就退出了
那是因为在启动容器的时候后面加了ls -lh那么会覆盖Dockerfile里面的 CMD ["catalina.sh", "run"]
2,ENTRYPOINT说明
使用ENTRYPOINT来运行命令,在run 运行的参数会追加到新的命令后面
3,自定义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 后面了哦