docker官方文檔翻譯3

原文: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部分,咱們擴展了咱們的應用並實現了負載均衡。 要作到這一點,咱們必須在分佈式應用程序的層次結構中升級一級:服務。node

堆 服務(你在這裏) 容器(在第2部分涵蓋)web

關於服務

在分佈式應用程序中,應用程序的不一樣部分被稱爲「服務」。例如,若是你想象一個視頻共享站點,它可能包含一個用於將應用程序數據存儲在數據庫中的服務,一個用於在後臺進行視頻轉碼的服務 用戶上傳的東西,前端的服務等等。docker

服務實際上只是「生產中的容器」。一個服務只運行一個鏡像,但它編碼鏡像運行的方式 - 應該使用哪一個端口,容器應運行多少個副本,以便服務具備所需的容量,以及 等等。 縮放服務會更改運行該軟件的容器實例的數量,從而爲流程中的服務分配更多計算資源。數據庫

幸運的是,使用Docker平臺定義,運行和擴展服務很是簡單 - 只需編寫一個docker-compose.yml文件便可。瀏覽器

你的第一個docker-compose.yml文件

docker-compose.yml文件是一個YAML格式的文件,它定義了Docker容器在生產中的行爲方式。bash

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執行如下操做:app

  • 從註冊表中拉出咱們在第二部分中上傳的鏡像。
  • 運行該鏡像的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

複製代碼

關注我:

相關文章
相關標籤/搜索