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

问题描述 投票:4回答:3

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

但是如果我在容器中配置'systemd',我将最终运行许多进程。

在我做出任何决定之前,理解在容器内使用systemd的利弊是很好的。

docker systemd
3个回答
7
投票

我建议你尽可能避免在容器中使用systemd。

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

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

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


2
投票

当您需要多个进程时,s6成为容器的一个有点流行的初始化。是的,它不是“每个容器一个进程”,它是“每个容器一件事”。运行网站,例如仍然是一件事,但它通常不止一个过程。


0
投票

您应该更多地考虑使用您喜欢的init系统的问题。

可以使用在容器中作为PID-1运行的旧/ sbin / init或systemd-daemon。任何像“docker stop”这样的命令都只会与PID-1通信。如果在容器中只有一个java应用程序,则建议将该进程直接作为容器的PID-1运行。

运行systemd通常不是必需的 - 如果容器中有多个服务,或者某个包装器脚本使用'systemctl',那么您可能仍希望使用激活它。但后者的用例也将由docker-systemctl-replacement涵盖。

© www.soinside.com 2019 - 2024. All rights reserved.