?
本文檔使用 PHP中文網(wǎng)手冊 發(fā)布
1:概況介紹
2:集裝箱
3:服務(wù)
4:成群
5:堆疊
6:部署應(yīng)用程序
安裝Docker版本1.13或更高版本。
弄到碼頭組成如上文所述第三部分先決條件...
弄到碼頭機(jī)械如上文所述第四部分先決條件...
閱讀第1部分中的方向。
學(xué)習(xí)如何在第2部分中創(chuàng)建容器。
確保您已經(jīng)發(fā)布了friendlyhello
你創(chuàng)造的形象將其推送到注冊表.我們將在這里使用這個共享的圖像。
確保你的圖像作為一個部署的容器。運(yùn)行此命令,在您的信息開槽username
,repo
和tag
:docker run -p 80:80 username/repo:tag
,然后訪問http://localhost/
。
有一份你的docker-compose.yml
從第3部分手巧。
確保你安裝的機(jī)器第4部分已經(jīng)準(zhǔn)備好了。跑docker-machine ls
來驗(yàn)證這個。如果機(jī)器停止運(yùn)行docker-machine start myvm1
引導(dǎo)經(jīng)理,然后是docker-machine start myvm2
啟動工人。
讓你創(chuàng)造的蜂群第4部分準(zhǔn)備好了。跑docker-machine ssh myvm1 "docker node ls"
來驗(yàn)證這個。如果群集出現(xiàn),兩個節(jié)點(diǎn)都將報(bào)告一個ready
現(xiàn)狀。如果沒有,請重新初始化蜂群,并按照建立你的蜂群...導(dǎo)言在第4部分,您了解了如何設(shè)置一個群集,這是一個運(yùn)行Docker的機(jī)器集群,并在其中部署了一個應(yīng)用程序,容器在多臺機(jī)器上協(xié)同運(yùn)行。在第5部分中,您將到達(dá)分布式應(yīng)用程序?qū)哟谓Y(jié)構(gòu)的頂端:堆疊堆棧是一組相互關(guān)聯(lián)的服務(wù),它們共享依賴關(guān)系,可以編排和縮放在一起。單個堆棧能夠定義和協(xié)調(diào)整個應(yīng)用程序%28的功能,盡管非常復(fù)雜的應(yīng)用程序可能需要使用多個堆棧%29。一些好消息是,從技術(shù)上講,從第3部分開始,您就一直在使用堆棧,那時(shí)您創(chuàng)建了一個撰寫文件并使用了docker stack deploy
但是,這是運(yùn)行在單個主機(jī)上的單個服務(wù)堆棧,而這通常不是生產(chǎn)過程中發(fā)生的情況。在這里,您將學(xué)習(xí)到的知識,使多個服務(wù)相互關(guān)聯(lián),并運(yùn)行在多臺機(jī)器上。你做得很好,這是你的家添加新服務(wù)并重新部署將服務(wù)添加到我們的docker-compose.yml
檔案。首先,讓我們添加一個免費(fèi)的可視化服務(wù),讓我們看看我們的集群是如何調(diào)度容器的。
敞開docker-compose.yml
在編輯器中,并將其內(nèi)容替換為以下內(nèi)容。一定要更換username/repo:tag
還有你的圖像細(xì)節(jié)。
版本:“3”服務(wù):web:#替換用戶名/repo:標(biāo)記與您的名稱和圖像詳細(xì)信息圖片:username/repo:標(biāo)簽部署:副本:5重新啟動[醫(yī)]策略:條件:失敗資源:限制:cpu:“0.1”內(nèi)存:50m端口:-“80:80”網(wǎng)絡(luò):-webnet可視化器:圖像:dockersames/可視化器:穩(wěn)定端口:-“8080:8080”卷:-“/var/run/docker.sock:/var/run/docker.sock”部署:放置:約束:node.ole==Manager網(wǎng)絡(luò):-網(wǎng)絡(luò)網(wǎng)絡(luò):
這里唯一的新發(fā)現(xiàn)是對等服務(wù)web
,命名visualizer
.你會在這里看到兩件新的事情:volumes
鍵,使可視化器訪問主機(jī)的Docker套接字文件,并且placement
關(guān)鍵,確保該服務(wù)只在群集管理器上運(yùn)行,而不是在員工身上運(yùn)行。那是因?yàn)檫@個容器Docker創(chuàng)建的開源項(xiàng)目,顯示在圖表中的群集上運(yùn)行的Docker服務(wù)。
稍后我們將更多地討論位置限制和卷。
復(fù)制這個新的docker-compose.yml
把文件交給蜂群經(jīng)理,myvm1
*
碼頭機(jī)scp碼頭-合成物.yml myvm 1:~
重新運(yùn)行docker stack deploy
命令,所有需要更新的服務(wù)都將被更新:
$ docker-machine ssh myvm1“docker stack deploy -c docker-compose.yml getstartedlab”更新服務(wù)getstartedlab_web(id:angi1bf5e4to03qu9f93trnxm)更新服務(wù)getstartedlab_visualizer(id:l9mnwkeq2jiononb5ihz9u7a4)
看看可視化器。您visualizer
在端口8080 上運(yùn)行的Compose文件中看到。通過運(yùn)行獲取其中一個節(jié)點(diǎn)的IP地址docker-machine ls
。轉(zhuǎn)到8080端口的IP地址,您將看到可視化器正在運(yùn)行:您希望管理器上運(yùn)行
的單個副本visualizer
,并且5個實(shí)例web
遍布整個群集。您可以通過運(yùn)行來驗(yàn)證此可視化效果docker stack ps <stack>
:docker-machine ssh myvm1“docker stack ps getstartedlab”可視化器是一個獨(dú)立的服務(wù),可以在任何包含它的應(yīng)用程序中運(yùn)行。它不依賴于其他任何東西。現(xiàn)在讓我們創(chuàng)建一個服務(wù)呢 有一個依賴項(xiàng):Redis服務(wù)將提供一個訪問者counter.Persist dataLet再次通過相同的工作流程來添加一個Redis數(shù)據(jù)庫來存儲應(yīng)用程序數(shù)據(jù)。
保存這個新的docker-compose.yml
文件,它最終添加了Redis服務(wù)。一定要更換username/repo:tag
還有你的圖像細(xì)節(jié)。
版本:“3”服務(wù):web:#替換用戶名/repo:標(biāo)記與您的名稱和圖像詳細(xì)信息圖片:username/repo:標(biāo)簽部署:副本:5重新啟動[醫(yī)]策略:條件:失敗資源:限制:cpu:“0.1”內(nèi)存:50m端口:-“80:80”網(wǎng)絡(luò):-webnet可視化器:圖像:dockersames/可視化器:穩(wěn)定端口:-“8080:8080”卷:-“/var/run/docker.sock:/var/run/docker.sock”部署:放置:約束:node.ole==Manager網(wǎng)絡(luò):-webnetredis:映像:redis端口:-“6379:6379”卷:-/data:/data部署:放置:約束:node.ole==Manager網(wǎng)絡(luò):-網(wǎng)絡(luò)網(wǎng)絡(luò):
Redis在Docker圖書館有一個官方形象,并已被授予短圖片。image
名稱...redis
所以不username/repo
這里的記號。Redis端口6379已經(jīng)由Redis預(yù)先配置,以便從容器公開到主機(jī),在我們的撰寫文件中,我們將它從主機(jī)公開給全世界。因此,如果您愿意,您可以將任何節(jié)點(diǎn)的IP輸入到RedisDesktopManager中,并管理這個Redis實(shí)例。
最重要的是,在redis
使數(shù)據(jù)在此堆棧的部署之間保持不變的規(guī)范:
- `redis` always runs on the manager, so it’s always using the same filesystem.- `redis` accesses an arbitrary directory in the host’s file system as `/data` inside the container, which is where Redis stores data.
這將在主機(jī)的物理文件系統(tǒng)中為Redis數(shù)據(jù)創(chuàng)建一個“真相源”。沒有這個,Redis就會將其數(shù)據(jù)存儲在/data
在容器的文件系統(tǒng)中,如果重新部署容器,它就會被清除掉。
這一真相來源有兩個組成部分:
- The placement constraint you put on the Redis service, ensuring that it always uses the same host.- The volume you created that lets the container access `./data` (on the host) as `/data` (inside the Redis container). While containers come and go, the files stored on `./data` on the specified host will persist, enabling continuity.
您已經(jīng)準(zhǔn)備好部署新的Redis使用堆棧。
創(chuàng)建一個./data
管理器上的目錄:
$docker-機(jī)器ssh myvm 1“mkdir./data”
復(fù)制新的docker-compose.yml
與docker-machine scp
*
$docker-機(jī)器SCP碼頭-Compose.yml myvm 1:~
跑docker stack deploy
再來一次。
$docker-Machine ssh myvm 1“塢庫部署-c??繋?come.yml getstartedlab”
檢查您的節(jié)點(diǎn)之一的網(wǎng)頁%28例如。http://192.168.99.101
%29,您將看到訪問者計(jì)數(shù)器的結(jié)果,該計(jì)數(shù)器現(xiàn)在是實(shí)時(shí)的,并在Redis上存儲信息。
另外,檢查節(jié)點(diǎn)的IP地址上端口8080處的可視化器,您將看到redis
與web
和visualizer
服務(wù)。
關(guān)于第6部分
這是本頁所涵蓋內(nèi)容的終端記錄*
您了解到堆棧是相互關(guān)聯(lián)的服務(wù),所有這些服務(wù)都是協(xié)同運(yùn)行的,而自本教程第三部分以來,您就一直使用堆棧。您了解到要向堆棧中添加更多服務(wù),請將它們插入撰寫文件中。最后,您了解到,通過使用位置約束和卷的組合,您可以為持久化數(shù)據(jù)創(chuàng)建一個永久的主頁,這樣當(dāng)容器被拆卸和重新部署時(shí),應(yīng)用程序的數(shù)據(jù)就能存活下來。