初探

Docker 有 4 种网络模式

其中 bridge none 在 clone 时使用了 CLONE_NEWNET flag,但 none 仅做了 NETWORK NAMESPACE 但不进行资源设置分配,因而只能访问 loopback 设备(linux 下是 lo,虚拟网卡)

bridge 模式

这是 Docker 的默认网络模式,也是开发者常用的模式。实现了容器与宿主机、容器与容器间的网络栈隔离。

使用 veth pair 技术,一端接入到某个容器,另一段接入网桥 docker0(bridge),实现大致如下:

docker0

容器分配的 IP 与宿主机所在 IP 不处于同一网段,常用的默认 IP 段是 172.17.0.0/16。docker0 使用 IP Forward 将容器上的服务暴露出来,将 容器 IP 和 服务端口宿主机的端口 进行绑定。

从容器内部向宿主机外部发送数据

容器接收来自宿主机外部的数据

实现功能

缺点

container 模式

无需创建 veth pair

创建过程

host 模式

与宿主机 共享网络栈

创建过程

优点

无需通过 NAT,使容器获得宿主机的网络性能

缺点

共享网络栈,缺少隔离,端口资源争用

none 模式

这种情况下,容器只能访问内部网络,无法与其他容器、宿主机通信

创建过程