docker - 是否建议在 docker 容器内运行 systemd?
问题描述
我打算在容器内使用“systemd”。根据我读过的文章,最好每个容器只限制一个进程。
但是如果我在容器内配置“systemd”,我最终会运行许多进程。
在我做出任何决定之前,了解在容器内使用 systemd 的优缺点会很棒。
解决方案
如果可能的话,我建议您避免在容器中使用 systemd。
Systemd挂载文件系统,控制多个内核参数,拥有自己的用于捕获进程输出的内部系统,配置系统交换空间,配置大页面和 POSIX 消息队列,启动进程间消息总线,启动每个终端的登录提示,并管理一个大量的系统服务。其中许多是 Docker 为您做的事情;其他是 Docker 默认阻止的系统级控制(有充分的理由)。
通常你希望一个容器做一件事,这有时需要多个协调进程,但你通常不希望它做 systemd 除了提供进程管理器之外的任何事情。由于 systemd 更改了如此多的主机级参数,因此您经常需要运行它,因为--privileged
这会破坏 Docker 隔离,这通常是个坏主意。
正如您在问题中所说,每个容器运行一个“部件”通常被认为是最好的。如果你不能做到这一点,那么对于 Docker 和 Unix 哲学来说,像supervisord这样的轻量级进程管理器会更好地匹配所需的 init 进程。
推荐阅读
- opengl - 硬件不支持定义的纹理数量(使用 VTK/PCL)
- java - java.lang.reflect.InvocationTargetException,由:java.lang.NoClassDefFoundError:com/fasterxml/jackson/databind/ObjectMapper引起
- javascript - 如何从两个不同的表单集中只选择一个单选按钮?
- javascript - Fabricjs:撤消时不呈现背景图像
- debugging - Visual Studio 2017 调试打开新浏览器
- shell - sqlldr shell 脚本将 csv 导入到 oracle
- java-8 - 如何在 java 8 中评估第 2 行?
- uicollectionview - 增加按钮按下时collectionview单元格的高度并滚动到底部
- python - 数组的输出未对齐
- c# - 从连接读取数据时出错