docker官方文件翻譯3

方誌朋發表於2019-02-22

原文: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並重新整理幾次。

image

無論哪種方式,容器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

複製程式碼

關注我:

docker官方文件翻譯3

相關文章