【问题标题】:Why does Docker have a daemon?为什么 Docker 有一个守护进程?
【发布时间】:2017-12-04 00:05:50
【问题描述】:

我最近发现了rkt,它是 Docker 的竞争对手容器运行时。 rkt 似乎不需要守护进程。对我来说,rkt 就像运行任何其他命令一样,它可以轻松地与 systemd(或其他 init 系统)一起使用。

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

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

【问题讨论】:

  • 它提供了snadbox bos容器??
  • @Héctor 这对理解 Docker 守护进程的实用性有何帮助?
  • @Héctor 是的,没错,所以如果 rkt 可以在没有守护进程的情况下做到这一点,为什么 Docker 需要守护进程?我的意思是,在大多数情况下,守护进程会添加额外的配置(启用服务、设置守护进程套接字的权限、确保守护进程没有监听公共 IP 等)。所以如果可以不用,为什么要有守护进程?
  • 哦,好的!有什么优点?是不是不需要初始化系统?或者是关于使用单个守护进程管理跨多个物理主机的容器(这似乎不是一个常见的用例)?

标签: docker rkt


【解决方案1】:

Docker 被设计为一个客户端/服务器应用程序,它允许您远程访问 docker API。这允许使用基于经典容器的 swarm 等工具,它们实际上是 docker 主机集群的反向代理。

守护进程还为共享状态提供了场所。它正在根据容器的重启策略重启容器。但它还管理可能在多个容器之间共享的网络和卷。

最后,随着 swarm 模式的引入,守护进程也是这些工具的中心位置,否则这些工具将作为自己的守护进程运行,并使用 Kubernetes 等工具。

如果您需要一个无守护进程的解决方案,但又喜欢 docker,那么请考虑使用runc,这是 docker 默认为每个容器使用的运行时环境。

这不涉及容器内的初始化。如果您需要,docker 现在包含一个可选的 init,您可以为每个容器启用它。如果你需要一些东西来清理僵尸进程,你总是可以选择包含你自己的 init,比如 tini。

【讨论】:

  • 很好的答案!这也解决了我的一些疑问,谢谢!
  • 这些都不像我想要的功能。不幸的是,Docker 默认包含所有这些额外的废话,而默认情况下应该首选更清晰的实现。
  • @fulldecent 如果您不需要这些功能,请考虑使用 runc 或 containerd。
猜你喜欢
  • 1970-01-01
  • 2023-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-10
相关资源
最近更新 更多