首页 > 解决方案 > 是否建议在 docker 容器内运行 systemd?

问题描述

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

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

在我做出任何决定之前,了解在容器内使用 systemd 的优缺点会很棒。

标签: dockersystemd

解决方案


如果可能的话,我建议您避免在容器中使用 systemd。

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

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

正如您在问题中所说,每个容器运行一个“部件”通常被认为是最好的。如果你不能做到这一点,那么对于 Docker 和 Unix 哲学来说,像supervisord这样的轻量级进程管理器会更好地匹配所需的 init 进程。


推荐阅读