我应该在Docker容器中运行init进程吗?

前端之家收集整理的这篇文章主要介绍了我应该在Docker容器中运行init进程吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我最近研究了一些关于Docker的最佳实践,并就如何或是否处理init进程遇到了不同的意见.

正如here所指出的,不应该运行init进程.我可以遵循容器应该模拟单个进程而不是整个操作系统的想法.

另一方面,如here所述,如果我忽略syslog等基本OS服务,可能会出现问题.

通常,如何处理这些案件可能没有绝对的答案.您能否分享一些关于此主题的经验或更多见解?对我而言,两者似乎都是合法的.

最佳答案

As often there is maybe no absolute answer on how to handle these
cases. Can you share some experiences or more insights about this
topic? For me both approached seem legit.

发现.这个问题没有绝对的答案.

现在,说了这些,我认为有很大的优势
到每个容器的单进程模型,因为那真的
鼓励您创建可组合的容器(如乐高
块:您可以将它们组合在一起以不同的组合来解决问题
这是可扩展的(你可以启动更多的实例)
没有太多努力的特殊服务).不做疯了
比如你在容器里运行一个ssh守护进程
不鼓励编辑“到位”的东西,并希望 – 有希望
更有可能依靠Dockerfiles来生成你的图像
导致更强大,可重复的过程.

另一方面,有一些应用程序不借出
他们自己很适合这个模型.例如,如果你有
应用程序,分叉许多子进程,并没有正确
wait()对于他们来说,你最终得到了一系列僵尸进程.
您可以运行一个完整的init进程来解决这个问题
问题,或者你可以运行一些简单的like
this
(免责声明:我写的那个)or
this
.

有些应用程序只是真正紧密耦合,而它是
可以通过自由派在不同的容器中运行它们
应用Docker卷和–net = container:…,它更容易
只是为了让它们在同一个容器中运行.

登录Docker特别具有挑战性.运行某种
容器内的日志收集器和您的应用程序一起可以
这个问题的一个解决方案,但也有其他解决方案.
Logspout是一个有趣的
一,但我一直在看systemd里面运行
容器以便使用journald进行日志记录.所以,同时
我还在为每个容器运行一个应用程序进程
有一个init进程和一个journald进程.

所以,最终,它实际上取决于具体情况:两者都取决于您的需求
以及您尝试运行的特定应用程序的需求.
即使在每个容器没有单个进程的情况下也是如此
可能,设计容器仍然提供单一服务
赋予我在第一段中提到的许多优点.

猜你在找的Docker相关文章