为什么Docker有一个守护进程?

我最近发现rkt ,Docker的竞争对手容器运行时。 好像rkt不需要守护进程。 对我来说, rkt就像运行其他任何命令一样,它可以在systemd(或其他init系统)中轻松工作。

这让我想知道Docker守护进程的实用性。

为什么Docker需要一个守护进程? 守护进程提供了什么,没有它,将不可能? 它唯一的目标是消除像systemd这样的init系统的需求(在Rancher OS中可以看到)?

Docker被devise为一个客户端/服务器应用程序,允许你远程访问docker API。 这允许像经典的基于容器的群集这样的工具有效地作为docker主机集群的反向代理。

守护进程还提供了共享状态的地方。 它将根据其重新启动策略重新启动容器。 但它也在pipe理可能在多个容器之间共享的networking和卷。

最后,随着swarm模式的引入,守护进程也是这些工具的核心位置,否则这些工具将会像kubernetes一样作为自己的守护进程运行。

如果你需要一个无守护进程的解决scheme,但是像docker那样,那么可以考虑使用runc ,它是默认情况下docker使用每个容器的运行环境。

这不涉及容器内的init。 如果你需要,docker现在包括一个可选的init,你可以启用每个容器。 而且你总是可以select包含你自己的init,比如tini,如果你需要一些东西来清理僵尸进程的话。