扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇文章将为大家详细讲解有关如何编写docker file使得运行bash脚本时容器不退出,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
创新互联建站长期为上1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为历城企业提供专业的成都做网站、成都网站制作,历城网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。
docker file的编写,需要掌握一些基础知识:
关键字 1:FROM 指定基础镜像
所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制。就像我们运行一个 nginx
镜像的容器,再进行修改一样,基础镜像是必须指定的。而 FROM
就是指定 基础镜像,因此一个 Dockerfile
中 FROM
是必备的指令,并且必须是第一条指令
关键字2:ENTRYPOINT
ENTRYPOINT
的格式和 RUN
指令格式一样,分为 exec
格式和 shell
格式。
ENTRYPOINT
的目的和 CMD
一样,都是在指定容器启动程序及参数。ENTRYPOINT
在运行时也可以替代。
当指定了 ENTRYPOINT
后,CMD
的含义就发生了改变,不再是直接的运行其命令,而是将 CMD
的内容作为参数传给 ENTRYPOINT
指令。
关键字3:CMD
Docker 不是虚拟机,容器就是进程。既然是进程,那么在启动容器的时候,需要指定所运行的程序及参数。CMD
指令就是用于指定默认的容器主进程的启动命令的。
CMD命令执行脚本的原理,本质上是用了 /bin/sh -c 这一命令来执行用户脚本,所以当前容器的主进程其实是/bin/sh,而不是用户的脚本。
/bin/sh执行完用户脚本后就退出了,作为主进程,当其退出后,Docker容器也随之退出了,这一点是容器的特别之处,也是不同于虚拟机的地方。
我们通常说容器是单进程的,不仅仅指容器里面只应当运行一个主进程,实际上,我们可以认为整个容器就是我们的主进程,也就是说不要把容器想像成一个虚拟机,而应当把容器看作是一个可执行文件。
因此当我们执行一个脚本后,要想容器不退出,那么可以在ENTRYPOINT中设置"/bin/bash",确保容器不会退出。
例如下面的dockerfile:
FROM ccccccccccc
CMD ["/data/main.sh"]
ENTRYPOINT ["/bin/bash"]
然后通过docker build命令构建镜像:
docker build -t test:v1 .
关于“如何编写docker file使得运行bash脚本时容器不退出”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流