温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-11-08 10:27:17 来源:亿速云 阅读:973 作者:小新 栏目:云计算

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

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI