1. 程式人生 > Docker入門教學 >Docker容器跨主機通訊

Docker容器跨主機通訊

之前的章節中,所有有關資料通訊的部分,都是在單一宿主機上,如果不同的容器部署在不同的宿主機,他們之間該如何通訊呢?

本節中,我們介紹以下幾種方式:

  • 橋接網路;

  • 埠對映;

  • Docker網路驅動: 1. Overlay,2. Macvlan。

Tips:還有一些第三方的解決方案,如 Weave,OpenvSwitch 等,有興趣可以自行檢視相關文件。

1. 橋接網路模式與埠對映模式

Tips:橋接宿主機網路與 埠對映模式的設定參考 Docker 網路 部分內容。

橋接模式,多個宿主機位於同一個區域網,將每一個宿主機上的容器網路橋接到宿主機網路中,容器和宿主機同在一個區域網中互相通訊。每臺宿主機上的容器都直接從區域網中獲取IP地址,容易導致IP地址衝突。

埠對映模式,是將容器的服務所執行的埠對映到宿主機的某一個埠,然後其他的容器通過宿主機的對應埠進行訪問。只要宿主機間能互相通訊,容器之間就能通過宿主機的指定埠進行通訊。但是這種方式需要對每一個容器都對映埠,而且宿主機的埠也有限。

2. Docker 網路驅動

2.1 Overlay 網路

Overlay網路依賴額外的服務和配置,配置較為複雜,我們在後續容器雲平臺一節會再次提到它的應用。

2.2 Macvlan 網路

macvlan 是 Linux 的核心模組,是一種網絡卡虛擬化技術,功能是允許在同一個物理網絡卡上虛擬出多個網絡卡,通過不同的MAC地址在資料鏈路層進行網路資料的轉發,一塊網絡卡上配置多個 MAC 地址,每個interface 可以配置自己的 IP。

Docker 的 macvlan 網路使用了 macvlan 驅動。 在物理網路拓撲結構上看,每張虛擬網絡卡都是一個單獨的網口。

我們需要兩臺裝好 Docker 服務的 Linux 虛擬機器,並且虛擬機器的網路要互通。

  1. 建立 macvlan 網路,在兩個節點上都進行此操作:
docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth1 -o macvlan_mode=bridge macvlan_net 
  • macvlan 是 kernel 的模組名;
  • 192.168.2.0/24
    是宿主機所在網路的網段;
  • 192.168.2.1是閘道器;
  • eth1 是 Docker 宿主機(兩臺虛擬機器)接入192.168.1.0/24 的物理網口。
  1. 建立容器並指定 IP:

容器b1:

docker run -it -d --net macvlan_net --ip=192.168.1.101 --name b1 busybox

容器b2:

docker run -it -d --net macvlan_net --ip=192.168.1.102 --name b2 busybox
  1. 測試容器通訊

容器b1:

docker exec -it b1 ping 192.168.1.102

容器b2:

docker exec -it b2 ping 192.168.1.101

3. 小結

Docker 的容器跨主機通訊功能是比較薄弱的,如果有需要,將上面的方案大致瞭解一下即可。在實際生產中,跨宿主機節點的 Docker 容器通訊都依託在容器編排平臺(如 k8s)網路配置,大家學完 Docker 之後一定有機會去深入瞭解的。