众所周知,docker网络是它薄弱的地方!
Docker的网络实现:
利用linux的网络命名空间和虚拟网络设备(特别是veth pair)
1、基本原理
实现网络通信:机器需要至少一个网络接口:物理的或者虚拟的
不同子网通信:额外路由机制
docker:默认是虚拟的接口
虚拟接口速率:转发效率极高
虚拟接口速率极高的原理:linux通过在内核中进行数据复制来实现虚拟接口之间的数据转发。
通俗的将:发送接口的发送缓存的数据直接复制到接收接口的接收缓存,不用外部设备转换。
2、网路创建
docker创建一个容器会做什么(网络相关)
1、创建一对虚拟接口,分别放到宿主主机和新容器的 命名空间里
2、宿主主机一端的虚拟接口会链接到默认的docker0网桥或着你指定的网桥上,
而且有一个以veth开头的唯一名字
3、容器里的虚拟接口放到容器里,修改名字作为eth0
4、从网桥可用地址段中获取一个空闲地址分配给容器的eth0,网关则是docker0的ip
然后就可以访问外部和连接其它容器了!
网友评论