歡迎您光臨本站 註冊首頁

Docker容器互相連接三種實現方法詳解

←手機掃碼閱讀     techdo @ 2020-06-06 , reply:0

docker容器間的互連通信有三種方法:
 

  • docker內部網絡:不夠靈活強大,不推薦

  • docker networking:1.9或更新版本,推薦使用

  • docker鏈接:1.9之前版本適用。

1.docker內部網絡
 

涉及docker自己的網絡棧。
 

安裝docker後,系統會創建一個新的網絡接口,名字是docker0,用於連接容器和宿主機,IP範圍是172.16-172.30,
 

每個docker容器都會在這個接口上分配一個IP地址。
 

docker每創建一個容器就會創建一組互聯的網絡接口,一端是容器裡的eth0接口,另一端則在宿主機以veth開頭命名,
 

通過把每個veth接口綁定到docker0網橋,docker創建了一個虛擬子網,這個子網由宿主機和所有的docker容器共享,
 

實現容器和宿主機的通信連接,注意只有容器運行時veth接口才存在。

用內部網絡實現容連互聯的弊端:

  • 要在容器的應用程序裡對另一個容器的IP地址做硬編碼;

  • 容器重啟後,IP地址可能會改變;

  • 不夠方便和靈活。

2.docker networking
 

容器之間的連接用網絡創建。
 

允許用戶創建自己的網絡,容器通過這個網絡互相通信;
 

可以跨越不同的宿主機來通信,網絡配置也更靈活;
 

可以在無需更新連接的情況下,停止、啟動或者重啟容器;
 

不必事先創建容器再去連接它,也不必關心容器的運行順序,可以在網絡內部獲得容器名解析和發現;
 

和docker compose以及swarm進行了集成;

在docker網絡內部啟動的容器,會感知到所有在這個網絡下運行的容器,
 

並通過/etc/hosts文件將這些容器的地址保存到本地DNS中,
 網絡內的任何主機都可以使用hostname或hostname.netname的形式來被解析訪問,
 

如果任何一個容器重啟了,其IP地址會自動在/etc/hosts文件中更新,
 

測試中發現/etc/hosts文件中好像沒有新增其他容器的地址,但也能互相ping通;

一個容器可以同時加入多個網絡,所以可以創建非常複雜的網絡模型;

  • docker network create 創建一個網絡

  • docker network inspect 查看網絡的詳細信息

  • docker network ls 列出當前系統中的所有網絡

  • docker network connect 將已有容器連接到一個網絡

  • docker network disconnect 從網絡中斷開一個容器

  • docker network rm 刪除一個或多個網絡

  • docker network prune 刪除所有未使用的網絡

3.docker鏈接
 

在鏈接過程中要引用到容器的名字,且只能工作於同一臺宿主機中。
 

在docker run啟動容器時用參數 --link 創建兩個容器間的 客戶-服務 鏈接,
 

需要兩個參數,一個是鏈接容器的名字,一個是鏈接的別名,即 --link redis:db,
 

被鏈接的容器是服務,鏈接讓服務容器能夠和客戶容器通信,
 

客戶容器可直接訪問服務容器的任意公開端口,所以服務容器的端口不需要對本地宿主機公開,相對更加安全;
 

可以把多個客戶容器鏈接到同一個服務容器,也可通過指定多次--link來鏈接到多個服務容器,
 

docker在容器的/etc/hosts文件和包含鏈接信息的環境變量裡寫入鏈接信息;

無論採用哪種方式,都可以創建一個Web應用程序棧,包含以下組件:
 

  • 一個Web服務器容器

  • 一個Redis數據庫容器

  • 兩個容器間的一個安全鏈接


[techdo ] Docker容器互相連接三種實現方法詳解已經有290次圍觀

http://coctec.com/docs/docker/show-post-237197.html