前言:
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊、網(wǎng)絡(luò)空間、營銷軟件、網(wǎng)站建設(shè)、青原網(wǎng)站維護(hù)、網(wǎng)站推廣。這篇博文是基于docker Swarm群集環(huán)境之上,延伸了Docker Swarm的功能。
博文大綱:
一、Docker Swarm網(wǎng)絡(luò)管理
二、Swarm的service管理及版本更新
這篇博文的環(huán)境還是基于上一篇博文中搭建的環(huán)境,具體可以參考博文:Docker Swarm群集配置實(shí)戰(zhàn)(1) ,在進(jìn)行接下來的操作之前,必須要保證訪問docker Swarm的web UI時,可以看到以下界面:
Swarm群集會產(chǎn)生兩種不同類型的流量:
在Swarm service中有三個重要的網(wǎng)絡(luò)概念:
查看docker01上面的默認(rèn)網(wǎng)絡(luò),如下(注意其SCOPE列,確認(rèn)其生效范圍):
除了Swarm群集默認(rèn)創(chuàng)建的兩個網(wǎng)絡(luò)以外,我們還可以自定義創(chuàng)建overlay網(wǎng)絡(luò),連接到此網(wǎng)絡(luò)的容器,即可互相通信,但是需要注意,除了在docker01這個manager上可以查看創(chuàng)建的overlay網(wǎng)絡(luò)外,其他節(jié)點(diǎn)在沒有加入此網(wǎng)絡(luò)前,執(zhí)行“docker network ls”命令是查看不到的。
[root@docker01 ~]# docker network create -d overlay --subnet 192.168.22.0/24 --gateway 192.168.22.1 --attachable my_net1
# 創(chuàng)建一個overlay網(wǎng)絡(luò),名字為my_net1;
# “--subnet”:指定其網(wǎng)段(可以不指定);“--gateway”:指定其網(wǎng)關(guān)(可以不指定);
# 但是在docker Swarm群集中創(chuàng)建overlay網(wǎng)絡(luò)時,必須添加“--attachable”選項(xiàng)
# 否則,其他節(jié)點(diǎn)的容器運(yùn)行時,無法使用此網(wǎng)絡(luò)
創(chuàng)建完成后,在其他docker節(jié)點(diǎn)上是查看不到這個新創(chuàng)建的overlay網(wǎng)絡(luò)的,但是,可以使用此網(wǎng)絡(luò)(在運(yùn)行容器時,直接指定即可,等容器運(yùn)行后,便可以查看到此網(wǎng)絡(luò)了)
測試剛剛創(chuàng)建的overlay網(wǎng)絡(luò),是否可用,分別在docker01、docker02上基于創(chuàng)建的overlay網(wǎng)絡(luò)運(yùn)行一個容器,然后進(jìn)行ping測試,確認(rèn)可以ping通:
#docker01主機(jī)上基于overlay網(wǎng)絡(luò)創(chuàng)建一個容器:
[root@docker01 ~]# docker run -tid --network my_net1 --name test1 busybox
#同docker01的操作,在docker02上也創(chuàng)建一個:
[root@docker02 ~]# docker run -tid --network my_net1 --name test2 busybox
在容器創(chuàng)建后,在docker02主機(jī)上,使用test2這個容器去ping容器test1,測試結(jié)果如下(由于是自定義網(wǎng)絡(luò),所以可以直接ping對端容器的容器名):
在第一篇的博文中測試過,如果Swarm群集中的manager下發(fā)一個service任務(wù),那么,下發(fā)的任務(wù)將隨機(jī)分布在群集中的docker服務(wù)器之上運(yùn)行, 如果說,由于需要將自己的生產(chǎn)環(huán)境配置的統(tǒng)一、規(guī)范一些,某一臺docker服務(wù)器,我就只運(yùn)行web服務(wù),另一臺docker主機(jī),我就只運(yùn)行PHP服務(wù),那么,怎么解決呢?
解決方案一:
[root@docker01 ~]# docker service create --replicas 3 --constraint node.hostname==docker03 --name test nginx
#在docker03主機(jī)上,基于nginx鏡像,運(yùn)行3個名為test的容器
上述命令的執(zhí)行后如下所示:
解決方案二:
[root@docker01 ~]# docker node update --label-add mem=max docker02
#以鍵值對的方式給docker02主機(jī)打上標(biāo)簽“mem=max”,等號兩邊的內(nèi)容是可以自定義的
[root@docker01 ~]# docker service create --name test01 --replicas 3 --constraint 'node.labels.mem==max' nginx
#基于nginx鏡像在標(biāo)簽為“mem==max”的主機(jī)上運(yùn)行3個名為test01的服務(wù)
[root@docker01 ~]# docker node inspect docker02 #可以執(zhí)行此命令查看dokcer02主機(jī)的標(biāo)簽
#標(biāo)簽相關(guān)的信息,在Spec{ }中
查看web UI界面進(jìn)行確認(rèn):
[root@docker01 aa]# cat html/index.html #準(zhǔn)備網(wǎng)頁文件
127.0.0.1
[root@docker01 aa]# cat Dockerfile
#基于nginx容器,將當(dāng)前目錄下的html目錄掛載為nginx的網(wǎng)頁根目錄
FROM nginx
ADD html /usr/share/nginx/html
[root@docker01 aa]# docker build -t 192.168.20.6:5000/testnginx:1.0 . #生成一個鏡像
[root@docker01 aa]# docker push 192.168.20.6:5000/testnginx:1.0
#將新生成的鏡像上傳至私有倉庫
[root@docker01 aa]# docker service create --name newnginx -p 80:80 --replicas 3 192.168.20.6:5000/testnginx:1.0
#基于上傳到私有倉庫的鏡像,運(yùn)行三個service,并映射到本地80端口
#當(dāng)上面的命令執(zhí)行成功后,只要docker主機(jī)上運(yùn)行著那個service,就可以通過它的80端口訪問到nginx服務(wù)
運(yùn)行后,web UI界面顯示如下:
可以看到,每個節(jié)點(diǎn)都運(yùn)行了那個service,也就是說,訪問哪個節(jié)點(diǎn)的80端口,都可以看到一樣的頁面,如下:
在docker01上查看service的詳細(xì)信息,如下:
[root@docker01 aa]# docker service ps newnginx #查看service的詳細(xì)信息
命令執(zhí)行的結(jié)果(需要注意的是其鏡像標(biāo)簽,也就是說注意其是基于哪個鏡像運(yùn)行的):
[root@docker01 aa]# docker tag nginx:latest 192.168.20.6:5000/testnginx:2.0
#準(zhǔn)備2.0版本的鏡像
[root@docker01 aa]# docker push 192.168.20.6:5000/testnginx:2.0
#上傳到私有倉庫
[root@docker01 aa]# docker service update --image 192.168.20.6:5000/testnginx:2.0 newnginx
#將newnginx服務(wù)的鏡像升級到2.0
[root@docker01 aa]# docker service ps newnginx #再次查看service的詳細(xì)信息
命令執(zhí)行的結(jié)果如下,發(fā)現(xiàn)基于1.0鏡像運(yùn)行的newnginx的service狀態(tài)已經(jīng)變成了shutdown,而基于2.0運(yùn)行的service變?yōu)榱藃unning,如下:
此時,若再次訪問其web頁面,就變?yōu)榱薾ginx的默認(rèn)首頁(因?yàn)槲覀兊?.0鏡像只是更改了下nginx鏡像的標(biāo)簽,并沒有修改其文件),如下:
其web UI界面可以查看到該service的最后一次升級的時間。
[root@docker01 aa]# docker tag nginx:latest 192.168.20.6:5000/testnginx:3.0
#準(zhǔn)備3.0版本的鏡像
[root@docker01 aa]# docker push 192.168.20.6:5000/testnginx:3.0
#上傳到私有倉庫
[root@docker01 ~]# docker service update --replicas 6 --image 192.168.20.6:5000/testnginx:3.0 --update-parallelism 3 --update-delay 1m newnginx
#上述選項(xiàng)的含義如下:
# “--replicas 6”:更新后的service數(shù)量為6個(原本是3個)
# “ --update-parallelism 2 ”:設(shè)置并行更新的副本數(shù)。
# “ --update-delay 1m ”:指定滾動更新的時間間隔為1分鐘
[root@docker01 ~]# docker service ps newnginx #自行對比newnginx服務(wù)的詳細(xì)信息
當(dāng)我們升級到新的版本后,發(fā)現(xiàn)新版本的鏡像有些問題,而不得不返回之前運(yùn)行的版本,那么可以執(zhí)行下面的操作:
[root@docker01 ~]# docker service update --rollback newnginx #將newnginx的service回滾到前一個版本
[root@docker01 ~]# docker service ps newnginx #自行查看
執(zhí)行回滾命令后,回滾過程如下:
回滾成功后,我這里就從原來的3.0變回了2.0,雖然在升級3.0的時候,指定的service數(shù)量是6個,但是之前只有3個,所以在執(zhí)行回滾操作后,service數(shù)量也將變回3個。
注意:當(dāng)我們執(zhí)行回滾操作的時候,默認(rèn)是回滾到上一次操作的版本,并且不可以連續(xù)回滾。
———————— 本文至此結(jié)束,感謝閱讀 ————————
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)站標(biāo)題:DockerSwarm群集配置實(shí)戰(zhàn)(2)-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://www.rwnh.cn/article28/csidcp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、搜索引擎優(yōu)化、小程序開發(fā)、定制網(wǎng)站、企業(yè)網(wǎng)站制作、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容