Docker官方文檔翻譯5
堆棧(Stacks)
準(zhǔn)備工作
安裝docker 1.13及以上版本
安裝Docker Compose正如第三部分的準(zhǔn)備工作。
安裝Docker Machine正如第四部分的準(zhǔn)備工作。
閱讀第一部分的引導(dǎo)。
學(xué)習(xí)怎么在第二部分創(chuàng)建容器。
確保你已經(jīng)發(fā)布friendlyhello 鏡像,并推送到公共倉(cāng)庫(kù)。我們需要在這一部分用到這個(gè)鏡像。
確保你的鏡像能夠成為一個(gè)被部署的容器能正常工作。
從第三篇文章拷貝一份docker-compose.yml
確保第四部分的docker machine已經(jīng)正確安裝,通過docker-machine ls查看。
確保docker swarm正確安裝,并且運(yùn)行。通過執(zhí)行docker-machine ssh myvm1 “docker node ls 命令驗(yàn)證。
介紹
在第4部分中,你學(xué)習(xí)了如何設(shè)置一個(gè)swarm,這是一群運(yùn)行Docker的機(jī)器,并為其部署了一個(gè)應(yīng)用程序,應(yīng)用才能修包含的眾多容器在多臺(tái)機(jī)器上運(yùn)行。
在第5部分中,你將學(xué)習(xí)分布式應(yīng)用程序?qū)哟谓Y(jié)構(gòu)的頂部:堆棧。 堆棧是一組相互關(guān)聯(lián)的服務(wù),它們可以共享依賴關(guān)系,并且可以進(jìn)行協(xié)調(diào)和伸縮。 單個(gè)堆棧能夠定義和協(xié)調(diào)整個(gè)應(yīng)用程序的功能(盡管非常復(fù)雜的應(yīng)用程序可能需要使用多個(gè)堆棧)。
好消息是,從第3部分開始,在創(chuàng)建Compose文件并使用Docker堆棧部署時(shí),從技術(shù)上講,你一直在使用堆棧。 但是,這是在單個(gè)主機(jī)上運(yùn)行的單個(gè)服務(wù)堆棧,通常不會(huì)發(fā)生在生產(chǎn)環(huán)境中。 在這里,你可以把你學(xué)到的東西,使多個(gè)服務(wù)相互關(guān)聯(lián),并在多臺(tái)機(jī)器上運(yùn)行它們。
你做得很好,這就是主場(chǎng)!
添加一個(gè)新服務(wù)和重新部署
添加服務(wù)到docker-compose文件是非常簡(jiǎn)單的。首先,添加一個(gè)可視化界面的服務(wù),可以讓我們查看swarm正在調(diào)度的容器。
1.打開docker-compose文件,并將以下的內(nèi)容替換成文件的內(nèi)容。確保用你的鏡像信息替換username/repo:tag 的內(nèi)容。
version:?"3" services: ??web: ????#?replace?username/repo:tag?with?your?name?and?image?details ????image:?username/repo:tag ????deploy: ??????replicas:?5 ??????restart_policy: ????????condition:?on-failure ??????resources: ????????limits: ??????????cpus:?"0.1" ??????????memory:?50M ????ports: ??????-?"80:80" ????networks: ??????-?webnet ??visualizer: ????image:?dockersamples/visualizer:stable ????ports: ??????-?"8080:8080" ????volumes: ??????-?"/var/run/docker.sock:/var/run/docker.sock" ????deploy: ??????placement: ????????constraints:?[node.role?==?manager] ????networks: ??????-?webnet networks: ??webnet:
我們稍后會(huì)詳細(xì)討論lacement constraints 和volumes 。
2.確保你的shell被配置為與myvm1進(jìn)行通信(完整的例子在這如下)。
運(yùn)行docker-machine ls列出機(jī)器,并確保您已連接到myvm1,如旁邊的星號(hào)所示。
如果需要,重新運(yùn)行docker-machine env myvm1,然后運(yùn)行給定的命令來配置shell。
在Mac或Linux上,命令是:
eval?$(docker-machine?env?myvm1)
3.在manager上重新運(yùn)行docker stack deploy命令,并且需要更新的任何服務(wù)都會(huì)更新:
$?docker?stack?deploy?-c?docker-compose.yml?getstartedlab Updating?service?getstartedlab_web?(id:?angi1bf5e4to03qu9f93trnxm) Creating?service?getstartedlab_visualizer?(id:?l9mnwkeq2jiononb5ihz9u7a4)
查看可視化界面
你在Compose文件中看到,可視化工具在端口8080上運(yùn)行。通過運(yùn)行docker-machine ls來獲取其中一個(gè)節(jié)點(diǎn)的IP地址。 轉(zhuǎn)到8080端口的IP地址,您可以看到可視化器正在運(yùn)行:
可視化器的單個(gè)副本按照預(yù)期在manager上運(yùn)行,并且網(wǎng)絡(luò)的5個(gè)實(shí)例遍布整個(gè)群集。 你可以通過運(yùn)行docker stack ps來確認(rèn)此可視化:
docker?stack?ps?getstartedlab
可視化器是一個(gè)獨(dú)立的服務(wù),可以在包含它的任何應(yīng)用程序中運(yùn)行。 它不依賴于其他任何東西。現(xiàn)在讓我們創(chuàng)建一個(gè)具有依賴性的服務(wù):提供訪問者計(jì)數(shù)器的Redis服務(wù)。
數(shù)據(jù)持久化
讓我們?cè)俅瓮ㄟ^相同的工作流程來添加用于存儲(chǔ)應(yīng)用程序數(shù)據(jù)的Redis數(shù)據(jù)庫(kù)。
保存這份新的docker-compose.yml文件,它最后添加了一個(gè)redis服務(wù)。確保用的鏡像信息替換掉username/repo:tag的內(nèi)容。
version:?"3" services: ??web: ????#?replace?username/repo:tag?with?your?name?and?image?details ????image:?username/repo:tag ????deploy: ??????replicas:?5 ??????restart_policy: ????????condition:?on-failure ??????resources: ????????limits: ??????????cpus:?"0.1" ??????????memory:?50M ????ports: ??????-?"80:80" ????networks: ??????-?webnet ??visualizer: ????image:?dockersamples/visualizer:stable ????ports: ??????-?"8080:8080" ????volumes: ??????-?"/var/run/docker.sock:/var/run/docker.sock" ????deploy: ??????placement: ????????constraints:?[node.role?==?manager] ????networks: ??????-?webnet ??redis: ????image:?redis ????ports: ??????-?"6379:6379" ????volumes: ??????-?"/home/docker/data:/data" ????deploy: ??????placement: ????????constraints:?[node.role?==?manager] ????command:?redis-server?--appendonly?yes ????networks: ??????-?webnet networks: ??webnet:
Redis在Docker庫(kù)中有一個(gè)正式鏡像,并且已被授予redis的簡(jiǎn)短鏡像名稱,所以在這里沒有username/repo符號(hào)。 Redis端口6379已經(jīng)由Redis預(yù)先配置為從容器暴露給主機(jī),并且在我們的Compose文件中,我們將它從主機(jī)展示給所有容器,因此你可以實(shí)際輸入任何IP的IP 節(jié)點(diǎn)添加到Redis桌面管理器中并管理此Redis實(shí)例,如果愿意的話。
最重要的是,redis規(guī)范中有幾件事情使數(shù)據(jù)在這個(gè)堆棧的部署之間持久化:
redis總是在管理器上運(yùn)行,所以它總是使用相同的文件系統(tǒng)。
redis在主機(jī)文件系統(tǒng)中訪問任意目錄作為容器內(nèi)的/ data,這是Redis存儲(chǔ)數(shù)據(jù)的地方。
這就是在主機(jī)物理文件系統(tǒng)中為Redis數(shù)據(jù)創(chuàng)建“source of truth”。 如果沒有這個(gè),Redis會(huì)將其數(shù)據(jù)存儲(chǔ)在容器文件系統(tǒng)中的/ data中,如果該容器曾經(jīng)被重新部署,該數(shù)據(jù)將被清除。
真實(shí)的數(shù)據(jù)源(source of truth)由2部分組成:
放置在Redis服務(wù)上的 placement constraint,確保它始終使用相同的主機(jī)。
創(chuàng)建的volume ,允許容器作為/ data(位于Redis容器內(nèi))訪問./data(在主機(jī)上)。 在容器重復(fù)開啟和關(guān)閉時(shí),存儲(chǔ)在指定主機(jī)上的./data文件仍然存在,從而保持連續(xù)性。
2.在manager上創(chuàng)建一個(gè)./data目錄
docker-machine?ssh?myvm1?"mkdir?./data"
3.確保你的shell被配置為與myvm1進(jìn)行通信(完整的例子在這里)。
運(yùn)行docker-machine ls命令,列出所有的機(jī)器和確保你已經(jīng)連上myvm1。
如果需要,重新運(yùn)行docker-machine env myvm1命令,然后再運(yùn)行以下命令:
eval?$(docker-machine?env?myvm1)
運(yùn)行docker stack deploy命令
$?docker?stack?deploy?-c?docker-compose.yml?getstartedlab
5.運(yùn)行docker service ls命令,去驗(yàn)證這三個(gè)服務(wù)跟預(yù)期一樣正常運(yùn)行。
$?docker?service?ls ID??????????????????NAME???????????????????????MODE????????????????REPLICAS????????????IMAGE?????????????????????????????PORTS x7uij6xb4foj????????getstartedlab_redis????????replicated??????????1/1?????????????????redis:latest??????????????????????*:6379->6379/tcp n5rvhm52ykq7????????getstartedlab_visualizer???replicated??????????1/1?????????????????dockersamples/visualizer:stable???*:8080->8080/tcp mifd433bti1d????????getstartedlab_web??????????replicated??????????5/5?????????????????orangesnap/getstarted:latest????*:80->80/tcp
6.查看你的機(jī)器的一個(gè)節(jié)點(diǎn)的web頁面,比如http://192.168.99.101,并且查看訪客計(jì)數(shù)的結(jié)果,該計(jì)數(shù)現(xiàn)在已經(jīng)存在并將信息存儲(chǔ)在Redis上。
另外,請(qǐng)檢查任一節(jié)點(diǎn)IP地址的端口8080處的可視化工具,并注意查看隨Web和可視化工具一起運(yùn)行的redis服務(wù)。
https://mp.weixin.qq.com/s?__biz=MzAxNjk4ODE4OQ==&mid=2247484236&idx=1&sn=8e59e98150053a97c01946c68833a6e3&chksm=9bed223eac9aab28d20d3cf489e5c9a51f6acee8c3d1c6dbf664313c940ebbd140f7d6789f31&scene=21#wechat_redirect
機(jī)器翻譯 TCP/IP Docker
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。