【问题标题】: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 模式与只正常运行多个容器之间的主要区别是什么?
- afaik 的关键区别在于,当一个任务失败时,docker 会自动启动另一个任务。您可以轻松扩展服务,这意味着您只需扩展服务(向上或向下)即可轻松完成多项任务。在运行容器时 - 当它出现故障时,您必须手动启动另一个容器。
- 容器实例之间的通信选项有哪些? (在 swarm 和常规模式下)http?命名管道?其他?
- 我目前只测试了一个集群中的几个 Wildfly 服务器,它们位于同一个网络上。我不确定其他人,但很想知道。我只读过 RabbitMQ,但似乎找不到链接 atm。
- 如果在同一台机器上的容器之间使用 http 通信,它会与命名管道大致相同吗?
- 在 Docker 中是否有对消息总线或类似的内置支持?
- 是否有用于设计、管理、测试和/或调试 Docker 群的 GUI?
- 我测试了 rancher 和 portainer.io,我找到了它们的列表this link
- 容器能否列出其他容器、停止/重新启动一些容器并启动新容器?
- 能否允许容器访问操作系统功能(在我的情况下为 Linux)以配置例如反向代理或 WAN 上的端口转发?
【解决方案2】:
@namokarm 做得很好,我正在填补空白:
-
Benefits of Swarm 超过
docker run 或 docker-compose。
- 容器之间的所有通信都必须是 TCP/UDP 等。你可以强制两个容器只在一台机器上运行,然后绑定挂载它们的套接字以便它们跳过网络,但这有点反图案。 Swarm 专为分布式和 TCP/UDP 的一切而设计。
- 在少数情况下,例如 PHP-FPM + Nginx,我建议将两者捆绑在同一个容器中(违反 docker 最佳实践,但相信我,这比单独的容器更容易)。这将确保它们一起扩展(一对一关系)并保持快速,因为它们使用本地套接字进行通信)。我只推荐这样的几个设置,另一个是 ColdFusion + Nginx,因为它们是提供 HTTP 响应的同一工具的两个部分......我不建议将图像捆绑在一起几乎所有其他情况,但我对想法持开放态度:)。
- Rancher 不再支持 Swarm。 Portainer 和 SwarmPit 是 GUI 选项。
- 是的,运行 Portainer/SwarmPit 之类的容器或通过绑定安装或 TCP 控制 Docker 套接字的容器可以控制整个 Swarm。这就是所有 docker 管理的工作方式:)
- 对于反向代理,您将运行基于容器的代理,例如 Traefik 或 Docker Flow Proxy,它为 Docker 和 Swarm 设置 HAProxy。
我的 DockerCon 演讲中讨论了其中许多主题:https://www.bretfisher.com/dockercon18/