第7章:Docker网络(Docker Networking)
一、导读
1.1 本章学习目标
容器网络是 Docker 的核心能力。本章讲解四种网络模式、自定义网络、DNS 解析、网络隔离。
本章的核心学习目标包括:
- 掌握四种网络模式:bridge、host、none、overlay。
- 理解自定义 bridge 网络:DNS 解析、更好的隔离。
- 配置端口映射:-p 参数。
- 实现网络隔离:不同网络的容器无法互通。
1.2 为什么本章如此重要
网络是容器间通信的基础。理解 Docker 网络模型,你才能正确配置服务发现、网络隔离、端口映射。
1.3 核心问题引导
bridge 网络如何工作?容器如何通信?
自定义 bridge 网络和默认 bridge 有什么区别?
host 网络模式有什么优缺点?
overlay 网络如何实现跨主机通信?
二、核心概念详解
2.1 网络模式
bridge(默认)
bash
# 默认 bridge 网络
docker run -d --name web nginx
docker run -d --name api myapi
# web 和 api 通过 IP 通信,不支持 DNS 解析
# 自定义 bridge 网络
docker network create mynet
docker run -d --name web --network mynet nginx
docker run -d --name api --network mynet myapi
# api 可以用 "web" 作为主机名访问 nginxhost
bash
docker run -d --network host nginx
# 容器直接使用宿主机网络,无网络隔离
# 不需要 -p 端口映射none
bash
docker run -d --network none nginx
# 容器没有网络接口,完全隔离overlay
bash
# 用于 Docker Swarm 或 Kubernetes
# 跨主机的容器通信
docker network create -d overlay mynet2.2 自定义网络
bash
# 创建网络
docker network create --driver bridge mynet
# 查看网络
docker network ls
docker network inspect mynet
# 连接/断开容器
docker network connect mynet container1
docker network disconnect mynet container12.3 端口映射
bash
# 映射单个端口
docker run -d -p 8080:80 nginx
# 映射多个端口
docker run -d -p 8080:80 -p 8443:443 nginx
# 映射端口范围
docker run -d -p 8000-8010:8000-8010 myapp
# 随机端口
docker run -d -p 80 nginx
docker port <container>2.4 网络隔离
yaml
# Compose 中的网络隔离
services:
frontend:
networks: [public]
backend:
networks: [public, private]
database:
networks: [private] # 只有 backend 能访问
networks:
public:
driver: bridge
private:
driver: bridge
internal: true # 不能访问外网三、实战案例
3.1 多网络隔离
bash
# 创建两个网络
docker network create frontend-net
docker network create backend-net --internal
# 运行容器
docker run -d --name web --network frontend-net nginx
docker run -d --name api --network frontend-net --network backend-net myapi
docker run -d --name db --network backend-net postgres
# web 可以访问 api,但不能访问 db
# api 可以访问 web 和 db
# db 只能被 api 访问四、本章小结
bridge:默认模式,自定义网络支持 DNS。
host:直接使用宿主机网络,无隔离。
none:完全隔离。
overlay:跨主机通信。
网络隔离:不同网络的容器无法互通。
五、思考与练习
思考题
自定义 bridge 网络为什么支持 DNS 解析?
host 模式有什么安全风险?
internal 网络有什么作用?
练习题
创建自定义网络,验证 DNS 解析。
创建隔离网络,验证容器无法互通。
将容器连接到多个网络。