一、为什么需要关注Docker网络?

想象你住在有三栋公寓的小区里,每户人家(容器)需要相互串门。如果楼道结构(网络模型)没设计好,可能会出现走错楼层、找不到门牌号的尴尬场面。Docker的网络配置正是为了解决这类"容器社交难题"——从最简单的单机通讯到跨越服务器的数据传递,不同的组网方式将直接影响整个系统的通信效率和可靠性。


二、单机环境的基础配置:桥接模式

2.1 默认桥接网络

就像开发商会给每栋楼预装基础电路,Docker启动时默认创建名为bridge的虚拟网络:

docker network inspect bridge

输出会显示该网络的子网段(如172.17.0.0/16)和网关地址。此时所有未指定网络的容器都会被自动分配到这个"公共走廊"里。

2.2 自定义桥接网络

但统一使用公共走廊容易产生噪音干扰,我们可以自建专属通道:

# 创建专用桥接网络(带DNS解析功能)
docker network create --driver bridge \
  --subnet 192.168.5.0/24 \
  --gateway 192.168.5.254 \
  app-network

# 运行两个测试容器
docker run -d --name web1 --network app-network nginx:alpine
docker run -it --name client1 --network app-network alpine sh

# 在client1中测试连通性
ping web1  # 通过容器名直接访问
curl http://web1  # 验证Web服务

这种自定义桥接的三大优势:

  1. 自动DNS解析(无需记忆IP)
  2. 网络隔离增强安全性
  3. 可配置精确的子网参数

三、跨主机组网的核心策略:Overlay网络

3.1 原生Overlay网络原理

当公寓数量从一栋扩展到三栋,需要建立空中连廊(Overlay)。Docker通过VXLAN协议在物理网络之上构建虚拟通道:

# 初始化Swarm集群(以双节点为例)
docker swarm init --advertise-addr <管理节点IP>

# 在工作节点执行加入命令(示例命令,需替换token)
docker swarm join --token SWMTKN-1-xxx <管理节点IP>:2377

# 创建overlay网络
docker network create -d overlay \
  --attachable \
  --subnet 10.10.0.0/24 \
  cross-network

# 在不同节点启动容器
docker service create --name redis \
  --network cross-network \
  --replicas 2 \
  redis:6-alpine

# 测试跨节点通讯
docker exec -it redis.1.xydzsh ping redis.2.abcd # 自动路由到不同宿主

3.2 Overlay网络的智能之处

  • 自动维护全局路由表
  • 加密传输保障数据安全(通过--opt encrypted启用)
  • 支持超过50个节点的集群规模

四、生产环境特别训练场:混合组网实战

4.1 桥接+Overlay混合网络

当需要同时访问内网数据库和外部服务时:

# 容器同时加入两个网络
docker run -d --name api-server \
  --network app-network \
  --network cross-network \
  your-api-image

# 查看网络配置
docker inspect api-server | grep Networks

此时容器拥有两个IP地址,就像同时持有电梯门禁卡和小区大门钥匙。

4.2 网络策略强化

通过防火墙规则限制访问路径:

# 禁止app-network访问敏感网络
docker network create --driver bridge \
  --opt "com.docker.network.bridge.enable_icc=false" \
  secure-network

五、技术选型决策指南

5.1 应用场景对照表

网络类型 典型使用场景 性能指标
默认桥接 快速原型开发 延迟<0.1ms
自定义桥接 微服务间内部通讯 吞吐量10Gbps+
Overlay 多数据中心部署 增加3-5ms延迟

5.2 常见错误规避手册

  1. IP地址耗尽:创建网络时指定足够大的subnet
  2. 端口冲突:使用--ip-range缩小分配范围
  3. DNS解析失败:检查容器是否在同一用户定义网络

六、总结与进阶建议

经过三个小时的深度实验,我们发现:

  • 单机环境优先采用自定义桥接网络,享受DNS和隔离的双重红利
  • 跨主机部署必选Overlay,但要注意控制集群规模避免广播风暴
  • 混合组网时推荐使用--attachable参数保持灵活性