文章目录
彻底搞懂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 常见问题排查
问题现象:容器间无法通信
- 检查是否在同一网络
- 验证防火墙规则
- 测试DNS解析
- 查看路由表
五、网络架构选型建议
场景 | 推荐网络模式 | 优势 |
---|---|---|
开发测试环境 | 自定义bridge | 隔离性好,自动DNS |
高性能应用 | host | 零损耗,直接使用宿主机网络 |
安全敏感应用 | none | 完全网络隔离 |
集群部署 | overlay | 支持跨主机通信(需Swarm模式) |
六、总结与进阶
掌握Docker网络是容器化部署的关键技能:
- 理解不同网络模式的特点
- 根据场景选择合适的网络方案
- 善用自定义网络实现服务隔离
- 掌握基础诊断命令
期待您能关注公众号
原宏Cloud运维栈
每天带你进步一点。