濮阳杆衣贸易有限公司

主頁 > 知識庫 > 在Docker的容器之間設(shè)置網(wǎng)絡(luò)設(shè)置網(wǎng)絡(luò)通信的方法

在Docker的容器之間設(shè)置網(wǎng)絡(luò)設(shè)置網(wǎng)絡(luò)通信的方法

熱門標簽:巴東單位怎么做地圖標注 成都人工外呼系統(tǒng)平臺 儋州電銷機器人廠家 電話外呼系統(tǒng)線路哪家公司做得好 地圖標注用小紅旗 外呼系統(tǒng)工作推進 免費高德地圖標注 地圖標注員項目 索契地圖標注app

你也許已經(jīng)知道了,Docker 容器技術(shù)是現(xiàn)有的成熟虛擬化技術(shù)的一個替代方案。它被企業(yè)應(yīng)用在越來越多的領(lǐng)域中,比如快速部署環(huán)境、簡化基礎(chǔ)設(shè)施的配置流程、多客戶環(huán)境間的互相隔離等等。當(dāng)你開始在真實的生產(chǎn)環(huán)境使用 Docker 容器去部署應(yīng)用沙箱時,你可能需要用到多個容器部署一套復(fù)雜的多層應(yīng)用系統(tǒng),其中每個容器負責(zé)一個特定的功能(例如負載均衡、LAMP 棧、數(shù)據(jù)庫、UI 等)。

那么問題來了:有多臺宿主機,我們事先不知道會在哪臺宿主機上創(chuàng)建容器,如果保證在這些宿主機上創(chuàng)建的容器們可以互相聯(lián)網(wǎng)?

聯(lián)網(wǎng)技術(shù)哪家強?開源方案找 weave。這個工具可以為你省下不少煩惱。聽我的準沒錯,誰用誰知道。

于是本教程的主題就變成了“如何使用 weave 在不同主機上的 Docker 容器之間設(shè)置網(wǎng)絡(luò)”。
Weave 是如何工作的

讓我們先來看看 weave 怎么工作:先創(chuàng)建一個由多個 peer 組成的對等網(wǎng)絡(luò),每個 peer 是一個虛擬路由器容器,叫做“weave 路由器”,它們分布在不同的宿主機上。這個對等網(wǎng)絡(luò)的每個 peer 之間會維持一個 TCP 鏈接,用于互相交換拓撲信息,它們也會建立 UDP 鏈接用于容器間通信。一個 weave 路由器通過橋接技術(shù)連接到本宿主機上的其他容器。當(dāng)處于不同宿主機上的兩個容器想要通信,一臺宿主機上的 weave 路由器通過網(wǎng)橋截獲數(shù)據(jù)包,使用 UDP 協(xié)議封裝后發(fā)給另一臺宿主機上的 weave 路由器。

每個 weave 路由器會刷新整個對等網(wǎng)絡(luò)的拓撲信息,可以稱作容器的 MAC 地址(如同交換機的 MAC 地址學(xué)習(xí)一樣獲取其他容器的 MAC 地址),因此它可以決定數(shù)據(jù)包的下一跳是往哪個容器的。weave 能讓兩個處于不同宿主機的容器進行通信,只要這兩臺宿主機在 weave 拓撲結(jié)構(gòu)內(nèi)連到同一個 weave 路由器。另外,weave 路由器還能使用公鑰加密技術(shù)將 TCP 和 UDP 數(shù)據(jù)包進行加密。
準備工作

在使用 weave 之前,你需要在所有宿主機上安裝 Docker 環(huán)境,參考這些教程,在 Ubuntu 或 CentOS/Fedora 發(fā)行版中安裝 Docker。

Docker 環(huán)境部署完成后,使用下面的命令安裝 weave:

   

復(fù)制代碼
代碼如下:
$ wget https://github.com/zettio/weave/releases/download/latest_release/weave
$ chmod a+x weave
$ sudo cp weave /usr/local/bin

注意你的 PATH 環(huán)境變量要包含 /usr/local/bin 這個路徑,請在 /etc/profile 文件中加入一行(LCTT 譯注:要使環(huán)境變量生效,你需要執(zhí)行這個命令: source /etc/profile):

   

復(fù)制代碼
代碼如下:
export PATH="$PATH:/usr/local/bin"

在每臺宿主機上重復(fù)上面的操作。

