原文:https://blog.csdn.net/forezp/article/details/80171723
第三部分: 服務
準備工作
- 安裝Docker 1.13及以上版本。
- 安裝Docker Compose
- 閱讀第一部分和第二部分的內容。
- 確保你已經發布friendlyhello映象到docker公共倉庫。
- 確保你的映象能夠作為一個可以部署的容器。 執行這個命令,在你的資訊中插入使用者名稱,repo和tag:docker run -p 80:80 username / repo:tag,然後訪問http:// localhost /。
介紹
第3部分,我們擴充套件了我們的應用並實現了負載均衡。 要做到這一點,我們必須在分散式應用程式的層次結構中升級一級:服務。
堆
服務(你在這裡)
容器(在第2部分涵蓋)
關於服務
在分散式應用程式中,應用程式的不同部分被稱為“服務”。例如,如果你想象一個視訊共享站點,它可能包含一個用於將應用程式資料儲存在資料庫中的服務,一個用於在後臺進行視訊轉碼的服務 使用者上傳的東西,前端的服務等等。
服務實際上只是“生產中的容器”。一個服務只執行一個映象,但它編碼映象執行的方式 – 應該使用哪個埠,容器應執行多少個副本,以便服務具有所需的容量,以及 等等。 縮放服務會更改執行該軟體的容器例項的數量,從而為流程中的服務分配更多計算資源。
幸運的是,使用Docker平臺定義,執行和擴充套件服務非常簡單 – 只需編寫一個docker-compose.yml檔案即可。
你的第一個docker-compose.yml檔案
docker-compose.yml檔案是一個YAML格式的檔案,它定義了Docker容器在生產中的行為方式。
docker-compose.yml
將這個檔案儲存為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執行以下操作:
- 從登錄檔中拉出我們在第二部分中上傳的映象。
- 執行該映象的5個例項作為名為web的服務,限制每個例項使用最多10%的CPU(所有的核心)和50MB的RAM。
- 如果一個失敗,立即重啟容器。
- 將主機上的埠80對映到Web的埠80。
- 指示web容器通過稱為webnet的負載平衡網路共享埠80。 (在內部,容器本身在臨時埠上釋出到web的埠80)。
- 使用預設設定(這是一個負載平衡覆蓋網路)定義webnet網路。
執行你的負載均衡應用
在我們可以使用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以檢視重新配置的已部署例項。 如果你擴大了副本數,則會啟動更多工,從而啟動更多容器。
關閉應用程式和swarm
- 關閉應用用docker stack rm命令:
docker stack rm getstartedlab
複製程式碼
- 關閉swarm
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
複製程式碼
關注我: