14. 使用网络
2025-02-17
简介
Docker 提供了强大的网络功能,支持多种网络模式:
- bridge: 默认网络模式,容器通过网桥连接
- host: 容器使用主机网络
- none: 容器没有网络连接
- overlay: 用于 Swarm 模式的跨主机网络
- macvlan: 允许容器直接连接物理网络
外部访问容器
端口映射
Docker 提供两种端口映射方式:
-P: 随机映射端口(49000-49900)-p: 指定映射端口
# 使用随机端口映射
docker run -d -P training/webapp python app.py
# 查看端口映射
docker container ls -l
# 查看应用日志
docker logs -f nostalgic_morse端口映射格式
使用 -p 参数时支持以下格式:
hostPort:containerPort: 映射所有接口ip:hostPort:containerPort: 映射指定接口ip::containerPort: 映射指定接口的随机端口
# 映射本地 5000 端口到容器 5000 端口
docker run -d -p 5000:5000 training/webapp python app.py
# 映射到 localhost
docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
# 映射到随机端口
docker run -d -p 127.0.0.1::5000 training/webapp python app.py
# 指定 UDP 协议
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py查看端口映射
# 查看指定端口映射
docker port nostalgic_morse 5000
# 查看容器所有端口映射
docker port nostalgic_morse注意:
- 每个端口只能绑定到一个容器
- 可以多次使用
-p参数绑定多个端口- 容器重启后端口映射会保持不变
容器互联
创建网络
# 创建桥接网络
docker network create -d bridge my-net
# 查看网络列表
docker network ls连接容器
# 启动容器并连接到网络
docker run -it --rm --name busybox1 --network my-net busybox sh
# 启动第二个容器
docker run -it --rm --name busybox2 --network my-net busybox sh测试连通性
# 在 busybox1 中测试
ping busybox2
# 在 busybox2 中测试
ping busybox1DNS 配置
全局 DNS 配置
编辑 /etc/docker/daemon.json:
{
"dns": [
"114.114.114.114",
"8.8.8.8"
]
}容器 DNS 配置
# 设置容器的主机名
docker run -it --rm --hostname=my-host centos:7
# 设置 DNS 服务器
docker run -it --rm --dns=8.8.8.8 centos:7
# 设置 DNS 搜索域
docker run -it --rm --dns-search=example.com centos:7最佳实践
网络安全
- 避免暴露不必要的端口
- 使用内部网络进行容器间通信
- 配置适当的防火墙规则
网络性能
- 使用 host 网络模式提高性能
- 合理规划网络拓扑
- 监控网络流量
服务发现
- 使用 Docker DNS 服务
- 考虑使用服务发现工具
- 实现健康检查机制
参考资料: