为什么 Docker 有守护进程?
Why does Docker have a daemon?
我最近发现 rkt
,Docker 的竞争对手容器运行时。似乎 rkt
不需要守护进程。对我来说,rkt
就像 运行 任何其他命令,它可以轻松地与 systemd(或其他初始化系统)一起使用。
这让我想知道 Docker 守护进程的实用性。
为什么 Docker 需要守护进程?守护进程提供了哪些没有它就不可能实现的功能?它的唯一目标是消除对像 systemd 这样的初始化系统的需求吗(在 Rancher OS 中可以看到)?
Docker 被设计为 client/server 应用程序,允许您远程访问 docker API。这允许诸如基于经典容器的 swarm 之类的工具有效地反向代理 docker 主机集群。
守护进程还为共享状态提供了一个位置。它根据重启策略重启容器。但它也管理可能在多个容器之间共享的网络和卷。
最后,随着 swarm 模式的引入,守护进程也是这些工具的中心位置,否则这些工具将 运行 作为它们自己的带有 kubernetes 等工具的守护进程。
如果您需要一个无守护程序的解决方案,但在其他方面喜欢 docker,请考虑使用 runc,这是 docker 用于每个容器的 运行 时间环境默认情况下。
这里不涉及容器内部的init。如果您需要,docker 现在包含一个可选的 init,您可以为每个容器启用它。如果你需要一些东西来清理僵尸进程,你总是可以选择包含你自己的 init,比如 tini。
我最近发现 rkt
,Docker 的竞争对手容器运行时。似乎 rkt
不需要守护进程。对我来说,rkt
就像 运行 任何其他命令,它可以轻松地与 systemd(或其他初始化系统)一起使用。
这让我想知道 Docker 守护进程的实用性。
为什么 Docker 需要守护进程?守护进程提供了哪些没有它就不可能实现的功能?它的唯一目标是消除对像 systemd 这样的初始化系统的需求吗(在 Rancher OS 中可以看到)?
Docker 被设计为 client/server 应用程序,允许您远程访问 docker API。这允许诸如基于经典容器的 swarm 之类的工具有效地反向代理 docker 主机集群。
守护进程还为共享状态提供了一个位置。它根据重启策略重启容器。但它也管理可能在多个容器之间共享的网络和卷。
最后,随着 swarm 模式的引入,守护进程也是这些工具的中心位置,否则这些工具将 运行 作为它们自己的带有 kubernetes 等工具的守护进程。
如果您需要一个无守护程序的解决方案,但在其他方面喜欢 docker,请考虑使用 runc,这是 docker 用于每个容器的 运行 时间环境默认情况下。
这里不涉及容器内部的init。如果您需要,docker 现在包含一个可选的 init,您可以为每个容器启用它。如果你需要一些东西来清理僵尸进程,你总是可以选择包含你自己的 init,比如 tini。