dockerfile构建镜像的命令_Dockerfile执行指令的详细介绍与实践

一、RUN&CMD&ENTRYPOINT

RUN:在Build构建镜像时对镜像内部的文件或者资源进行调整,一旦这个镜像创建以后,这个镜像就是只读的了

ENTRYPOINT:容器启动时执行的命令

CMD:容器启动后执行默认的命令或参数

1、RUN-构建时运行(两种不同的书写命令格式)

①、RUN yum install -y vim #Shell 命令格式

注:Shell运行方式,使用Shell执行时,当前Shell是父进程,生成一个子shell进程;

在子shell中执行脚本。脚本执行完毕,退出子shell,回到当前shell

d76944c6381f5c0dac371c240c7c2044.png

②、RUN["yum","install","-y","vim"] #Exec命令格式

注:Exec运行方式,使用Exec方式,会用Exec进程替换当前进程,并且保持PID不变,执行完毕,直接退出,并不会退出之前的进程环境

254576fe4dc98f5f13b391e490ebf65b.png

注:上面都是采用yum 安装我们的文本编辑器,大多数情况下,推荐使用Exec命令方式

2、ENTRYPOINT启动命令

①、ENTRYPOINT(入口点)用于在容器启动时执行命令

②、Dockerfile中只有最后一个ENTRYPOINT会被执行

③、ENTRYPOINT["ps"] #推荐使用Exec格式

注:这句话的意思相当于执行系统中ps这个命令,ENTRYPOINT是一定会被运行的

3、CMD默认命令(容器启动时执行)

①、CMD用于設置默认执行的命令

②、如Dockerfile中出现多个CMD,则只有最后一个被执行

③、如容器启动时附加指令,则CMD被忽略

④、CMD["ps","-ef"] #推荐使用Exec格式命令

注:这句话的意思相当于执行系统中ps -ef 两个命令,CMD命令不一定会执行,如果在容器启动的镜像后面添加命令的话,它会替代Dockerfile中的CMD命令,例如:docker run xbcai.com/docker_run ls 我们在镜像后面添加了ls命令,它会取代Dockerfile中的CMD

4、RUN与CMD例子演示

8b30fbcee3ea882dd31eb76fda030504.png

①、创建文件夹 mkdir docker_run

②、进入文件夹内部 cd docker_run

③、创建Dockerfile文件编写Dockerfile vim Dockerfile

④、Dockerfile文件内容如下

FROM centos

RUN ["echo","image building!!!"]#构建镜像时才会执行的

CMD ["echo","container starting..."] #CMD时容器启动时才执行

⑤、基于Dockerfile文件构建镜像,这里是在当前目录下面进行构建

docker build -t xbcai.com/docker_run . #这里会执行Dockerfile文件中的RUN命令,它是镜像构建时执行

⑥、启动容器 docker run xbcai.com/docker_run #这里会执行Dockerfile文件中的CMD命令,它时容器启动时会执行

⑦、启动容器,在镜像后面执行系统命令ls,docker run xbcai.com/docker_run ls #

如果在镜像后添加命令的话,这个命令会取代CMD执行,所以镜像文件中的CMD就不会执行了

5、演示ENTRYPOINT命令

如果单独使用ENTRYPOINT命令的话,它和CMD的效果几乎是完全一样的,我们这里演示一下,基于第4点我们直接将CMD改为ENTRYPOINT,Dockerfile如下所示

1ff195a7b1081bcfc28c6f348ef6848d.png
FROM centosRUN ["echo","image building!!!"] #构建镜像时才会执行的ENTRYPOINT ["echo","container starting..."] #CMD时容器启动时才执行
783345f2f31d3bf53d15165c75bfeba0.png

单独使用的话,并没有什么太大的用处,所以一般是ENTRYPOINT与CMD结合使用

6、演示ENTRYPOINT&CMD结合使用

①、构建镜像Dockerfile文件,如下所示

FROM centos

RUN ["echo","image building!!!"]#构建镜像时才会执行的

ENTRYPOINT ["ps"] #ENTRYPOINT时容器启动时才执行

CMD ["-ef"] # CMD是容器启动时才会执行

注:这里的ENTRYPOINT 、CMD在容器启动时,是会将里面的ps -ef 命令拼接一起执行的

565e1889781c9e0d1ebd44d649e88bb9.png

②、构建镜像docker build -t xbcai.com/docker_run .

aad6df0dea61dba965dfd07f059f763b.png

两个命令结合使用,用处是非常大的,因为我们都知道CMD代表默认指令,可以用外界传参替换掉默认指令,例如在容器启动的时候传递其他指令替代的,例如:docker run xbcai.com/docker_run aux,这里的意思是将aux命令替换掉原本CMD["-ef"] 里面的-ef命令

8f99dd9917e711f130de5ba4860c124d.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值