彻底搞懂Docker网络:从入门到实战
|
admin
2025年6月28日 23:40
本文热度 30
|
一、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模式(默认)
特点:
案例:创建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网络
优势:
实战:构建微服务通信
# 创建自定义网络
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 常见问题排查
问题现象:容器间无法通信
五、网络架构选型建议
| 场景 | 推荐网络模式 | 优势 |
|---------------------|----------------|-------------------------|
| 开发测试环境 | 自定义bridge | 隔离性好,自动DNS |
| 高性能应用 | host | 零损耗,直接使用宿主机网络 |
| 安全敏感应用 | none | 完全网络隔离 |
| 集群部署 | overlay | 支持跨主机通信(需Swarm模式) |
六、总结与进阶
掌握Docker网络是容器化部署的关键技能:
阅读原文:原文链接
该文章在 2025/7/1 23:25:24 编辑过