Docker-网络
Docker网络是容器化技术中至关重要的组成部分,它决定了容器之间、容器与主机以及容器与外部世界的通信方式。理解Docker网络模型对于构建高效、安全的容器化应用架构至关重要。
| 网络模式 | 性能 | 隔离性 | 适用场景 | 不适用场景 |
|---|---|---|---|---|
| Bridge | 中 | 中 | 开发测试、单机多服务 | 跨主机通信 |
| Host | 高 | 低 | 高性能需求、网络工具 | 生产环境、多租户 |
| None | - | 最高 | 无网络需求任务 | 需要通信的场景 |
| Container | 高 | 中 | Sidecar模式、监控 | 独立网络需求 |
| Overlay | 中 | 高 | 分布式系统、微服务 | 单机部署 |
| Macvlan | 高 | 高 | 直接接入物理网络 | 简单网络需求 |
Bridge模式(桥接网络)
基本特性
- Docker默认网络模式,创建名为docker0的虚拟网桥
- 每个容器获得独立Network Namespace和IP地址(通常为172.17.0.0/16)
- 容器间通过虚拟网卡(veth pair)连接至docker0网桥
通信机制
- 容器间通信:直接通过docker0网桥交换数据
- 外部访问:需端口映射(-p参数),通过NAT转换实现
- DNS解析:自定义bridge网络支持容器名解析,默认bridge不支持
适用场景
- 开发测试环境
- 单主机多服务部署
- 需要网络隔离的场景
Host模式(主机网络)
基本特性
- 容器直接使用宿主机网络栈,无独立Network Namespace
- 容器网络性能最佳,无NAT转换开销
- 容器端口直接使用主机端口,易冲突
适用场景
- 性能敏感型应用
- 需要广播/组播的应用
- 网络监控、日志收集等需直接访问主机网络的工具
注意事项
- 网络隔离性差,存在安全隐患
- 生产环境慎用
- 端口冲突风险高
None模式(无网络)
基本特性
- 容器启动时不配置任何网络,仅有lo回环接口
- 完全网络隔离,无法与外部通信
适用场景
- 纯计算任务,无需网络
- 全隔离安全环境
- 网络调试与测试
Container模式(容器共享网络)
基本特性
- 新容器与指定容器共享Network Namespace
- 共享IP地址、端口范围等网络资源
- 文件系统、进程列表等其他资源仍隔离
使用方式
bash
docker run -d --name netcontainer1 busybox:latest
docker run -itd --name netcontainer2 --network container:netcontainer1 busybox
# netcontainer2共享netcontainer1的网络栈适用场景
- Sidecar模式(如日志代理)
- 进程监控
- 需要紧密网络耦合的容器组
Macvlan模式(自定义网络)
基本特性
- 为容器分配独立MAC地址,使其在物理网络中表现为独立设备
- 容器获得与主机同一网段的IP,直接与内网设备通信
- 容器内部可以通过容器名直接请求
使用方式
bash
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 my_macvlan
docker run --network=my_macvlan my_image # 容器将获得192.168.1.x的IP适用场景
- 容器需直接暴露在局域网
- 接入传统网络设备(如数据库、打印机)
- IoT设备容器化
