原文:https://blog.csdn.net/forezp/article/details/80171723前端
第3部分,咱們擴展了咱們的應用並實現了負載均衡。 要作到這一點,咱們必須在分佈式應用程序的層次結構中升級一級:服務。node
堆 服務(你在這裏) 容器(在第2部分涵蓋)web
在分佈式應用程序中,應用程序的不一樣部分被稱爲「服務」。例如,若是你想象一個視頻共享站點,它可能包含一個用於將應用程序數據存儲在數據庫中的服務,一個用於在後臺進行視頻轉碼的服務 用戶上傳的東西,前端的服務等等。docker
服務實際上只是「生產中的容器」。一個服務只運行一個鏡像,但它編碼鏡像運行的方式 - 應該使用哪一個端口,容器應運行多少個副本,以便服務具備所需的容量,以及 等等。 縮放服務會更改運行該軟件的容器實例的數量,從而爲流程中的服務分配更多計算資源。數據庫
幸運的是,使用Docker平臺定義,運行和擴展服務很是簡單 - 只需編寫一個docker-compose.yml文件便可。瀏覽器
docker-compose.yml文件是一個YAML格式的文件,它定義了Docker容器在生產中的行爲方式。bash
將這個文件保存爲docker-compose.yml,不管你在何時想用。 確保你已將第2部分中建立的圖像推送到註冊倉庫中,並經過用你的鏡像,替換username / repo:標籤來更新此.yml。網絡
version: "3"
services:
web:
# replace username/repo:tag with your name and image details
image: username/repo:tag
deploy:
replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "80:80"
networks:
- webnet
networks:
webnet:
複製代碼
這個docker-compose.yml文件告訴Docker執行如下操做:app
在咱們可使用docker stack deploy命令以前,咱們首先運行:負載均衡
docker swarm init
複製代碼
如今咱們來運行它。 你須要給你的應用一個名字。在這裏,取名爲getstartedlab:
docker stack deploy -c docker-compose.yml getstartedlab
複製代碼
咱們的單一服務堆棧在一臺主機上運行了5個咱們部署映像的容器實例。
在咱們的應用程序中獲取一項服務的服務ID:
docker service ls
複製代碼
查找Web服務的輸出,並以你的應用程序名稱做爲前綴。若是你將其命名爲與此示例中顯示的相同,則名稱爲getstartedlab_web。還列出了服務ID以及副本數量,映像名稱和端口暴露量。
在服務中運行的單個容器稱爲任務。任務會得到數值增長的惟一ID,最大數量爲您在docker-compose.yml中定義的副本數量。 列出您的服務的任務:
docker service ps getstartedlab_web
複製代碼
若是您只列出系統中的全部容器,但也不會顯示服務過濾的任務,任務也會顯示出來:
docker container ls -q
複製代碼
您能夠連續屢次運行curl -4 http:// localhost,或者在瀏覽器上訪問該URL並刷新幾回。
不管哪一種方式,容器ID都會發生變化,從而代表有負載均衡的功能; 在每一個請求中,以循環的策略選擇5個任務中的一個來響應。 容器ID與前一個命令(docker container ls -q)的輸出相匹配。
你能夠經過更改docker-compose.yml中的副本數量的值,保存更改並從新運行docker stack deploy命令來擴展應用程序:
docker stack deploy -c docker-compose.yml getstartedlab
複製代碼
Docker執行一個就地更新,不須要先撕下堆棧或殺死任何容器。
如今,從新運行docker container ls -q以查看從新配置的已部署實例。 若是你擴大了副本數,則會啓動更多任務,從而啓動更多容器。
docker stack rm getstartedlab
複製代碼
docker swarm leave --force
複製代碼
使用Docker來升級和擴展應用程序一樣簡單。 你已經朝着學習如何在生產中運行容器邁出了一大步。 接下來,您將學習如何將這個應用程序做爲Docker機器集羣上的真正羣體運行。
總而言之,在輸入docker run是很是簡單的,生產環境中的容器的真正實現就是將其做爲服務來運行的。 服務在Compose文件中編寫了容器的行爲,此文件可用於容器擴容,限制和從新部署咱們的應用程序。 對服務的更改能夠在運行時適用,使用啓動服務的相同命令:docker stack deploy。
現階段須要探索的一些命令以下:
docker stack ls # List stacks or apps
docker stack deploy -c <composefile> <appname> # Run the specified Compose file
docker service ls # List running services associated with an app
docker service ps <service> # List tasks associated with an app
docker inspect <task or container> # Inspect task or container
docker container ls -q # List container IDs
docker stack rm <appname> # Tear down an application
docker swarm leave --force # Take down a single node swarm from the manager
複製代碼
關注我: