?
Dieses Dokument verwendet PHP-Handbuch für chinesische Websites Freigeben
1:概況介紹
2:集裝箱
3:服務
4:成群
5:堆疊
6:部署應用程序
安裝Docker版本1.13或更高版本...
獲取Docker撰寫。在Docker for Mac和Docker for Windows中,它已預先安裝,所以你很好用。在Linux系統(tǒng)上,您需要直接安裝它。在沒有Hyper-V的 Windows 10系統(tǒng)之前,使用Docker Toolbox。
閱讀第1部分中的方向。
了解如何在第二部分...
確保您已經發(fā)布了friendlyhello
你創(chuàng)造的形象將其推送到注冊表.我們將在這里使用這個共享的圖像。
確保你的圖像作為一個部署的容器。運行此命令,在您的信息開槽username
,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
你想去哪里都行。確保你有推送圖像你在第二部分到注冊表,并更新以下內容.yml
通過替換username/repo:tag
還有你的圖像細節(jié)。
version: "3"services: web: # replace username/repo:tag with your name and image details image: username/repository: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執(zhí)行以下操作:
拉我們在第2步上傳的圖像從登記處。
運行該圖像的5個實例作為所調用的服務web
,限制每個實例使用最多10%的CPU(跨所有核心)和50MB的RAM。
如果容器失敗,立即重新啟動容器。
將主機上的端口80映射到web
是80號港口。
web
通過稱為負載平衡的網絡指示容器共享端口80 webnet
。(在內部,容器本身將web
在臨時端口上發(fā)布到80端口。)
webnet
使用默認設置定義網絡(這是一個負載平衡覆蓋網絡)。
想知道撰寫文件版本,名稱和命令嗎?請注意,我們將撰寫文件設置為
version: "3"
。這基本上使得群集模式兼容。我們可以使用部署密鑰(僅適用于Compose文件格式版本3.x或更高版本)及其子選項,以便為每個服務(例如web
)負載均衡和優(yōu)化性能。我們可以使用該docker stack deploy
命令運行該文件(也僅在Compose文件版本3.x及更高版本上受支持)。您可以使用docker-compose up
運行非swarm配置的版本3文件,但我們正在關注堆棧部署,因為我們正在構建一個swarm示例。您可以將撰寫文件命名為任何您想使其對您具有邏輯意義的內容;docker-compose.yml
只是一個標準名稱。我們可以輕松地調用此文件docker-stack.yml
或者對我們的項目更具體的東西。
之前,我們可以使用docker stack deploy
命令我們將首先運行:
docker swarm init
注::我們會理解這個命令的意思第4部分.如果你不跑
docker swarm init
您將得到一個錯誤,即“此節(jié)點不是群集管理器”。
現(xiàn)在讓我們運行它。你必須給你的應用程序一個名字。在這里,它被設置為getstartedlab
*
docker stack deploy -c docker-compose.yml getstartedlab
我們的單個服務堆棧正在一個主機上運行我們部署的映像的5個容器實例。讓我們調查一下。
獲取應用程序中的一個服務的服務ID:
docker service ls
碼頭工人成群運行的任務,產生容器。任務有狀態(tài)和它們自己的ID:
docker service ps <service>
注:Docker對Swarms的支持是使用一個名為SwarKit的項目構建的。SwarkKit任務不需要是容器,但是Docker群集任務被定義為生成它們。
讓我們檢查一個任務,并將輸出限制在容器ID上:
docker inspect --format='{{.Status.ContainerStatus.ContainerID}}' <task>
反之亦然,檢查容器ID,并提取任務ID:
docker inspect --format="{{index .Config.Labels \"com.docker.swarm.task.id\"}}" <container>
現(xiàn)在列出所有5個容器:
docker container ls -q
你可以跑curl http://localhost
連續(xù)幾次,或者轉到瀏覽器中的那個URL,然后點擊刷新幾次。無論哪種方式,您都會看到容器ID的變化,演示負載平衡;對于每個請求,將以循環(huán)的方式選擇5個副本中的一個來響應。
注在此階段,容器可能需要30秒才能響應HTTP請求。這并不表示Docker或S批的性能,而是一個未滿足的Redis依賴關系,我們將在本教程后面討論。
您可以通過更改replicas
價值docker-compose.yml
,保存更改,并重新運行docker stack deploy
指揮:
docker stack deploy -c docker-compose.yml getstartedlab
Docker將進行就地更新,無需先拆下堆?;驓⑺廊魏稳萜鳌?/p>
現(xiàn)在,重新運行docker container ls -q
若要重新配置已部署的實例,請執(zhí)行以下操作。如果您擴展副本,那么會啟動更多的任務,從而啟動更多的容器。
用docker stack rm
*
docker stack rm getstartedlab
這會刪除應用程序,但我們的單節(jié)點群仍在運行(如圖所示docker node ls
)。拿下群落docker swarm leave --force
。
站起來和用Docker擴展你的應用程序一樣容易。您已經在學習如何在生產中運行容器方面邁出了一大步。接下來,您將學習如何在一組Docker機器上運行這個應用程序。
注:編寫這樣的文件用于使用Docker定義應用程序,并且可以使用碼頭云,或者在您選擇的任何硬件或云提供商上。碼頭企業(yè)版...
關于“第四部分”
這是本頁所涵蓋內容的終端記錄*
總而言之,在打字docker run
很簡單的情況下,生產中容器的真正實現(xiàn)將其作為服務運行。服務在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