天天看點

docker叢集部署:第3部分:服務

docker叢集部署:第3部分:服務

介紹

在第3部分中,我們将擴充應用程式并實作負載平衡。

關于服務

在分布式應用程式中,應用程式的不同部分被稱為“服務”。例如,一個視訊共享站點,它可能包括一個用于将應用程式資料存儲在資料庫中的服務,後面的視訊轉碼服務使用者上傳東西,為前端服務等等。

服務實際上隻是“生産中的容器”。服務隻運作一個鏡像,但它定義鏡像運作的方式 - 應該使用哪個端口,容器應該運作多少個執行個體,以便服務具有所需的容量,以及等等。縮放服務會更改運作該軟體的容器執行個體的數量,進而為流程中的服務配置設定更多的計算資源。

幸運的是,使用Docker平台定義,運作和擴充服務非常簡單 - 隻需編寫一個docker-compose.yml檔案即可。

docker-compose.yml檔案

docker-compose.yml檔案是一個YAML檔案,它定義了Docker容器在生産中的行為方式。

說明:我在vmware虛拟機測試時,使用的是如下腳本:

這個docker-compose.yml檔案告訴Docker執行以下操作:

(1)從系統資料庫中取出我們在第2部分:容器中上傳的鏡像。

(2)運作該鏡像的5個執行個體作為一個服務調用web,限制每個使用,最多10%的CPU(跨所有核心)和50MB的RAM。(我未使用)

(3)如果一個失敗,立即重新啟動容器。

(4)訓示Web容器通過稱為webnet的負載均衡網絡共享端口80。 (在内部,容器本身将在臨時端口上釋出到網站的端口80)。

(5)定義webnet網絡使用預設設定(這是一個負載均衡覆寫網絡)。

運作新的負載均衡應用程式

注意:

(1)我們将在第4部分中介紹該指令的含義。如果不運作docker swarm init,則會顯示“此節點不是swarm manager”的錯誤。

(2)#docker swarm init --advertise-addr 10.0.0.38:2377中--advertise-addr的作用:

如果未指定,Docker将檢查系統是否是單個IP位址,如是單個ip,docker将該IP位址與偵聽端口(預設2377)一起使用。如果系統有多個IP位址,則 --advertise-addr必須指定正确的位址,以便進行管理器間通信和覆寫網絡。

我們的單個服務堆棧在一台主機上運作了5個部署映像的容器執行個體。讓我們來檢視下。

将看到Web服務的輸出,并以你的應用程式名稱作為字首。如果你将其命名為與此示例中所示的相同,則名稱将為getstartedlab_web。還列出了服務ID以及執行個體數量,鏡像名稱和暴露端口。

在服務中運作的單個容器稱為任務。任務會被賦予唯一的數字增加的ID,可以在docker-compose.yml中定義的執行個體數量。列出你的服務的任務:

如果你隻列出系統上的所有容器,也會顯示任務,但不會被服務過濾:

你可以連續多次運作curl -4 http:// localhost,或者在浏覽器中轉到該URL并點選幾次重新整理。

無論哪種方式,你将看到容器ID更改,示範負載均衡;在每個請求中,以循環方式選擇5個任務中的一個來響應。容器ID将比對您以前的指令(docker container ls -q)的輸出。

縮放應用程式

你可以通過更改docker-compose.yml中的執行個體值,儲存更改并重新運作docker stack deploy指令來擴充應用程式:

現在,重新運作docker container ls -q來檢視重新配置的已部署執行個體。

關閉應用服務堆棧(stack)

删除叢集(swarm)

     本文轉自品鑒初心51CTO部落格,原文連結:http://blog.51cto.com/wutengfei/2063998,如需轉載請自行聯系原作者