Docker - 容器互联
Docker - 容器间通信(用户定义网络)
Section titled “Docker - 容器间通信(用户定义网络)”在现代 Docker 工作流中,容器之间相互通信的推荐方式是将它们连接到同一个用户定义网络(user-defined network)。这通过使用容器名称提供了自动的服务发现。
较旧的 --link 标志现在被认为是**遗留(legacy)和已弃用(deprecated)**的。用户定义网络提供了更好的隔离性、安全性和灵活性。
示例:连接 Web 应用到数据库
Section titled “示例:连接 Web 应用到数据库”我们来演示如何使用用户定义桥接网络连接两个容器(例如,一个 Web 应用和一个 Redis 数据库)。
步骤 1:创建一个用户定义桥接网络。我们将其命名为 app-network。
docker network create app-network步骤 2:启动数据库容器(例如 Redis)并将其连接到 app-network。我们将此容器命名为 redis-db。
# 在分离模式 (-d) 下启动名为 'redis-db' 的 Redis 容器,连接到 'app-network'docker run -d --name redis-db --network app-network redis:alpine步骤 3:启动应用容器(例如一个假设的 Web 应用镜像 my-web-app)并将其连接到同一个 app-network。我们将此容器命名为 web-frontend 并发布其端口。
# 在分离模式下启动名为 'web-frontend' 的 Web 应用容器,连接到 'app-network'# 将主机端口 80 映射到容器端口 8080(假设应用监听 8080 端口)docker run -d --name web-frontend --network app-network -p 80:8080 my-web-app现在,在 web-frontend 容器内部,应用代码可以通过使用主机名 redis-db 来连接 Redis 数据库。Docker 的内嵌 DNS 服务器会自动将 redis-db 解析到 app-network 内 Redis 容器的正确内部 IP 地址。
例如,Web 应用中的连接字符串可能看起来像 redis://redis-db:6379。
步骤 4:您可以通过在同一个网络上运行一个临时容器,并尝试按名称 ping 数据库容器来验证连接性。
# 在 app-network 上运行一个临时 Ubuntu 容器,获取一个 shelldocker run -it --rm --network app-network ubuntu bash
# 在 Ubuntu 容器内部,安装 ping (如果需要) 并 ping 'redis-db'# apt-get update && apt-get install -y iputils-ping# ping redis-db您应该看到 ping 响应成功,这确认了在用户定义网络中的名称解析正在工作。
使用用户定义网络是处理 Docker 中容器间通信的标准、健壮方式,它简化了应用配置并增强了安全性。