?
本文檔使用 php中文網(wǎng)手冊(cè) 發(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)造的形象將其推送到注冊(cè)表.我們將在這里使用這個(gè)共享的圖像。
確保你的圖像作為一個(gè)部署的容器。運(yùn)行此命令,在您的信息開槽username
,repo
和tag
:docker run -p 80:80 username/repo:tag
,然后訪問(wèn)http://localhost/
。
有一份你的docker-compose.yml
從第3部分手巧。
確保你安裝的機(jī)器第4部分已經(jīng)準(zhǔn)備好了。跑docker-machine ls
來(lái)驗(yàn)證這個(gè)。如果機(jī)器停止運(yùn)行docker-machine start myvm1
引導(dǎo)經(jīng)理,然后是docker-machine start myvm2
啟動(dòng)工人。
讓你創(chuàng)造的蜂群第4部分準(zhǔn)備好了。跑docker-machine ssh myvm1 "docker node ls"
來(lái)驗(yàn)證這個(gè)。如果群集出現(xiàn),兩個(gè)節(jié)點(diǎn)都將報(bào)告一個(gè)ready
現(xiàn)狀。如果沒(méi)有,請(qǐng)重新初始化蜂群,并按照建立你的蜂群...導(dǎo)言在第4部分,您了解了如何設(shè)置一個(gè)群集,這是一個(gè)運(yùn)行Docker的機(jī)器集群,并在其中部署了一個(gè)應(yīng)用程序,容器在多臺(tái)機(jī)器上協(xié)同運(yùn)行。在第5部分中,您將到達(dá)分布式應(yīng)用程序?qū)哟谓Y(jié)構(gòu)的頂端:堆疊堆棧是一組相互關(guān)聯(lián)的服務(wù),它們共享依賴關(guān)系,可以編排和縮放在一起。單個(gè)堆棧能夠定義和協(xié)調(diào)整個(gè)應(yīng)用程序%28的功能,盡管非常復(fù)雜的應(yīng)用程序可能需要使用多個(gè)堆棧%29。一些好消息是,從技術(shù)上講,從第3部分開始,您就一直在使用堆棧,那時(shí)您創(chuàng)建了一個(gè)撰寫文件并使用了docker stack deploy
但是,這是運(yùn)行在單個(gè)主機(jī)上的單個(gè)服務(wù)堆棧,而這通常不是生產(chǎn)過(guò)程中發(fā)生的情況。在這里,您將學(xué)習(xí)到的知識(shí),使多個(gè)服務(wù)相互關(guān)聯(lián),并運(yùn)行在多臺(tái)機(jī)器上。你做得很好,這是你的家添加新服務(wù)并重新部署將服務(wù)添加到我們的docker-compose.yml
檔案。首先,讓我們添加一個(gè)免費(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重新啟動(dòng)[醫(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)是對(duì)等服務(wù)web
,命名visualizer
.你會(huì)在這里看到兩件新的事情:volumes
鍵,使可視化器訪問(wèn)主機(jī)的Docker套接字文件,并且placement
關(guān)鍵,確保該服務(wù)只在群集管理器上運(yùn)行,而不是在員工身上運(yùn)行。那是因?yàn)檫@個(gè)容器Docker創(chuàng)建的開源項(xiàng)目,顯示在圖表中的群集上運(yùn)行的Docker服務(wù)。
稍后我們將更多地討論位置限制和卷。
復(fù)制這個(gè)新的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文件中看到。通過(guò)運(yùn)行獲取其中一個(gè)節(jié)點(diǎn)的IP地址docker-machine ls
。轉(zhuǎn)到8080端口的IP地址,您將看到可視化器正在運(yùn)行:您希望管理器上運(yùn)行
的單個(gè)副本visualizer
,并且5個(gè)實(shí)例web
遍布整個(gè)群集。您可以通過(guò)運(yùn)行來(lái)驗(yàn)證此可視化效果docker stack ps <stack>
:docker-machine ssh myvm1“docker stack ps getstartedlab”可視化器是一個(gè)獨(dú)立的服務(wù),可以在任何包含它的應(yīng)用程序中運(yùn)行。它不依賴于其他任何東西?,F(xiàn)在讓我們創(chuàng)建一個(gè)服務(wù)呢 有一個(gè)依賴項(xiàng):Redis服務(wù)將提供一個(gè)訪問(wèn)者counter.Persist dataLet再次通過(guò)相同的工作流程來(lái)添加一個(gè)Redis數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)應(yīng)用程序數(shù)據(jù)。
保存這個(gè)新的docker-compose.yml
文件,它最終添加了Redis服務(wù)。一定要更換username/repo:tag
還有你的圖像細(xì)節(jié)。
版本:“3”服務(wù):web:#替換用戶名/repo:標(biāo)記與您的名稱和圖像詳細(xì)信息圖片:username/repo:標(biāo)簽部署:副本:5重新啟動(dòng)[醫(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圖書館有一個(gè)官方形象,并已被授予短圖片。image
名稱...redis
所以不username/repo
這里的記號(hào)。Redis端口6379已經(jīng)由Redis預(yù)先配置,以便從容器公開到主機(jī),在我們的撰寫文件中,我們將它從主機(jī)公開給全世界。因此,如果您愿意,您可以將任何節(jié)點(diǎn)的IP輸入到RedisDesktopManager中,并管理這個(gè)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)建一個(gè)“真相源”。沒(méi)有這個(gè),Redis就會(huì)將其數(shù)據(jù)存儲(chǔ)在/data
在容器的文件系統(tǒng)中,如果重新部署容器,它就會(huì)被清除掉。
這一真相來(lái)源有兩個(gè)組成部分:
- 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)建一個(gè)./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
再來(lái)一次。
$docker-Machine ssh myvm 1“塢庫(kù)部署-c??繋?kù)-come.yml getstartedlab”
檢查您的節(jié)點(diǎn)之一的網(wǎng)頁(yè)%28例如。http://192.168.99.101
%29,您將看到訪問(wèn)者計(jì)數(shù)器的結(jié)果,該計(jì)數(shù)器現(xiàn)在是實(shí)時(shí)的,并在Redis上存儲(chǔ)信息。
另外,檢查節(jié)點(diǎn)的IP地址上端口8080處的可視化器,您將看到redis
與web
和visualizer
服務(wù)。
關(guān)于第6部分
這是本頁(yè)所涵蓋內(nèi)容的終端記錄*
您了解到堆棧是相互關(guān)聯(lián)的服務(wù),所有這些服務(wù)都是協(xié)同運(yùn)行的,而自本教程第三部分以來(lái),您就一直使用堆棧。您了解到要向堆棧中添加更多服務(wù),請(qǐng)將它們插入撰寫文件中。最后,您了解到,通過(guò)使用位置約束和卷的組合,您可以為持久化數(shù)據(jù)創(chuàng)建一個(gè)永久的主頁(yè),這樣當(dāng)容器被拆卸和重新部署時(shí),應(yīng)用程序的數(shù)據(jù)就能存活下來(lái)。