- [全网独家首发!Docker顶级教程,简直把所有操作都给写出来了](
)
- [这套Github上40K+star学习笔记,可以帮你搞定95%以上的Java面试](
)
作为一名系统重启工程师(SRE),你可能经常需要重启容器,毕竟 Kubernetes 的优势就是快速弹性伸缩和故障恢复,遇到问题先重启容器再说,几秒钟即可恢复,实在不行再重启系统,这就是系统重启工程师的杀手锏。然而现实并没有理论上那么美好,某些容器需要花费 10s
左右才能停止,这是为啥?有以下几种可能性:
- 容器中的进程没有收到SIGTERM信号。
- 容器中的进程收到了信号,但忽略了。
- 容器中应用的关闭时间确实就是这么长。
对于第 3 种可能性我们无能为力,本文主要解决 1 和 2。
如果要构建一个新的 Docker 镜像,肯定希望镜像越小越好,这样它的下载和启动速度都很快,一般我们都会选择一个瘦了身的操作系统(例如 Alpine
,Busybox
等)作为基础镜像。
问题就在这里,这些基础镜像的 init 系统也被抹掉了,这就是问题的根源!
init
系统有以下几个特点:
- 它是系统的