1. 程式人生 > 其它 >Docker網路實現的基本原理

Docker網路實現的基本原理

Docker的網路實現基本原理是利用了Linux 的網路命令空間和虛擬網路裝置,因為Linux 通過在核心中進行資料複製來實現虛擬介面之間的資料轉發,即傳送介面的傳送快取中的資料包將直接複製到接收介面的接收快取中,而無須通過外部物理裝置進行交換,Docker 中的網路介面預設都是虛擬介面,虛擬介面的最大優勢就是轉發效率極高。對於本地系統和容器內系統,虛擬介面與一個正常的乙太網卡相比並無區別,只是它的速度要快得多。Docker 的網路實現物理拓撲圖如圖1 所示。

 

圖 1 Docker 的網路實現物理拓撲圖

可以發現,不同容器之間的網路建立了連線並實現了各主機之間的通訊,這是通過 Docker 網橋 docker 實現的。網橋是一個二層的虛擬網路裝置,能把若干個網路介面連線起來,以使得介面之間的報文能夠互相轉發。

我們來具體看一下 Docker 建立一個容器的時候,會具體執行哪些操作

(1)建立一對虛擬介面,分別放到本地 Docker 宿主機和新容器的名稱空間中。

(2)本地 Docker 宿主機一端的虛擬介面連線到預設的 docker網橋或指定網橋上,並具有一個以 “虛擬介面”開頭的唯一名字,例如虛擬介面1。

(3)容器這邊的虛擬介面將放到新建立的容器中,並修改名字為“虛擬介面2”,這個介面只在容器的命令空間中可見。

(4)Docker 宿主機從自身的網路可用地址中獲取一個空閒地址分配給容器的“虛擬介面2”(例如 172.17.2.2/16)。

(5)完成這些操作以後,容器就可以使用它能看到的“虛擬介面2”虛擬網絡卡來訪問外部網路(SNAT),或者外部網路訪問新建容器(DNAT)。SNAT 和 DNAT 機制通過 Docker 宿主機本身的防火牆來實現。