docker09(优雅地退出docker)

docker09(优雅地退出docker)

一.引子

退出容器大家一个都知道如何操作,这里笔者引出了优雅地退出容器的概念。所谓优雅地退出容器就是在容器结束全部工作之后再进行容器关闭。而平时我们的容器使用都是直接强行关闭和开启的。

二.有关docker优雅退出相关概念

(一).容器优雅退出相关场景

1.容器与外部服务建立了TCP连接,在还没有完全断开的情况下,三次握手或四次挥手还没有完全完成容器就关闭了。一些重要数据难免会丢失,还会导致外部服务器的资源浪费。显然这就不是优雅地退出。
2.容器在进行打包,下载,上传操作时,需要长时间保持数据连接,我们在保证容器完成数据操作之后退出容器,这也是优雅地退出容器。

这些场景都要求打包在容器中的应用程序能够被优雅的终止(也即gracefully shutdown),这种gracefully shutdown的方式,允许程序在容器被停止的时候,有一定时间做一些后续处理操作,这也是我们需要进一步探讨的话题。

(二).容器退出的信号及相关命令

要了解docker退出的命令那必须了解docker的信号指令,每一个指令对应的内容是什么。

在这里插入图片描述
1.docker stop
在docker stop命令执行的时候,会先向容器中PID为1的进程发送系统信号SIGTERM,然后等待容器中的应用程序终止执行,如果等待时间达到设定的超时时间,或者默认的10秒,会继续发送SIGKILL的系统信号强行kill掉进程。在容器中的应用程序,可以选择忽略和不处理SIGTERM信号,不过一旦达到超时时间,程序就会被系统强行kill掉,因为SIGKILL信号是直接发往系统内核的,应用程序没有机会去处理它。在使用docker stop命令的时候,我们唯一能控制的是超时时间,比如设置为20秒超时:。
2.docker kill
docker kill命令不会给容器中的应用程序有任何gracefully shutdown的机会。它会直接发出SIGKILL的系统信号,以强行终止容器中程序的运行。通过查看docker kill命令的帮助,我们可以看到,除了默认发送SIGKILL信号外,还允许我们发送一些自定义的系统信号:

docker stop命令,更类似于Linux系统中的kill命令,二者都是发送系统信号SIGTERM。而docker kill命令,更像是Linux系统中的kill -9或者是kill -SIGKILL命令,用来发送SIGKILL信号,强行终止进程。

docker kill适合用来强行终止程序并实现快速停止容器。而如果希望程序能够gracefully shutdown的话,docker stop才是不二之选。这样,我们可以让程序在接收到SIGTERM信号后,有一定的时间处理、保存程序执行现场,优雅的退出程序。

有些进程是有可能是接受不到15(SIGTERM)指令,容器将会直接执行9(SIGKILL),容器将直接被杀死。这也是无法优雅退出的原因。我们可以通过脚本来监听指令,并使其优雅退出。

以上就是关于docker容器优雅退出的内容了,要做到优雅,那就一定要做到胸有成竹,不慌不乱。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Docker中的优雅退出是指当我们想要停止或重启一个运行中的容器时,我们希望容器能够正常地关闭,并保证容器内的应用程序正确地结束运行。 在Docker中,我们可以通过发送一个信号给容器来实现优雅退出。在默认情况下,当我们使用`docker stop`命令停止容器时,Docker会发送一个SIGTERM信号给容器,然后等待一段时间容器自己执行清理操作。 容器收到SIGTERM信号后,首先会向容器内运行的主进程发送该信号。主进程收到信号后,可以选择处理该信号并正常退出,或者忽略该信号继续运行。如果主进程处理了SIGTERM信号并正常退出容器将会停止并退出。 如果容器内的主进程忽略SIGTERM信号或者未能在一定时间退出Docker将会发送一个SIGKILL信号给容器,强制终止容器的运行。 为了使容器内的主进程能够正确地处理SIGTERM信号并退出,我们可以在Dockerfile中添加一些设置,例如使用`ENTRYPOINT`或`CMD`指令来指定容器的启动命令,并使用`STOPSIGNAL`指令来设置信号。 另外,我们也可以利用Docker的一些附加功能来实现优雅退出。例如,我们可以使用Docker的生命周期钩子功能,在容器即将停止或重启时执行一些指定的命令,以便容器内的应用程序能够进行一些清理或保存操作。 总之,通过合理设置容器内主进程的信号处理以及利用Docker的附加功能,我们可以实现docker优雅退出,确保容器内的应用程序能够正确地结束运行。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值