【问题标题】:How to setup Docker Swarm for an existing Docker Compose file intended to run in 3 different hosts?如何为要在 3 个不同主机上运行的现有 Docker Compose 文件设置 Docker Swarm?
【发布时间】:2018-08-09 22:31:14
【问题描述】:

我正在尝试为我的(可能很简单)问题找出最佳解决方案。

我有一个(一个)docker compose 文件和一些服务:

  • Rest-Api (java)
  • 蒙古人
  • Redis

其余的 api 需要可扩展。 Java-1、Java-2、Java-3 等

您在下面看到的是 3 个不同的主机。当我的所有主机都启动时,编写所有脚本的最佳解决方案是什么?我希望能够执行docker-compose up -d 之类的操作并在在 3 个不同的主机上生成我的服务。

我知道 docker swarm 可以做一些事情。我还阅读了与 Swarm 结合的 Weave 网络。老实说,我很难把所有东西放在一起。了解如何使其基本工作......

Java 主机将被负载平衡(当然)。

我的主机 1 会成为我的集群管理器吗?主机 2 和 3 工人?我该如何管理这个。?

你有什么建议吗? Rancher、Portainer、Docker-Machine、其他...?

     Host 2
+-------------+                               
|             |                               
|   Java 1    |               Host 1       
|             |---\      +-------------------+
+-------------+    ---\  |                   |
                       --|   Mongo, Redis    |
    Host 3             --|                   |
+-------------+     --/  +-------------------+
|             |  --/                          
|   Java 2    |-/                             
|             |                               
+-------------+                               

    Host #
    ...

编辑:我的 RestApi 服务和数据库之间的链接需要加密。

【问题讨论】:

  • 关于 Weave Net,您应该可以关注the docs to configure the Swarm plugin。如果您有任何更具体的问题,请告诉我。
  • @errordeveloper 那么 Weave 的目的是什么?它对我有什么帮助/这种设置是否有点矫枉过正?
  • 我取决于您想做什么,根据您所说的,我不确定您是否有一个必须使用 Wea​​ve 的特定用例。但是,如果您寻求覆盖网络更高的可靠性,或者需要加密或多播,您可能需要好好看看 Weave。

标签: docker swarm weave


【解决方案1】:

正如您所提到的,Docker Swarm 可以用来解决您的问题。最初您应该了解的是您的 Java (API)、Mongo 和 Redis 不应被标识为主机。在 swarm 模式下,它们将是 docker services。因此,在您的情况下,您的 docker swarm 中将拥有三个服务。在您的主机上扩展它是一项使用 Docker Swarm 完成的工作。正如您所提到的,您的 Java (API) 应该进行扩展,作为起点,假设您将从 3 个 Java (API) 服务开始,因此假设您的 Docker Swarm 中有三台主机,一台是经理,另外两台是工人(决定哪台主机成为管理器,哪台主机是工作人员取决于您),您只需要创建三个 Java (API) 服务副本,Docker Swarm 将在这三台主机上运行这三个副本,即使一台主机出现故障,Docker Swarm 也会自动将流量重定向到运行容器的主机,并且将始终运行您告诉它运行的副本数量。这意味着如果容器失败,它将被重新创建。这些服务可以根据您的目的使用简单的命令轻松扩展。所以一个好的起点是阅读Docker Swarm Official documentation 本身。然后关注official swarm tutorial

在 Docker swarm 模式中,有一个称为堆栈的功能,堆栈可以让您简单地将完整的应用程序堆栈部署到 swarm。您可以从here 了解它。就您而言,正如您所提到的,您已经拥有可用于部署堆栈的撰写文件。您需要更新现有的撰写文件以匹配您需要在应用程序堆栈中拥有的配置。只需在 docker-compose.yml 文件中提及您想要什么以及您想要它的方式,Docker Swarm 就会为您创建它。

在您阅读了这些概念并准备好 Docker Swarm 设置和主机以及所有 Worker 和 Managers 设置之后,请关注这个很棒的Docker Swarm vote app example。阅读该示例的 Docker Stack 文件,了解如何正确定义应用程序堆栈,从而深入了解 Docker Stacks,并使用相同的示例文件作为设计应用程序堆栈的基础。

之后,就是部署堆栈的问题了。只需运行docker stack deploy -c docker-compose.yml yourAppName

另外一点是,您可以在 Docker 中专门为您的应用程序创建一个单独的 overlay 类型网络。这将允许在多个 Docker 守护程序主机(节点)之间建立分布式网络。

编辑 - 默认情况下,所有 swarm 服务管理流量都使用GCM 模式下的 AES 算法进行加密。您也可以通过在创建覆盖网络时添加--opt encrypted 来加密应用程序数据。正如文档所述,这将带来不可忽略的性能损失,因此在生产中运行该功能之前需要进行测试。 参考6 加密覆盖网络部分的流量。

希望这个解释能帮助您了解 Docker Swarm 如何解决您的问题并阐明您面临的问题。

【讨论】:

  • 谢谢拉文杜!在阅读了几次您的答案并阅读了文档后,它有助于理解 Swarm 的概念,并且我已经完成了我的 POC。干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-07
相关资源
最近更新 更多