是否建议在docker容器中运行systemd?

Vij*_*tha 5 systemd docker

我打算在容器内使用“ systemd”。根据我阅读的文章,每个容器最好限制一个过程。

但是,如果我在容器内配置“ systemd”,则最终将运行许多进程。

在做出任何决定之前,先了解在容器内使用systemd的利弊是非常棒的。

Dav*_*aze 7

我建议您尽可能避免将systemd放在容器中。

Systemd挂载文件系统,控制几个内核参数,拥有自己的内部系统来捕获进程输出,配置系统交换空间,配置大页面和POSIX消息队列,启动进程间消息总线,启动每终端登录提示并管理大量的系统服务。其中许多就是Docker为您服务的事情;其他是Docker默认阻止的系统级控件(有充分的理由)。

通常,您希望容器做一件事情,这有时需要多个协调过程,但是您通常不希望它做systemd提供的超出过程管理器的任何事情。由于systemd更改了许多主机级参数,因此您经常需要运行它,因为--privileged这会破坏Docker隔离,这通常不是一个好主意。

正如您在问题中所说,通常认为最好在每个容器中运行一个“部件”。如果您不能做到这一点,那么对于Docker和Unix而言,像supervisor这样的轻量级进程管理器会要求最小的初始化进程才是更好的选择。


小智 6

当您需要多个进程时,s6成为一种流行的容器 init。是的,这不是“每个容器一个进程”,而是“每个容器一个东西”。例如,运行一个网站仍然是一回事,但通常有多个进程。