我可以在不使用docker swarm的情况下设置docker overlay网络吗?

问题描述

我有两套服务(容器组)在两台不同的机器上运行。两组服务均使用docker-compose文件声明。目前,在每个docker-compose文件中,我都包含一个桥接网络。这两组服务通过显式提及每台计算机的IP地址来相互通信。

  1. 如果我让这两个docker服务集通过覆盖网络彼此通信,而不是像现在那样通过硬编码IP地址使每个服务集彼此通信,这会减少网络延迟吗?换句话说,会提高这两种服务之间的通信性能吗?

  2. 如果上一个问题的答案是肯定的,那么我可以在不使用docker swarm的情况下在这两台计算机之间定义覆盖网络吗?另外,我可以在docker-compose文件中声明这个docker-swarm网络吗?

如果您有.yaml配置文件或命令行代码段可以满足我的要求,将不胜感激。

解决方法

覆盖网络会减少延迟吗?

很可能不是,它为需要在连接的每一侧处理的IP数据包增加了一层额外的封装。通常,人们使用覆盖网络简化群集之间的通信并降低服务发现的复杂性(应用程序可以按服务名称进行通信,而无需在另一个节点上查找外部IP /端口。

您是否需要“虫群模式”进行叠加?

否,但这使事情变得容易得多,以至于我不会再回到运行像consul这样的外部键/值数据库并将docker与之集成的旧方法。您也不能将旧的配置覆盖网络数据库的方法与群集模式混合使用,因此,如果您决定将来使用群集,则需要禁用较早的k / v数据库配置并重新创建覆盖网络。>

群体模式非常容易启用:

docker swarm init

然后按照说明操作,使用所需的标志(如网络接口)重新运行init命令,或将其他节点加入群集。

重要的是,您的容器本身不需要通过集群模式进行管理,您可以保留容器以仅管理用于覆盖网络的k / v数据库。创建网络时,请确保将其设置为可连接,以允许群模式之外的容器使用该网络:

docker network create -d overlay --attachable overlay-net-name

您还可以在compose文件中定义该名称,只需确保指定网络名称即可,通常该名称对于以后启动的服务而言是外部的。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...