容器docker网络解析

如果想要实现两台主机之间相连通信,最直接的办法是找一根网线连起来,
多台的话需要用网线将他们链接再交换机上。

linux中能够起到虚拟交换机的网络设备是网桥birdge, 工作再链路层,
主要是根据mac地址将数据包转发到网桥的不同端口。

docker默认创建docker0网桥,凡是链接再docker0上的docker就可以用它来通信了。

而要用容器链接到docker0上需要用到veth pair的虚拟设备。

veth pair的设备特点是:它被创建出来后总是以两张虚拟网卡(veth peer)的形式成对出现的,从其中一个网卡发出的数据包,可以直接出现再与它对应的另一张网卡上,
哪怕这两张网卡再不同的 network namespace里

所以veth pair常被当做链接不同network namespace的网线一样
当启动一个容器之后进入到容器内部用 ifconfig可以看到
容器内部有一张eth0的网卡,它正是veth pair 设备再容器里的这一端;

再容器里用route查看容器路由,
可以看到凡是再172.17.0.0/16 均会较给主机eth0网卡来处理

而容器的地址是172.17.0.2,属于这个范围内

来到宿主机查看另一端:
ifconfig可以看到有一个虚拟网卡名字比较长,用 brctl show可以看到这张网卡被插在了
docker0网桥上

所以容器和宿主机是通过docker0网桥来进行交互的,不同容器之间也是,因为虚拟网卡都是插在docker0上的
原文地址:https://www.cnblogs.com/tigergaonotes/p/15587373.html