一、先決條件
首先,閱讀並完成前兩張docker容器及基礎知識與安裝
二、介紹
擴展應用程序並啓用負載平衡。要做到這一點,我們必須在分佈式應用程序的層次結構中提升一級: 服務。
關於服務
在分佈式應用程序中,應用程序的不同部分稱爲“服務”。例如,如果您想象一個視頻共享站點,它可能包括一個用於將應用程序數據存儲在數據庫中的服務,一個用於在後臺進行視頻轉碼的服務。用戶上傳內容,前端服務等。
服務實際上只是“生產中的容器”。服務只運行一個映像,但它編碼了映像的運行方式 - 它應該使用哪些端口,應該運行多少個容器副本,以便服務具有所需的容量,以及等等。擴展服務會更改運行該軟件的容器實例的數量,從而爲流程中的服務分配更多計算資源。
使用Docker平臺定義,運行和擴展服務非常容易 - 只需編寫一個docker-compose.yml
文件即可。
三、docker-compose.yml
編寫
一個docker-compose.yml
文件是一個YAML文件,它定義瞭如何Docker容器在生產中應表現。
docker-compose.yml
將此文件保存爲docker-compose.yml
您想要的任何位置。確保已將 docker-容器章節創建的鏡像推送到docker hub
version: "3"
services:
web:
image: gejiwei/get-started:part1
deploy:
replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "4000:80"
networks:
- webnet
networks:
webnet:
該docker-compose.yml
解釋
· 拉docker-容器章節上傳docker-hub的鏡像。
· 將該鏡像的5個實例作爲一個被調用的服務運行web
,限制每個實例使用,最多10%的CPU(跨所有內核)和50MB的RAM。
· 如果一個失敗,立即重啓容器。
· 將主機上的端口4000映射到web
端口80。
· 指示web
容器通過稱爲負載平衡的網絡共享端口80 webnet
。(在內部,容器本身web
在短暫的端口發佈到 80端口。)
· webnet
使用默認設置(負載平衡的覆蓋網絡)定義網絡。
·
四、運行新的負載均衡應用
在我們docker stack deploy
首先運行命令之前:
docker swarm init
注意:如果您沒有運行,docker swarm init
則會收到“此節點不是羣集管理器”的錯誤。錯誤如下圖
現在讓我們來運行吧。您需要爲您的應用程序命名。在這裏,它被設置爲 getstartedlab
:
docker stack deploy -c docker-compose.yml getstartedlab
我們的單個服務堆棧在一臺主機上運行已部署鏡像像的5個容器實例
在我們的應用程序中獲取一項服務的服務ID:
docker service ls[object Object]
查×××的輸出web
,並附上您的應用名稱。如果您將其命名爲與此示例中顯示的相同,則名稱爲getstartedlab_web
。還列出了服務ID,以及副本數,鏡像名稱和公開端口。
在服務中運行的單個容器稱爲任務。任務被賦予以數字遞增的唯一ID,最多爲replicas
您定義 的數量docker-compose.yml
。列出您的服務任務:
docker service ps getstartedlab_web
如果您只列出系統上的所有容器,則任務也會顯示,但不會被服務過濾:
docker container ls -q
您可以curl -4 http://localhost:4000
連續多次運行,或者在瀏覽器中轉到該URL並點擊刷新幾次,與上圖容器ID相對應
五、擴展應用程序
您可以通過更改replicas
值docker-compose.yml
,保存更改並重新運行docker stack deploy
命令來擴展應用程序:
docker stack deploy -c docker-compose.yml getstartedlab
Docker執行就地更新,無需首先拆除堆棧或殺死任何容器。
現在,重新運行docker container ls -q
以查看已重新配置的已部署實例。如果放大副本,則會啓動更多任務,從而啓動更多容器。
取下應用程序和羣
· 將應用程序刪除docker stack rm
:
· docker stack rm getstartedlab
· 取下羣。
· docker swarm leave --force
使用Docker站起來擴展您的應用程序就像這一樣簡單。。
六、回顧
回顧一下,雖然鍵入docker run
很簡單,但生產中容器的真正實現是將其作爲服務運行。服務在Compose文件中編碼容器的行爲,此文件可用於擴展,限制和重新部署我們的應用程序。使用啓動服務的相同命令,可以在運行時應用對服務的更改: docker stack deploy
。
在此階段要探索的一些命令:
docker stack ls #列表堆棧或應用程序
docker stack deploy -c <composefile> <appname> # 運行指定的撰寫文件
docker service ps <service> # 列出與應用程序相關的任務
docker container ls -q # 列出容器ID
docker stack rm <appname> # 拆除應用程序
docker swarm leave --force # 拆除節點羣