Dockerfile的一个例子以及CMD和ENTRYPOINT区别说明(九)

目录

1.Dockerfile的一个例子

1.思路

2.创建/root/docker/mycenos/Dockerfile

3.编写Dockerfile

4.构造镜像build

5.运行镜像

6.进入镜像                          ​

2.CMD与ENTYRPOINT区别

1,CMD说明

2,ENTRYPOINT说明

3,自定义ls镜像来说明CMD和ENTRYPOINT的区别


1.Dockerfile的一个例子

 

1.思路

创建一个自定义的centos  里面有vim 和net-tools

2.创建/root/docker/mycenos/Dockerfile

Touch Dockerfile

3.编写Dockerfile

                                        Dockerfile的一个例子以及CMD和ENTRYPOINT区别说明(九)

4.构造镜像build

如果你的文件不是Dockerfile

Docker build -f /root/mycentos/Dockerfile  -t mycentos:1.0  .

否则

Docker build -t mycentos:1.0 .

5.运行镜像

                                           Dockerfile的一个例子以及CMD和ENTRYPOINT区别说明(九)

6.进入镜像

                                         Dockerfile的一个例子以及CMD和ENTRYPOINT区别说明(九)

 

 

2.CMD与ENTYRPOINT区别

 

1,CMD说明

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

可以使用tomcat的案例演示

2.1查看tomcat的Dockerfile

                                                     Dockerfile的一个例子以及CMD和ENTRYPOINT区别说明(九)

从上面的可以看出最后执行了一个catalina.sh的命令  相当于./bin/catalina.sh  
运行如下命令,可以看出下图的效果

docker run -it -p 9999:8080 tomcat ls -lh

                                     Dockerfile的一个例子以及CMD和ENTRYPOINT区别说明(九)

发现这个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和ENTRYPOINT区别说明(九)

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

修改Dockerfile

FROM centos
ENTRYPOINT [ "ls", "-a" ]

构建镜像

docker build -t myls:1.3 .

运行镜像

docker run -it myls:1.3 -l

                                            Dockerfile的一个例子以及CMD和ENTRYPOINT区别说明(九)

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