如何使用 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。
我在一台主机上有一堆微服务运行。该堆栈基本上由 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。