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