Docker 网络模式

Docker 网络模式

参考:Docker 官方网络文档、Docker 网络模式详解

1 四种驱动总览

驱动 适用场景
bridge 需要在同一个 Docker 主机上让多个容器通信
host 网络栈不应与 Docker 主机隔离,但容器的其他方面需要隔离
overlay 运行在不同 Docker 主机上的容器需要通信,或多个应用通过 swarm 服务协同工作
macvlan 从 VM 环境迁移,或需要让容器在网络上看起来像物理主机(每个有唯一 MAC 地址)

2 Bridge 桥接模式(默认)

Docker 进程启动时在主机上创建名为 docker0 的虚拟网桥(默认地址 172.17.0.0/16),容器连接到此虚拟网桥:

  1. 从 docker0 子网分配一个 IP 给容器,并设置 docker0 的 IP 为容器的默认网关;
  2. 在主机上创建一对虚拟网卡 veth pair 设备,一端放入容器并命名为 eth0,另一端放在主机上以 vethxxx 命名,并加入 docker0 网桥(可用 brctl show 查看);
  3. 虚拟网桥工作方式类似物理交换机,所有容器就通过交换机连在同一个二层网络;
  4. docker run -p 端口映射实际是 Docker 在 iptables 做 DNAT 规则实现端口转发(iptables -t nat -vnL 查看)。

不支持 --net 参数时即 bridge 模式,是 Docker 的默认网络模式。

3 Host 开放式模式

使用 host 模式时容器不获得独立的 Network Namespace,而是与宿主机共用一个 Network Namespace,使用宿主机的 IP 和端口进行网络通信;但容器的文件系统、进程列表等仍与宿主机隔离。

4 Container 联合挂载式模式

是 host 模式的延伸:新容器与已存在的某个容器共享一个 Network Namespace,而不是与宿主机共享。两个容器共享 IP、端口范围等。除网络之外的文件系统、进程列表等仍隔离。两个容器的进程可以通过 lo 网卡设备通信。

5 None 封闭式模式

容器拥有自己的 Network Namespace,但不为其做任何网络配置,只有 lo 回环接口,需要手动添加网卡、配置 IP 和路由。容器不参与网络通信,进程只能访问本地回环接口,适用于备份、进程诊断、离线任务等无需网络通信的场景。

阅读 — · 全站 —
🎸 我的歌单 0 首