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

Can all docker swarm instances run on same machine?

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

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

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

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

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

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

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