一、Docker网络概述
Docker容器网络是云原生架构的基础:
网络模型:
- Bridge(桥接模式)
- Host(主机模式)
- Overlay(覆盖网络)
- Macvlan
- None
二、Bridge网络
1. 原理
┌─────────────┐ ┌─────────────┐ │ Container │ │ Container │ │ nginx:80 │ │ mysql:3306 │ └──────┬──────┘ └──────┬──────┘ │ │ │ 172.17.0.2 │ 172.17.0.3 │ │ ┌──────┴──────────────────┴──────┐ │ docker0 bridge │ │ 172.17.0.1 │ └──────────────┬────────────────┘ │ ┌──────┴──────┐ │ Host NIC │ │ 192.168.1.100│ └─────────────┘2. 使用
# 创建网络dockernetwork create my-bridge# 运行容器指定网络dockerrun-d--nameweb--networkmy-bridge nginx# 查看网络dockernetwork inspect my-bridge# 容器间通信dockerexec-itwebpingmysql3. 端口映射
# 映射端口dockerrun-d-p8080:80 nginx# 随机端口dockerrun-d-Pnginx# 指定IP和端口dockerrun-d-p127.0.0.1:8080:80 nginx三、Host网络
1. 原理
容器直接使用主机网络栈:
# 使用host网络dockerrun-d--networkhostnginx2. 适用场景
- 性能敏感场景
- 需要使用主机端口
- 网络调试
四、Overlay网络
1. 原理
跨主机容器通信:
┌─────────────────┐ ┌─────────────────┐ │ Host A │ │ Host B │ │ ┌───────────┐ │ │ ┌───────────┐ │ │ │ Container │ │ │ │ Container │ │ │ │172.18.0.2 │ │ │ │172.18.0.3 │ │ │ └─────┬─────┘ │ │ └─────┬─────┘ │ │ │ │ │ │ │ │ ┌─────┴─────┐ │ │ ┌─────┴─────┐ │ │ │ overlay │ │◄────┼─►│ overlay │ │ │ └───────────┘ │ │ └───────────┘ │ └─────────────────┘ └─────────────────┘2. 创建Overlay网络
# 初始化Swarmdockerswarm init# 创建overlay网络dockernetwork create-doverlay my-overlay# 运行服务dockerservicecreate--networkmy-overlay nginx五、Macvlan网络
1. 原理
容器直接获取物理网络MAC地址:
# 创建macvlan网络dockernetwork create-dmacvlan\--subnet=192.168.1.0/24\--gateway=192.168.1.1\-oparent=eth0 my-macvlan# 运行容器dockerrun-d--networkmy-macvlan nginx2. 适用场景
- 需直接暴露容器IP
- 旧应用迁移
- 网络隔离
六、网络隔离
1. 网络隔离
# 创建隔离网络dockernetwork create--internalbackend# 只有内部网络的容器dockerrun-d--networkbackend mysql2. DNS管理
# docker-compose.ymlservices:web:image:nginxnetworks:-frontenddb:image:mysqlnetworks:-backendnetworks:frontend:backend:七、常用命令
# 列出网络dockernetworkls# 查看网络详情dockernetwork inspect bridge# 删除未使用的网络dockernetwork prune# 连接容器到网络dockernetwork connect my-network container# 断开容器网络dockernetwork disconnect my-network container八、总结
Docker网络模型选择:
- Bridge:默认模式,适合单主机
- Host:高性能,直接使用主机网络
- Overlay:跨主机通信,Swarm/K8s
- Macvlan:需要独立IP
最佳实践:
- 生产环境使用自定义网络
- 合理规划网络段
- 做好网络隔离
3. 网络别名
# Docker Compose网络version:'3'services: web: image: nginx networks: - frontend - backend db: image: mysql networks: - backend networks: frontend: backend: internal:true# 完全隔离九、Docker Compose网络
1. 网络配置
# docker-compose.ymlversion:'3.8'services:app:build:.networks:-app-networkdb:image:mysqlnetworks:-app-networknetworks:app-network:driver:bridgeipam:config:-subnet:172.20.0.0/162. 外部网络
# 连接外部网络networks:existing-network:external:true十、总结
Docker网络模型选择要点:
- Bridge:默认模式,适合单主机多容器
- Host:高性能,直接使用主机网络
- Overlay:跨主机通信,适用于Swarm/K8s
- Macvlan:需要为容器分配独立IP
最佳实践:
- 生产环境使用自定义网络
- 合理规划网络段,避免冲突
- 做好网络隔离,敏感服务使用internal网络
- 使用Docker Compose统一管理网络配置
个人观点,仅供参考