【问题标题】:Can all docker swarm instances run on same machine?所有 docker swarm 实例都可以在同一台机器上运行吗?
【发布时间】:2018-06-19 23:40:27
【问题描述】:

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

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

背景:我想弄清楚我应该如何使用 Docker 构建微服务网格。容器将运行 .NET Core。我不太热衷于过度依赖 Docker,因为它在几年内可能不会成为首选技术。我可以/应该用 Docker 做什么,我可以/应该在容器内做什么。这就是我想要弄清楚的。

【问题讨论】:

    标签: docker docker-swarm asp.net-core-webapi


    【解决方案1】:

    我已复制您的问题并尝试回答。

    • swarm 中的所有实例都必须在不同的机器上运行,还是它们都可以在相同的机器上运行? (如果硬件数量有限,只想尝试 swarm 模式)
      • 您可以在一个集群中只有一台机器并运行同一服务的多个任务,或者换句话说,您的服务规模可以超过实际机器的数量。我有一个测试群,一台机器,一台机器,三台机器,它的工作方式相同。
    • 是否必须运行集群模式才能在实例之间进行通信?
      • 您必须以 swarm 模式运行 docker 才能创建服务,请参阅this link
    • swarm 模式与只正常运行多个容器之间的主要区别是什么?
      • afaik 的关键区别在于,当一个任务失败时,docker 会自动启动另一个任务。您可以轻松扩展服务,这意味着您只需扩展服务(向上或向下)即可轻松完成多项任务。在运行容器时 - 当它出现故障时,您必须手动启动另一个容器。
    • 容器实例之间的通信选项有哪些? (在 swarm 和常规模式下)http?命名管道?其他?
      • 我目前只测试了一个集群中的几个 Wildfly 服务器,它们位于同一个网络上。我不确定其他人,但很想知道。我只读过 RabbitMQ,但似乎找不到链接 atm。
    • 如果在同一台机器上的容器之间使用 http 通信,它会与命名管道大致相同吗?
      • 我不能说。
    • 在 Docker 中是否有对消息总线或类似的内置支持?
      • 我不能说。
    • 是否有用于设计、管理、测试和/或调试 Docker 群的 GUI?
      • 我测试了 rancher 和 portainer.io,我找到了它们的列表this link
    • 容器能否列出其他容器、停止/重新启动一些容器并启动新容器?
      • 我不确定您为什么要这样做?我想这是可能的,见this link
    • 能否允许容器访问操作系统功能(在我的情况下为 Linux)以配置例如反向代理或 WAN 上的端口转发?
      • 我不能说。

    【讨论】:

      【解决方案2】:

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

      • Benefits of Swarm 超过 docker rundocker-compose
      • 容器之间的所有通信都必须是 TCP/UDP 等。你可以强制两个容器只在一台机器上运行,然后绑定挂载它们的套接字以便它们跳过网络,但这有点反图案。 Swarm 专为分布式和 TCP/UDP 的一切而设计。
      • 在少数情况下,例如 PHP-FPM + Nginx,我建议将两者捆绑在同一个容器中(违反 docker 最佳实践,但相信我,这比单独的容器更容易)。这将确保它们一起扩展(一对一关系)并保持快速,因为它们使用本地套接字进行通信)。我只推荐这样的几个设置,另一个是 ColdFusion + Nginx,因为它们是提供 HTTP 响应的同一工具的两个部分......我建议将图像捆绑在一起几乎所有其他情况,但我对想法持开放态度:)。
      • Rancher 不再支持 Swarm。 PortainerSwarmPit 是 GUI 选项。
      • 是的,运行 Portainer/SwarmPit 之类的容器或通过绑定安装或 TCP 控制 Docker 套接字的容器可以控制整个 Swarm。这就是所有 docker 管理的工作方式:)
      • 对于反向代理,您将运行基于容器的代理,例如 TraefikDocker Flow Proxy,它为 Docker 和 Swarm 设置 HAProxy。

      我的 DockerCon 演讲中讨论了其中许多主题:https://www.bretfisher.com/dockercon18/

      【讨论】:

        猜你喜欢
        • 2011-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-22
        • 2018-08-09
        • 2019-02-22
        • 1970-01-01
        相关资源
        最近更新 更多