Docker 的 dumb-init 有多重要?
How critical is dumb-init for Docker?
我希望这个问题不会被标记为primarily opinion-based
,但是有一个objective答案。
我已阅读 Introducing dumb-init, an init system for Docker containers,其中详细描述了为什么以及如何使用 dumb-init
。老实说,对于那些不太了解 Linux 流程结构如何工作的人来说,这听起来很戏剧化——如果你不使用 dumb-init
,感觉就好像你做的事情完全错了。
这就是我考虑在我自己的 Docker 图片中使用它的原因……阻止我这样做的原因是我还没有找到官方 Docker 图片使用它。
如果 dumb-init
那么 重要 - 为什么显然没有人使用它?我在这里错过了什么?
如果您有一个生成新进程的进程并且您没有实现良好的信号处理程序来捕获子信号并在您的进程应该停止时停止您的子信号等,则可以使用类似 dumb-init or tini 的东西。
如果您的进程没有生成新进程(例如 Node.js),那么这可能没有必要。
我猜想 MongoDB、PostgreSQL、...可能 运行 子进程实现了良好的信号处理程序。否则会有僵尸进程,有人会提出问题来解决这个问题。
唯一的问题可能是官方语言图像,如节点、ruby、golang。它们中没有 dumb-init/tini,因为您通常不需要它们。但这取决于开发人员,他们可能会实施错误的子执行代码来修复信号处理程序或使用帮助程序作为 PID 1。
我希望这个问题不会被标记为primarily opinion-based
,但是有一个objective答案。
我已阅读 Introducing dumb-init, an init system for Docker containers,其中详细描述了为什么以及如何使用 dumb-init
。老实说,对于那些不太了解 Linux 流程结构如何工作的人来说,这听起来很戏剧化——如果你不使用 dumb-init
,感觉就好像你做的事情完全错了。
这就是我考虑在我自己的 Docker 图片中使用它的原因……阻止我这样做的原因是我还没有找到官方 Docker 图片使用它。
如果 dumb-init
那么 重要 - 为什么显然没有人使用它?我在这里错过了什么?
如果您有一个生成新进程的进程并且您没有实现良好的信号处理程序来捕获子信号并在您的进程应该停止时停止您的子信号等,则可以使用类似 dumb-init or tini 的东西。
如果您的进程没有生成新进程(例如 Node.js),那么这可能没有必要。
我猜想 MongoDB、PostgreSQL、...可能 运行 子进程实现了良好的信号处理程序。否则会有僵尸进程,有人会提出问题来解决这个问题。
唯一的问题可能是官方语言图像,如节点、ruby、golang。它们中没有 dumb-init/tini,因为您通常不需要它们。但这取决于开发人员,他们可能会实施错误的子执行代码来修复信号处理程序或使用帮助程序作为 PID 1。