Docker Swarm服务编排与管理全解析
1. 覆盖网络上的服务发现
Docker服务借助域名系统(DNS)来发现共享Docker网络上其他服务的位置。若程序知晓服务名称,便可连接该服务。例如,在示例应用中,API服务器通过 POSTGRES_HOST
环境变量配置数据库服务名称:
api:
# ... snip ...
environment:
POSTGRES_HOST: 'postgres'
当API任务连接PostgreSQL数据库时,会利用DNS将 postgres
名称解析为IP地址。连接到Docker覆盖网络的容器,会由Docker自动配置,通过特殊解析器 127.0.0.11
执行DNS查找,用户定义的桥接网络和MACVLAN网络也是如此。
Docker引擎处理对 127.0.0.1
的DNS查找。若名称解析请求针对的是该网络上的Docker服务,Docker会返回该服务虚拟IP的位置;若查找的是其他名称,Docker会将请求转发给容器主机的常规DNS解析器。
在示例应用中,当API服务查找 postgres
时,主机上的Docker引擎会返回 postgres
服务端点的虚拟IP,如 10.0.27.2
。API数据库连接驱动可与该虚拟IP建立连接,Swarm会将连接路由到 postgres