眾所周知,docker網絡是它薄弱的地方!
Docker的網絡實現:
利用linux的網絡命名空間和虛擬網絡設備(特別是veth pair)
1、基本原理
實現網絡通信:機器需要至少一個網絡接口:物理的或者虛擬的
不同子網通信:額外路由機制
docker:默認是虛擬的接口
虛擬接口速率:轉發效率極高
虛擬接口速率極高的原理:linux通過在內核中進行數據復制來實現虛擬接口之間的數據轉發。
通俗的將:發送接口的發送緩存的數據直接復制到接收接口的接收緩存,不用外部設備轉換。
2、網路創建
docker創建一個容器會做什么(網絡相關)
1、創建一對虛擬接口,分別放到宿主主機和新容器的 命名空間里
2、宿主主機一端的虛擬接口會鏈接到默認的docker0網橋或著你指定的網橋上,
而且有一個以veth開頭的唯一名字
3、容器里的虛擬接口放到容器里,修改名字作為eth0
4、從網橋可用地址段中獲取一個空閑地址分配給容器的eth0,網關則是docker0的ip
然后就可以訪問外部和連接其它容器了!