2. Docker 网络基础:Bridge 网络模式原理、Overlay 网络模式原理、Host 与 Macvlan 模式简介
在构建后端缓存一致性闭环时,容器间的网络通信是数据同步的物理基础。Docker 提供了多种网络模式,每种模式对应不同的隔离级别、性能特征和跨主机通信能力。本章将深入剖析 Bridge 与 Overlay 两种核心模式的原理,并简要介绍 Host 与 Macvlan 模式的适用场景。
2.1 Bridge 网络模式:单机容器通信的默认桥梁
Bridge 模式是 Docker 默认的网络模式。当 Docker 守护进程启动时,会在宿主机上创建一个名为 docker0 的虚拟网桥。所有连接到同一 Bridge 网络的容器,都通过这个虚拟网桥进行二层通信。
核心原理:Bridge 模式利用 Linux 内核的网桥(bridge)功能,结合网络地址转换(NAT)和端口映射,实现容器与外部网络的互通。
2.1.1 通信流程与数据路径
- veth 对创建:每个容器启动时,Docker 会创建一对虚拟以太网接口(veth pair)。一端连接到容器内的
eth0,另一端连接到docker0网桥。 - IP 分配:Docker 内置的 DHCP 服务器从 Bridge 子网(默认
172.17.0.0/16)中为容器分配 IP 地址。 - 同主机通信:容器 A 发送数据包到容器 B,数据包通过 veth 到达
docker0网桥,网桥根据 MAC 地址表直接转发到目标容器的 veth 接口,无需经过宿主机网络栈。 - 外部访问:容器访问外部网络时,数据包通过
docker0网桥转发到宿主机网络栈,经过 iptables 的 MASQUERADE 规则进行源地址转换(SNAT),将容器 IP 转换为宿主机 IP。 - 端口映射:外部访问容器时,通过
-p hostPort:containerPort参数,在宿主机 iptables 中创建 DNAT 规则,将宿主机端口流量转发到容器 IP 和端口。
缓存同步场景提示:在单机部署中,Redis 或 Memcached 缓存实例与业务容器通过 Bridge 网络通信时,延迟极低(通常 < 0.1ms),且无需经过宿主机网络栈。这是实现高吞吐缓存一致性的首选网络拓扑。
2.2 Overlay 网络模式:跨主机容器通信的隧道方案
Overlay 网络模式解决了跨主机容器通信的问题。它通过 VXLAN(Virtual Extensible LAN)隧道技术,在现有三层网络之上构建一个虚拟的二层网络,使得分布在不同宿主机上的容器可以像在同一个局域网内一样直接通信。
2.2.1 VXLAN 封装与解封装过程
| 步骤 | 操作 | 数据包变化 |
|---|---|---|
| 1 | 容器 A 发送原始数据帧 | 目标 MAC = 容器 B 的 MAC,目标 IP = 容器 B 的 Overlay IP |
| 2 | vtep(VXLAN Tunnel Endpoint)接收 | 识别出目标 IP 不在本地子网,触发 VXLAN 封装 |
| 3 | VXLAN 封装 | 原始帧 + VXLAN 头部(8 字节)+ UDP 头部(8 字节)+ 外部 IP 头部(20 字节)+ 外部 MAC 头部(14 字节) |
| 4 | 通过宿主机物理网络发送 | 外部 IP = 宿主机 A 的物理 IP → 宿主机 B 的物理 IP |
| 5 | 目标 vtep 解封装 | 剥离外部头部,还原原始容器数据帧,转发给容器 B |
性能注意事项:Overlay 网络由于 VXLAN 封装/解封装的开销,以及额外的 UDP 头部,相比 Bridge 网络会增加约 5%-10% 的延迟和 CPU 消耗。在缓存同步场景中,如果跨主机延迟要求 < 1ms,建议使用宿主机物理网络直连或 Macvlan 模式。
2.3 Host 与 Macvlan 模式简介
2.3.1 Host 网络模式
Host 模式下,容器直接使用宿主机的网络栈,不进行网络隔离。容器内的应用直接绑定宿主机 IP 和端口,性能接近原生。
| 特性 | 说明 |
|---|---|
| 网络隔离 | 无,容器与宿主机共享网络命名空间 |
| 端口映射 | 不需要,容器端口直接暴露在宿主机上 |
| 性能 | 最高,无 NAT 和网桥转发开销 |
| 适用场景 | 高性能缓存节点、监控代理、日志采集器 |
| 限制 | 端口冲突风险;容器无法拥有独立 IP |
2.3.2 Macvlan 网络模式
Macvlan 模式为每个容器分配一个独立的 MAC 地址,使容器在二层网络中表现为一个独立的物理设备。宿主机物理网卡工作在“混杂模式”,将不同 MAC 地址的流量分发到对应容器。
关键优势:Macvlan 模式避免了 Overlay 网络的封装开销,也避免了 Bridge 模式的 NAT 转换,容器可以直接使用物理网络 IP 地址,延迟极低。非常适合对网络性能敏感的缓存同步场景。
2.3.3 四种模式对比总结
| 模式 | 隔离级别 | 跨主机通信 | 性能 | IP 分配 | 配置复杂度 |
|---|---|---|---|---|---|
| Bridge | 容器级 | 需端口映射 | 高 | Docker 内部子网 | 低 |
| Overlay | 容器级 | 原生支持 | 中 | Overlay 子网 | 中 |
| Host | 无 | 宿主机 IP | 最高 | 宿主机 IP | 低 |
| Macvlan | 容器级 | 物理网络 | 最高 | 物理网络 DHCP | 中 |
选型建议:对于单机缓存同步,优先使用 Bridge 模式;对于跨主机集群且对延迟不敏感的场景,使用 Overlay 模式;对于高性能跨主机缓存同步(如 Redis Cluster 跨节点复制),推荐 Macvlan 模式以获得接近物理机的网络性能。