【架构实战】Docker容器网络模型详解

一、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. 使用

bash 复制代码
# 创建网络
docker network create my-bridge

# 运行容器指定网络
docker run -d --name web --network my-bridge nginx

# 查看网络
docker network inspect my-bridge

# 容器间通信
docker exec -it web ping mysql

3. 端口映射

bash 复制代码
# 映射端口
docker run -d -p 8080:80 nginx

# 随机端口
docker run -d -P nginx

# 指定IP和端口
docker run -d -p 127.0.0.1:8080:80 nginx

三、Host网络

1. 原理

容器直接使用主机网络栈:

bash 复制代码
# 使用host网络
docker run -d --network host nginx

2. 适用场景

  • 性能敏感场景
  • 需要使用主机端口
  • 网络调试

四、Overlay网络

1. 原理

跨主机容器通信:

复制代码
┌─────────────────┐     ┌─────────────────┐
│    Host A       │     │    Host B       │
│  ┌───────────┐  │     │  ┌───────────┐  │
│  │ Container │  │     │  │ Container │  │
│  │172.18.0.2 │  │     │  │172.18.0.3 │  │
│  └─────┬─────┘  │     │  └─────┬─────┘  │
│        │        │     │        │        │
│  ┌─────┴─────┐  │     │  ┌─────┴─────┐  │
│  │  overlay  │  │◄────┼─►│  overlay  │  │
│  └───────────┘  │     │  └───────────┘  │
└─────────────────┘     └─────────────────┘

2. 创建Overlay网络

bash 复制代码
# 初始化Swarm
docker swarm init

# 创建overlay网络
docker network create -d overlay my-overlay

# 运行服务
docker service create --network my-overlay nginx

五、Macvlan网络

1. 原理

容器直接获取物理网络MAC地址:

bash 复制代码
# 创建macvlan网络
docker network create -d macvlan \
  --subnet=192.168.1.0/24 \
  --gateway=192.168.1.1 \
  -o parent=eth0 my-macvlan

# 运行容器
docker run -d --network my-macvlan nginx

2. 适用场景

  • 需直接暴露容器IP
  • 旧应用迁移
  • 网络隔离

六、网络隔离

1. 网络隔离

bash 复制代码
# 创建隔离网络
docker network create --internal backend

# 只有内部网络的容器
docker run -d --network backend mysql

2. DNS管理

yaml 复制代码
# docker-compose.yml
services:
  web:
    image: nginx
    networks:
      - frontend
  db:
    image: mysql
    networks:
      - backend

networks:
  frontend:
  backend:

七、常用命令

bash 复制代码
# 列出网络
docker network ls

# 查看网络详情
docker network inspect bridge

# 删除未使用的网络
docker network prune

# 连接容器到网络
docker network connect my-network container

# 断开容器网络
docker network disconnect my-network container

八、总结

Docker网络模型选择:

  • Bridge:默认模式,适合单主机
  • Host:高性能,直接使用主机网络
  • Overlay:跨主机通信,Swarm/K8s
  • Macvlan:需要独立IP

最佳实践:

  1. 生产环境使用自定义网络
  2. 合理规划网络段
  3. 做好网络隔离

3. 网络别名

bash 复制代码
# Docker Compose网络
version: '3'
services:
  web:
    image: nginx
    networks:
      - frontend
      - backend
  db:
    image: mysql
    networks:
      - backend

networks:
  frontend:
  backend:
    internal: true  # 完全隔离

九、Docker Compose网络

1. 网络配置

yaml 复制代码
# docker-compose.yml
version: '3.8'
services:
  app:
    build: .
    networks:
      - app-network
  db:
    image: mysql
    networks:
      - app-network

networks:
  app-network:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/16

2. 外部网络

yaml 复制代码
# 连接外部网络
networks:
  existing-network:
    external: true

十、总结

Docker网络模型选择要点:

  • Bridge:默认模式,适合单主机多容器
  • Host:高性能,直接使用主机网络
  • Overlay:跨主机通信,适用于Swarm/K8s
  • Macvlan:需要为容器分配独立IP

最佳实践:

  1. 生产环境使用自定义网络
  2. 合理规划网络段,避免冲突
  3. 做好网络隔离,敏感服务使用internal网络
  4. 使用Docker Compose统一管理网络配置

个人观点,仅供参考

相关推荐
不会C语言的男孩6 分钟前
Docker 在嵌入式设备中的常用玩法
运维·docker·容器
神州世通7 分钟前
IP Office内置外显卡兼容性说明
服务器·网络·tcp/ip
珠海西格电力19 分钟前
数据采集与治理:零碳园区管理系统的 “生命线”
大数据·人工智能·算法·架构·能源
XUHUOJUN1 小时前
Azure Local GPU 部署与企业应用场景指南(上篇 )
windows·microsoft·架构·nvidia·azure local
weixin_307779132 小时前
Linux下Docker Compose里运行的MySQL数据库故障诊断Shell脚本
linux·运维·mysql·docker·自动化
进击的前栈2 小时前
鸿蒙实战:全栈回顾——Kit API 全景、架构总结与未来演进
华为·架构·harmonyos
GoFly开发者2 小时前
Go语言开发框架GoFlyGen新增 网站安全助手 插件,帮助开发者提供应用安全防护,保障平台系统数据安全。
网络·安全
刀法如飞2 小时前
Spring Boot 4.1 + JDK 25 DDD开源脚手架,面向 AI 编程
设计模式·架构·ai编程
黒亱中旳2 小时前
面向桌面端的跌倒检测系统多线程并发架构优化实践
架构
happyprince3 小时前
07_NVIDIA_ModelOpt-Recipe配方系统
网络·modelopt