我计划在容器内使用"systemd"。根据我阅读的文章,限制每个容器只有一个进程是更可取的。
但如果我在容器内配置"systemd",最终会运行许多进程。
在做出任何决定之前,了解在容器内使用systemd的利弊将是很好的。
我计划在容器内使用"systemd"。根据我阅读的文章,限制每个容器只有一个进程是更可取的。
但如果我在容器内配置"systemd",最终会运行许多进程。
在做出任何决定之前,了解在容器内使用systemd的利弊将是很好的。
如果可能的话,我建议您避免在容器中使用systemd。
Systemd 挂载文件系统,控制多个内核参数,具有自己的内部系统来捕获进程输出,配置系统交换空间、配置大页面和POSIX消息队列,启动进程间消息总线,启动每个终端登录提示,并管理一系列系统服务。其中许多是Docker为您完成的任务,其他是默认情况下Docker防止(出于良好原因)的系统级控制。
通常,您希望容器只做一个事情,这可能需要多个协调进程,但通常您不希望它执行systemd提供的除进程管理器外的任何操作。由于systemd更改了许多主机级别的参数,因此您通常需要将其作为--privileged
运行,这会破坏Docker的隔离,这通常是一个不好的想法。
如您在问题中所述,通常认为每个容器运行一个“组件”最佳。如果您无法这样做,则像supervisord这样的轻量级进程管理器,只需完成所需的最小init进程即可,这符合Docker和Unix哲学。
s6 成为了容器中一个相对受欢迎的init程序,当你需要多个进程时。是的,并不是“每个容器一个进程”,而是“每个容器一件事情”。例如运行网站,虽然仍然是一件事情,但通常涉及到多个进程。