Weave 在 TCP 和 UDP 上都使用 6783 端口,如果你的系統(tǒng)開啟了防火墻,請確保這兩個端口不會被防火墻擋住。
在每臺宿主機上啟動 Weave 路由器

當(dāng)你想要讓處于在不同宿主機上的容器能夠互相通信,第一步要做的就是在每臺宿主機上啟動 weave 路由器。

第一臺宿主機,運行下面的命令,就會創(chuàng)建并開啟一個 weave 路由器容器(LCTT 譯注:前面說過了,weave 路由器也是一個容器):

   

復(fù)制代碼
代碼如下:
$ sudo weave launch

第一次運行這個命令的時候,它會下載一個 weave 鏡像,這會花一些時間。下載完成后就會自動運行這個鏡像。成功啟動后,終端會輸出這個 weave 路由器的 ID 號。

下面的命令用于查看路由器狀態(tài):

  

復(fù)制代碼
代碼如下:
$ sudo weave status

    第一個 weave 路由器就緒了,目前為止整個 peer 對等網(wǎng)絡(luò)中只有一個 peer 成員。

你也可以使用 docker 的命令來查看 weave 路由器的狀態(tài):

   

復(fù)制代碼
代碼如下:
$ docker ps

    

    第二臺宿主機部署步驟稍微有點不同,我們需要為這臺宿主機的 weave 路由器指定第一臺宿主機的 IP 地址,命令如下:

   

復(fù)制代碼
代碼如下:
$ sudo weave launch first-host-IP-address>

當(dāng)你查看路由器狀態(tài),你會看到兩個 peer 成員:當(dāng)前宿主機和第一個宿主機。

當(dāng)你開啟更多路由器,這個 peer 成員列表會更長。當(dāng)你新開一個路由器時,要指定前一個宿主機的 IP 地址,請注意不是第一個宿主機的 IP 地址(LCTT 譯注:鏈狀結(jié)構(gòu))。

現(xiàn)在你已經(jīng)有了一個 weave 網(wǎng)絡(luò)了,它由位于不同宿主機的 weave 路由器組成。
把不同宿主機上的容器互聯(lián)起來

接下來要做的就是在不同宿主機上開啟 Docker 容器,并使用虛擬網(wǎng)絡(luò)將它們互聯(lián)起來。

假設(shè)我們創(chuàng)建一個私有網(wǎng)絡(luò) 10.0.0.0/24 來互聯(lián) Docker 容器,并為這些容器隨機分配 IP 地址。

如果你想新建一個能加入 weave 網(wǎng)絡(luò)的容器,你就需要使用 weave 命令來創(chuàng)建,而不是 docker 命令。原因是 weave 命令內(nèi)部會調(diào)用 docker 命令來新建容器然后為它設(shè)置網(wǎng)絡(luò)。

下面的命令是在宿主機 hostA 上建立一個 Ubuntu 容器,然后將它放到 10.0.0.0/24 網(wǎng)絡(luò)中,分配的 IP 地址為 10.0.0.1:

   

復(fù)制代碼
代碼如下:
hostA:~$ sudo weave run 10.0.0.1/24 -t -i ubuntu

成功運行后,終端會顯示出容器的 ID 號。你可以使用這個 ID 來訪問這個容器:

   

復(fù)制代碼
代碼如下:
hostA:~$ docker attach container-id>

在宿主機 hostB 上,也創(chuàng)建一個 Ubuntu 容器,IP 地址為 10.0.0.2:

   

復(fù)制代碼
代碼如下:
hostB:~$ sudo weave run 10.0.0.2/24 -t -i ubuntu

訪問下這個容器的控制臺:

   

復(fù)制代碼
代碼如下:
hostB:~$ docker attach container-id>

這兩個容器能夠互相 ping 通,你可以通過容器的控制臺檢查一下。

如果你檢查一下每個容器的網(wǎng)絡(luò)配置,你會發(fā)現(xiàn)有一塊名為“ethwe”的網(wǎng)卡,你分配給容器的 IP 地址出現(xiàn)在它們那里(比如這里分別是 10.0.0.1 和 10.0.0.2)。

Weave 的其他高級用法

weave 提供了一些非常巧妙的特性,我在這里作下簡單的介紹。
應(yīng)用分離

