所有docker swarm实例都可以在同一台机器上运行吗?

时间:2018-06-16 18:56:42

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

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

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

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

2 个答案:

答案 0 :(得分:2)

我已经复制了你的问题并试图回答它们。

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

答案 1 :(得分:1)

@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/