如何使用 Docker 中的 DNS 通过相同的 DN 引用所有复制的容器?

How Does One Use DNS in Docker to Reference All Replicated Containers by the Same DN?

我在一台主机上有一堆微服务运行。该堆栈基本上由 2 个无状态 php Web 服务器和一个有状态 mysql 数据库组成。当执行 docker-compose up 命令时,我使用 .env 文件将预定义的容器名称导入到 php 配置文件。容器使用预定义的 DNS 名称而不是 IP 地址相互通信。当堆栈只是 运行 每个微服务的单个实例时,此方法有效。

不过,我想迁移迁移到docker swarm。每个容器将有多个动态旋转的实例,每个实例都将获得一个唯一的 DNS 名称;这破坏了我的 DNS 解析,因此破坏了我的服务,因为容器无法再相互通信(它们无法通过 DNS 名称解析彼此的 IP 地址)。

事实上处理这个问题的方法是什么?

  • 当您迁移到 Docker swarm 时,您将处理 docker swarm 服务。
  • 服务可能有多个副本。每个副本都有唯一的虚拟 IP。 但这不是问题,因为每个服务都可以通过其服务名称与其他服务通信。
  • 在 docker ingress network 的 DNS 中注册了一个服务名称。

例如,java 服务 [stack_name]_app 可能连接到服务 [stack_name]_db by its name

Docker swarm 负载均衡器将以循环策略将查询发送到 db 服务的副本。

并且存在多少个数据库服务副本并不重要。服务可以动态扩展 up/down。