Skip to content

Docker-网络

Docker网络是容器化技术中至关重要的组成部分,它决定了容器之间、容器与主机以及容器与外部世界的通信方式。理解Docker网络模型对于构建高效、安全的容器化应用架构至关重要。

网络模式性能隔离性适用场景不适用场景
Bridge开发测试、单机多服务跨主机通信
Host高性能需求、网络工具生产环境、多租户
None-最高无网络需求任务需要通信的场景
ContainerSidecar模式、监控独立网络需求
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设备容器化