189 8069 5689

如何编写dockerfile使得运行bash脚本时容器不退出

这篇文章将为大家详细讲解有关如何编写docker file使得运行bash脚本时容器不退出,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

创新互联建站长期为上1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为历城企业提供专业的成都做网站、成都网站制作,历城网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。

docker file的编写,需要掌握一些基础知识:

关键字 1:FROM 指定基础镜像

所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制。就像我们运行一个 nginx 镜像的容器,再进行修改一样,基础镜像是必须指定的。而 FROM 就是指定 基础镜像,因此一个 DockerfileFROM 是必备的指令,并且必须是第一条指令

关键字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脚本时容器不退出”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。


本文标题:如何编写dockerfile使得运行bash脚本时容器不退出
URL标题:http://cdxtjz.com/article/peppos.html

其他资讯