彻底搞懂Docker网络:从入门到实战

彻底搞懂Docker网络:从入门到实战

一、Docker网络基础认知

1.1 为什么需要关注网络?

容器不是孤岛!当我们需要:

  • 容器间通信(微服务架构)
  • 容器访问外网
  • 外部访问容器服务
  • 多主机容器通信
    网络配置就成为关键

1.2 Docker的默认网络

安装Docker时会自动创建3种网络:

$ docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
a1b2c3d4e5f6   bridge    bridge    local
7g8h9i0j1k2l   host      host      local
m3n4o5p6q7r8   none      null      local

二、四大网络模式详解

2.1 Bridge模式(默认)

特点

  • 通过虚拟网桥docker0通信
  • 自动分配IP(172.17.0.0/16)
  • 需要端口映射访问容器

案例:创建Nginx容器

# 运行容器并映射端口
docker run -d --name web -p 8080:80 nginx

# 查看端口映射
docker port web
# 80/tcp -> 0.0.0.0:8080

# 访问测试
curl http://localhost:8080

2.2 Host模式

特点

  • 直接使用宿主机网络栈
  • 无需端口映射
  • 性能最好,但安全性低

案例:运行网络监控工具

docker run --rm --net=host nicolaka/netshoot ss -tulpn
# 直接看到宿主机的网络连接

2.3 None模式

特点

  • 完全禁用网络
  • 适合需要绝对隔离的场景

案例:创建离线数据处理容器

docker run -it --net=none alpine sh
# 执行ifconfig只能看到lo接口

2.4 自定义Bridge网络

优势

  • 自动DNS解析(容器名=主机名)
  • 更好的隔离性
  • 灵活的IP地址管理

实战:构建微服务通信

# 创建自定义网络
docker network create --subnet=192.168.100.0/24 mynet

# 启动Redis容器
docker run -d --net=mynet --name redis redis:alpine

# 启动Python应用
docker run -it --net=mynet python:3.9 sh
# 在Python容器中可以直接ping通redis
ping redis

三、网络连通性实战

3.1 跨网络通信方案

需求场景
已有容器在默认bridge网络,需要连接自定义网络的数据库

解决方案

# 将已有容器连接到新网络
docker network connect mynet existing_container

# 验证连接
docker exec -it existing_container ping redis

3.2 多容器组网实践

部署WordPress系统

# 创建专用网络
docker network create wp_net

# 启动MySQL
docker run -d --net=wp_net --name mysql \
  -e MYSQL_ROOT_PASSWORD=secret mysql:5.7

# 启动WordPress
docker run -d --net=wp_net --name wp \
  -e WORDPRESS_DB_HOST=mysql \
  -p 8080:80 wordpress

四、网络诊断技巧

4.1 常用诊断命令

# 查看容器IP
docker inspect -f '{
    
    {range .NetworkSettings.Networks}}{
    
    {.IPAddress}}{
    
    {end}}' 容器名

# 网络连通性测试
docker run --rm --net=container:目标容器 nicolaka/netshoot ping 目标IP

# 流量抓包
docker run --rm --net=container:目标容器 nicolaka/netshoot tcpdump -i eth0

4.2 常见问题排查

问题现象:容器间无法通信

  1. 检查是否在同一网络
  2. 验证防火墙规则
  3. 测试DNS解析
  4. 查看路由表

五、网络架构选型建议

场景 推荐网络模式 优势
开发测试环境 自定义bridge 隔离性好,自动DNS
高性能应用 host 零损耗,直接使用宿主机网络
安全敏感应用 none 完全网络隔离
集群部署 overlay 支持跨主机通信(需Swarm模式)

六、总结与进阶

掌握Docker网络是容器化部署的关键技能:

  1. 理解不同网络模式的特点
  2. 根据场景选择合适的网络方案
  3. 善用自定义网络实现服务隔离
  4. 掌握基础诊断命令

期待您能关注公众号原宏Cloud运维栈每天带你进步一点。