docker网络
Docker 单机版除了 iptables,还有几种更好的网络方案,可以提供更高的性能和更简单的配置:
1. host 网络:
- 优点: 性能最好,直接使用宿主机的网络栈,没有网络虚拟化的开销。
- 缺点: 容器端口会与宿主机端口冲突,安全性较低。
- 配置: 启动容器时使用
--network host
参数。
docker run --network host -d nginx:latest
2. macvlan 网络:
- 优点: 性能接近原生,容器获得独立的 MAC 地址和 IP 地址,可以直接接入物理网络。
- 缺点: 配置稍微复杂一些。
- 配置:
# 1. 创建 macvlan 网络
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=eth0 \
macvlan0
# 2. 启动容器,指定 IP 地址 (可选)
docker run -d --network=macvlan0 --ip=192.168.1.100 nginx:latest
# 注意:
# * 将 eth0 替换为你想要使用的物理网卡接口名称。
# * subnet 和 gateway 需要根据你的网络环境进行配置。
# * --ip 参数可以为容器分配固定的 IP 地址。
3. 使用 CNI 插件 (例如 Weave 或 Flannel):
CNI (Container Network Interface) 插件提供了一种更加灵活和可扩展的容器网络解决方案。
- Weave:
* 优点: 简单易用,性能较好,支持网络加密。
* 安装:
curl -L git.io/weave -o /usr/local/bin/weave
chmod a+x /usr/local/bin/weave
* 使用: 使用 Docker 的默认 bridge 网络即可,Weave 会自动接管网络管理。
- Flannel:
* 优点: 稳定可靠,使用 VXLAN 或 UDP 进行网络封装.
* 安装: 需要下载 Flannel 的二进制文件或使用 Kubernetes 进行部署,配置相对复杂. 参考 Flannel 官方文档.
如何选择:
- 对于简单的单机环境,并且对网络性能要求较高,
host
网络是最简单的选择. - 如果需要容器拥有独立的 IP 地址并直接接入物理网络,
macvlan
是一个不错的选择. - 如果需要更灵活的网络管理、多主机网络或网络加密等高级功能,建议使用 CNI 插件,例如 Weave. Weave 的安装和使用都比较简单.
额外的建议:
- 避免在生产环境中使用
--iptables=false
禁用 Docker 的 iptables 规则,除非你非常清楚自己在做什么. - 使用
docker network inspect <网络名称>
命令可以查看网络的详细信息,例如子网、网关和 IPAM 配置。 - 确保你的 Docker 版本支持你选择的网络方案.