Overlay 跨主机网络
Overlay 网络实现跨主机容器通信,是 Docker Swarm 的核心网络模式。
Swarm 模式
初始化 Swarm
Bash
# 主节点初始化
docker swarm init --advertise-addr 192.168.1.100
# 输出加入命令
# docker swarm join --token <token> 192.168.1.100:2377
# 查看节点
docker node ls
工作节点加入
Bash
# 在工作节点执行
docker swarm join --token <token> 192.168.1.100:2377
创建 Overlay 网络
Bash
# 创建 overlay 网络
docker network create \
--driver overlay \
--subnet 10.0.0.0/24 \
my-overlay
# 查看网络
docker network ls
部署服务
Bash
# 创建 overlay 网络上的服务
docker service create \
--name web \
--network my-overlay \
--replicas 3 \
nginx
# 查看服务
docker service ls
docker service ps web
跨主机通信
Bash
# 不同节点的容器可通过服务名通信
# 节点A
docker service create --name web --network my-overlay nginx
# 节点B
docker service create --name app --network my-overlay my-app
# app 可通过 web 访问节点A的容器
Compose 中使用
YAML
version: '3.8'
services:
web:
image: nginx
deploy:
replicas: 3
networks:
- overlay-net
app:
image: my-app
deploy:
replicas: 2
networks:
- overlay-net
networks:
overlay-net:
driver: overlay
Bash
# 部署
docker stack deploy -c docker-compose.yml my-stack
Overlay vs Bridge
| 对比项 | Bridge | Overlay |
|---|---|---|
| 范围 | 单主机 | 跨主机 |
| 驱动 | bridge | overlay |
| 需要 Swarm | ❌ | ✅ |
| 服务发现 | 容器名 | 服务名 |
| 负载均衡 | 无 | 内置 |
VXLAN 封装
text
Overlay 网络使用 VXLAN 封装:
容器包 → VXLAN 封装 → 物理网络 → VXLAN 解封装 → 目标容器
↓ ↓
VTEP (VXLAN Tunnel End Point)
VXLAN 在 UDP 上封装二层帧,实现跨主机虚拟网络。
要点总结
- Overlay 网络实现跨主机容器通信,需要 Swarm 模式
docker swarm init初始化集群,工作节点加入- 使用
--driver overlay创建跨主机网络 - 容器通过服务名跨主机解析,内置负载均衡
- VXLAN 封装实现虚拟二层网络跨物理路由
📝 发现内容有误?点击此处直接编辑