使用 weave,你可以創(chuàng)建多個虛擬網(wǎng)絡(luò),并為每個網(wǎng)絡(luò)設(shè)置不同的應(yīng)用。比如你可以為一群容器創(chuàng)建 10.0.0.0/24 網(wǎng)絡(luò),為另一群容器創(chuàng)建 10.10.0.0/24 網(wǎng)絡(luò),weave 會自動幫你維護這些網(wǎng)絡(luò),并將這兩個網(wǎng)絡(luò)互相隔離。另外,你可以靈活地將一個容器從一個網(wǎng)絡(luò)移到另一個網(wǎng)絡(luò)而不需要重啟容器。舉個例子:

首先開啟一個容器,運行在 10.0.0.0/24 網(wǎng)絡(luò)上:

   

復(fù)制代碼
代碼如下:
$ sudo weave run 10.0.0.2/24 -t -i ubuntu

然后讓它脫離這個網(wǎng)絡(luò):

   

復(fù)制代碼
代碼如下:
$ sudo weave detach 10.0.0.2/24 container-id>

最后將它加入到 10.10.0.0/24 網(wǎng)絡(luò)中:

   

復(fù)制代碼
代碼如下:
$ sudo weave attach 10.10.0.2/24 container-id>

  

    現(xiàn)在這個容器可以與 10.10.0.0/24 網(wǎng)絡(luò)上的其它容器進行通信了。這在當(dāng)你創(chuàng)建一個容器而網(wǎng)絡(luò)信息還不確定時就很有幫助了。
將 weave 網(wǎng)絡(luò)與宿主機網(wǎng)絡(luò)整合起來

有時候你想讓虛擬網(wǎng)絡(luò)中的容器能訪問物理主機的網(wǎng)絡(luò)?;蛘呦喾?,宿主機需要訪問容器。為滿足這個功能,weave 允許虛擬網(wǎng)絡(luò)與宿主機網(wǎng)絡(luò)整合。

舉個例子,在宿主機 hostA 上一個容器運行在 10.0.0.0/24 中,運行使用下面的命令:

   

復(fù)制代碼
代碼如下:
hostA:~$ sudo weave expose 10.0.0.100/24

這個命令把 IP 地址 10.0.0.100 分配給宿主機 hostA,這樣一來宿主機 hostA 也連到了 10.0.0.0/24 網(wǎng)絡(luò)上了。顯然,你在為宿主機選擇 IP 地址的時候,需要選一個沒有被其他容器使用的地址。

現(xiàn)在 hostA 就可以訪問 10.0.0.0/24 上的所有容器了,不管這些容器是否位于 hostA 上。好巧妙的設(shè)定啊,32 個贊!
總結(jié)

如你所見,weave 是一個很有用的 docker 網(wǎng)絡(luò)配置工具。這個教程只是它強悍功能的冰山一角。如果你想進一步玩玩,你可以試試它的以下功能:多跳路由功能,這個在 multi-cloud 環(huán)境(LCTT 譯注:多云,企業(yè)使用多個不同的云服務(wù)提供商的產(chǎn)品,比如 IaaS 和 SaaS,來承載不同的業(yè)務(wù))下還是很有用的;動態(tài)重路由功能是一個很巧妙的容錯技術(shù);或者它的分布式 DNS 服務(wù),它允許你為你的容器命名。

標簽:長春 江蘇 龍巖 安康 鶴壁 茂名 儋州 鄂州

巨人網(wǎng)絡(luò)通訊聲明:本文標題《在Docker的容器之間設(shè)置網(wǎng)絡(luò)設(shè)置網(wǎng)絡(luò)通信的方法》,本文關(guān)鍵詞  在,Docker,的,容器,之間,設(shè)置,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《在Docker的容器之間設(shè)置網(wǎng)絡(luò)設(shè)置網(wǎng)絡(luò)通信的方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于在Docker的容器之間設(shè)置網(wǎng)絡(luò)設(shè)置網(wǎng)絡(luò)通信的方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    安岳县| 南城县| 阿克苏市| 漯河市| 修武县| 六安市| 双峰县| 友谊县| 绥阳县| 汝州市| 赫章县| 伽师县| 泊头市| 南溪县| 达州市| 永靖县| 中江县| 乌审旗| 乡宁县| 陆良县| 华宁县| 祁东县| 原阳县| 宜兰市| 甘孜县| 丰宁| 余庆县| 江山市| 大洼县| 宜兴市| 天全县| 齐齐哈尔市| 介休市| 托里县| 科尔| 湖北省| 绥德县| 宿迁市| 金昌市| 云林县| 文登市|