代码之家  ›  专栏  ›  技术社区  ›  Andreas Zita

所有Docker Swarm实例能在同一台机器上运行吗?

  •  3
  • Andreas Zita  · 技术社区  · 8 年前

    我有几个Docker Swarm问题(很抱歉没有把它们分开,但它们都是密切相关的):

    • 群中的所有实例都必须在不同的机器上运行还是都可以在同一台机器上运行?(如果硬件数量有限,只想尝试swarm模式)
    • 我必须运行swarm模式才能在实例之间进行通信吗?
    • swarm模式和只按规则运行多个容器之间的关键区别是什么?
    • 容器实例之间的通信有哪些选项?(在swarm和常规模式下)http?命名管道?其他?
    • 如果在同一台计算机上的容器之间使用http通信,它的速度是否与命名管道的速度大致相同?
    • Docker中是否内置了对消息总线或类似总线的支持?
    • Docker中是否支持任何共识协议?
    • 有没有用于设计、管理、测试和/或调试Docker群集的图形用户界面?
    • 一个容器可以列出其他容器,停止/重新启动一些并启动新的容器吗?(能够作为其他容器的管理者)
    • 容器是否可以访问操作系统功能(在我的例子中是Linux)来配置例如WAN上的反向代理或端口转发?

    背景:我想弄清楚的是我应该如何使用Docker构建一个微服务网格。容器将运行.NET Core。我不太喜欢过分依赖Docker,因为它可能在几年内不是首选技术。我可以/应该怎么处理Docker,我可以/应该怎么处理容器。这就是我想弄清楚的。

    2 回复  |  直到 8 年前
        1
  •  2
  •   namokarm tiktok    8 年前

    我抄了你的问题并试图回答。

    • 群中的所有实例都必须在不同的机器上运行还是都可以在同一台机器上运行?(如果硬件数量有限,只想尝试swarm模式)
      • 一个集群中只能有一台机器,并且可以运行同一服务的多个任务,换句话说,您的服务规模可以超过实际机器的数量。我有一个测试群,一个用一台机器,一个用三台机器,工作原理是一样的。
    • 我必须运行swarm模式才能在实例之间进行通信吗?
      • 您必须在swarm模式下运行Docker才能创建服务,请参见 this link
    • swarm模式和只按规则运行多个容器之间的关键区别是什么?
      • AFAIK的关键区别在于,当一个任务失败时,Docker会自动将另一个任务放上去。而且您可以轻松地扩展服务,这意味着您可以通过扩展服务(向上或向下)轻松地执行多个任务。在运行一个容器时-当它关闭时,你必须手动启动另一个。
    • 容器实例之间的通信有哪些选项?(在swarm和常规模式下)http?命名管道?其他?
      • 我目前只测试了群中的几个wildfly服务器,它们在同一个网络上。我不确定别人的情况,但很想知道。我只读过RabbitMQ,但似乎找不到链接ATM。
    • 如果在同一台计算机上的容器之间使用http通信,它的速度是否与命名管道的速度大致相同?
      • 我说不上来。
    • Docker中是否内置了对消息总线或类似总线的支持?
      • 我说不上来。
    • 有没有用于设计、管理、测试和/或调试Docker群集的图形用户界面?
      • 我已经测试了Rancher和Portainer.io,找到了它们的清单 this link
    • 一个容器可以列出其他容器,停止/重新启动一些并启动新的容器吗?
      • 我不知道你为什么要那样做?我想这是可能的,看 this link
    • 容器是否可以访问操作系统功能(在我的例子中是Linux)来配置例如WAN上的反向代理或端口转发?
      • 我说不上来。
        2
  •  2
  •   Bret Fisher    8 年前

    @Namokarm做得很好,我正在填补空白:

    • Benefits of Swarm 结束 docker run docker-compose .
    • 容器之间的所有通信都必须是TCP/UDP等。您可以强制两个容器仅在一台计算机上运行,然后绑定挂载它们的套接字,以便它们跳过网络,但这有点反模式。swarm是为所有要分布式和tcp/udp设计的。
    • 在一些情况下,比如php-fpm+nginx,我建议将两者捆绑在同一个容器中(与Docker的最佳实践相反,但相信我,这比单独的容器更容易)。这将确保它们一起伸缩(1对1关系),并保持快速,因为它们使用本地套接字进行通信。我只推荐一些这样的设置,另一个是coldfusion+nginx,因为它们是提供http响应的同一工具的两个部分…我 不要 建议在几乎所有其他情况下将图像捆绑在一起,但我愿意接受这样的想法:)。
    • 牧场主不再支持Swarm。 Portainer SwarmPit 是gui选项。
    • 是的,运行portainer/swarmpit或通过绑定挂载或tcp控制docker套接字的容器可以控制整个swarm。这就是所有Docker管理的工作原理:)
    • 对于反向代理,您可以运行基于容器的代理,如 Traefik Docker Flow Proxy ,为Docker和Swarm设置了haproxy。

    其中许多话题都在我的摘要中讨论过: https://www.bretfisher.com/dockercon18/