一、Docker網絡基礎認知
1.1 為什么需要關注網絡?
容器不是孤島!當我們需要:
網絡配置就成為關鍵
1.2 Docker的默認網絡
安裝Docker時會自動創(chuàng)建3種網絡:
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
a1b2c3d4e5f6 bridge bridge local
7g8h9i0j1k2l host host local
m3n4o5p6q7r8 none null local
二、四大網絡模式詳解
2.1 Bridge模式(默認)
特點:
案例:創(chuàng)建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模式
特點:
案例:運行網絡監(jiān)控工具
docker run --rm --net=host nicolaka/netshoot ss -tulpn
# 直接看到宿主機的網絡連接
2.3 None模式
特點:
案例:創(chuàng)建離線數據處理容器
docker run -it --net=none alpine sh
# 執(zhí)行ifconfig只能看到lo接口
2.4 自定義Bridge網絡
優(yōu)勢:
實戰(zhàn):構建微服務通信
# 創(chuàng)建自定義網絡
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
三、網絡連通性實戰(zhàn)
3.1 跨網絡通信方案
需求場景:
已有容器在默認bridge網絡,需要連接自定義網絡的數據庫
解決方案:
# 將已有容器連接到新網絡
docker network connect mynet existing_container
# 驗證連接
docker exec -it existing_container ping redis
3.2 多容器組網實踐
部署WordPress系統:
# 創(chuàng)建專用網絡
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 常見問題排查
問題現象:容器間無法通信
五、網絡架構選型建議
| 場景 | 推薦網絡模式 | 優(yōu)勢 |
|---------------------|----------------|-------------------------|
| 開發(fā)測試環(huán)境 | 自定義bridge | 隔離性好,自動DNS |
| 高性能應用 | host | 零損耗,直接使用宿主機網絡 |
| 安全敏感應用 | none | 完全網絡隔離 |
| 集群部署 | overlay | 支持跨主機通信(需Swarm模式) |
六、總結與進階
掌握Docker網絡是容器化部署的關鍵技能:
閱讀原文:原文鏈接
該文章在 2025/7/1 23:25:24 編輯過