Docker容器和服务的区别

我想知道下面的docker设置是否有区别。

  • 通过远程apipipe理两个独立的docker引擎。
  • 通过一个docker引擎pipe理两个docker群节点。

我想知道你是否可以pipe理一个能够在特定节点上运行一个容器的群体,有没有使用不同的Docker引擎的用例?

两者之间的区别是swarm模式。 当docker引擎在群集模式下运行服务时,您将获得:

  • 从pipe理者的编排,不断尝试纠正当前状态和目标状态之间的差异。 这也可以包括使用仲裁模式的高可用性(只要大多数pipe理人员可以做出决定)。
  • 覆盖networking允许不同主机上的容器在自己的容器networking上相互通话。 这也可能涉及IPSEC的安全性。
  • 网状networking为已发布的端口和VIP服务,不会像容器IP那样改变。 后者可以防止来自DNScaching的问题。 前者拥有群中的所有节点发布端口并将stream量路由到提供此服务的容器。
  • 滚动升级以避免使用复制服务的任何停机时间。
  • 扩展服务时跨多个节点进行负载平衡。

更多关于swarm模式的细节可以从docker的文档中获得 。

swarm模式的缺点是当你在一个远程节点上运行时,你从容器中删除了一层。 您不能在任务上运行exec命令来调查容器,您需要在容器上执行该命令,并且位于当前正在使用的节点上。 Docker也从类似--volumes-from服务中删除了一些选项,当容器可能在不同的机器上运行时--volumes-from这些选项不适用。

如果您认为您可能会超越在单个节点上运行容器,需要在不同节点上的容器之间进行通信,或者只是希望滚动升级等编排function,那么我会推荐使用群集模式。 我只能直接在主机上pipe理容器,如果你有一个特定的要求,防止集群模式成为一个选项。 而且你总是可以同时执行这两个操作,直接pipe理一些容器,将其他人作为一个服务或者堆栈内的堆栈,在相同的节点上pipe理。