30-学容器必须懂 bridge 网络
Docker 安装时会创建一个 命名为 docker0
的 linux bridge。如果不指定--network
,创建的容器默认都会挂到 docker0
上。
apt-get install bridge-utils
当前 docker0 上没有任何其他网络设备,我们创建一个容器看看有什么变化
一个新的网络接口 vethc4ff17f被挂到了 docker0
上,vethc4ff17f就是新创建容器的虚拟网卡。
容器有一个网卡eth0。大家可能会问了,为什么不是vethc4ff17f 呢?
实际上eth0和 vethc4ff17f 是一对 veth pair。veth pair 是一种成对出现的特殊网络设备,可以把它们想象成由一根虚拟网线连接起来的一对网卡,网卡的一头(eth0
)在容器中,另一头(vethc4ff17f)挂在网桥 docker0
上,其效果就是将 eth0
也挂在了 docker0
上。
我们还看到 eth0
已经配置了 IP 172.17.0.2
,为什么是这个网段呢?让我们通过 docker network inspect bridge
看一下 bridge 网络的配置信息:
原来 bridge 网络配置的 subnet 就是 172.17.0.0/16,并且网关是 172.17.0.1。这个网关在哪儿呢?大概你已经猜出来了,就是 docker0。
容器创建时,docker 会自动从 172.17.0.0/16 中分配一个 IP,这里 16 位的掩码保证有足够多的 IP 可以供容器使用。