日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

docker 实践(十一)docker swarm

發布時間:2024/3/12 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 docker 实践(十一)docker swarm 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、docker swarm部署

部署架構圖:

1.1.docker swarm初始化

1.1.docker swarm-manager初始化

[root@docker-2-120?~]#?docker?swarm?init?--advertise-addr?192.168.2.120 Swarm?initialized:?current?node?(shyex5019e84dup8kjwgy9esj)?is?now?a?manager. To?add?a?worker?to?this?swarm,?run?the?following?command:docker?swarm?join?--token?SWMTKN-1-2nioyk01u61y4xju7z13ngr70zglt5w0hj2bpfnn9l7d3lso34-c45yo9ivt30qmai0lp3zyb3ks?192.168.2.120:2377?? To?add?a?manager?to?this?swarm,?run?'docker?swarm?join-token?manager'?and?follow?the?instructions.

1.1.2.docker manager查看節點

[root@docker-2-120?~]#?docker?node?ls ID????????????????????????????HOSTNAME????????????STATUS??????????????AVAILABILITY????????MANAGER?STATUS??????ENGINE?VERSION shyex5019e84dup8kjwgy9esj?*???docker-2-120????????Ready???????????????Active??????????????Leader??????????????18.09.0

#暫時只有管理節點

1.2.添加work節點

1.2.1.在dm1上執行:

[root@dm1?/]#?docker?swarm?join?--token?SWMTKN-1-2nioyk01u61y4xju7z13ngr70zglt5w0hj2bpfnn9l7d3lso34-c45yo9ivt30qmai0lp3zyb3ks?192.168.2.120:2377 This?node?joined?a?swarm?as?a?worker.

1.2.2.在dm2上執行:

[root@dm2?~]#?docker?swarm?join?--token?SWMTKN-1-2nioyk01u61y4xju7z13ngr70zglt5w0hj2bpfnn9l7d3lso34-c45yo9ivt30qmai0lp3zyb3ks?192.168.2.120:2377 This?node?joined?a?swarm?as?a?worker.

1.2.3.在manger節點上查看:

[root@docker-2-120?~]#?docker?node?ls ID????????????????????????????HOSTNAME????????????STATUS??????????????AVAILABILITY????????MANAGER?STATUS??????ENGINE?VERSION 32ak19ny1nib5woq9wfij5cz4?????dm1?????????????????Ready???????????????Active??????????????????????????????????18.09.0 jhf5lcacfdun78t4tie3dt0zy?????dm2?????????????????Ready???????????????Active??????????????????????????????????18.09.0 shyex5019e84dup8kjwgy9esj?*???docker-2-120????????Ready???????????????Active??????????????Leader??????????????18.09.0

二、部署service

2.1.在manager上運行nginx鏡像的service

[root@docker-2-120?~]#?docker?service?create?--name?"ckl_web"?nginx


2.1.1.查看service

[root@docker-2-120?~]#?docker?service?ls ID??????????????????NAME????????????????MODE????????????????REPLICAS????????????IMAGE???????????????PORTS v3ifjb3k2yye????????ckl_web?????????????replicated??????????1/1?????????????????nginx:latest

#ID:serviceID

#NAME :名稱

#REPLICAS :當前的副本數量

#IMAGE :鏡像名詞

#PORTS:端口


2.1.2.查看副本狀態

[root@docker-2-120?~]#?docker?service?ps?ckl_web ID??????????????????NAME????????????????IMAGE???????????????NODE????????????????DESIRED?STATE???????CURRENT?STATE????????????ERROR???????????????PORTS cb1cv5dgqfrh????????ckl_web.1???????????nginx:latest????????docker-2-120????????Running?????????????Running?59?seconds?ago


查看容器運行:

[root@docker-2-120?~]#?docker?ps CONTAINER?ID????????IMAGE???????????????COMMAND??????????????????CREATED??????????????STATUS??????????????PORTS???????????????NAMES acb5a7377b4f????????nginx:latest????????"nginx?-g?'daemon?of…"???About?a?minute?ago???Up?About?a?minute???80/tcp??????????????ckl_web.1.cb1cv5dgqfrhrt2bdpk8elzhw


2.2.提升副本,模擬負載均衡

2.2.1.在manager上執行

[root@docker-2-120?~]#?docker?service?scale?ckl_web=6 ckl_web?scaled?to?6 overall?progress:?6?out?of?6?tasks? 1/6:?running???[==================================================>]? 2/6:?running???[==================================================>]? 3/6:?running???[==================================================>]? 4/6:?running???[==================================================>]? 5/6:?running???[==================================================>]? 6/6:?running???[==================================================>]? verify:?Service?converged


2.2.2.查看擴展后副本信息

[root@docker-2-120?~]#?docker?service?ls ID??????????????????NAME????????????????MODE????????????????REPLICAS????????????IMAGE???????????????PORTS v3ifjb3k2yye????????ckl_web?????????????replicated??????????6/6?????????????????nginx:latest

查看容器運行節點:

[root@docker-2-120?~]#?docker?service?ps?ckl_web ID??????????????????NAME????????????????IMAGE???????????????NODE????????????????DESIRED?STATE???????CURRENT?STATE????????????????ERROR???????????????PORTS cb1cv5dgqfrh????????ckl_web.1???????????nginx:latest????????docker-2-120????????Running?????????????Running?7?minutes?ago???????????????????????????? wbx0wbr9w8tq????????ckl_web.2???????????nginx:latest????????dm1?????????????????Running?????????????Running?about?a?minute?ago??????????????????????? mviu588mulo2????????ckl_web.3???????????nginx:latest????????dm2?????????????????Running?????????????Running?about?a?minute?ago??????????????????????? ltnuyjpbj4eo????????ckl_web.4???????????nginx:latest????????dm2?????????????????Running?????????????Running?about?a?minute?ago??????????????????????? lil6pq81fnaa????????ckl_web.5???????????nginx:latest????????docker-2-120????????Running?????????????Running?about?a?minute?ago??????????????????????? ap36bx8k6y65????????ckl_web.6???????????nginx:latest????????dm1?????????????????Running?????????????Running?about?a?minute?ago


#目前正好均勻的運行在三個節點上,每個節點2個容器運行

2.2.3.如果只希望容器運行在worker節點

[root@docker-2-120?~]#?docker?node?update?--availability?drain?docker-2-120? docker-2-120

2.2.4.查看node節點狀態

[root@docker-2-120?~]#?docker?node?ls ID????????????????????????????HOSTNAME????????????STATUS??????????????AVAILABILITY????????MANAGER?STATUS??????ENGINE?VERSION 32ak19ny1nib5woq9wfij5cz4?????dm1?????????????????Ready???????????????Active??????????????????????????????????18.09.0 jhf5lcacfdun78t4tie3dt0zy?????dm2?????????????????Ready???????????????Active??????????????????????????????????18.09.0 shyex5019e84dup8kjwgy9esj?*???docker-2-120????????Ready???????????????Drain???????????????Leader??????????????18.09.0

2.2.5.查看service運行

[root@docker-2-120?~]#?docker?service?ps?ckl_web???????????????????????????? ID??????????????????NAME????????????????IMAGE???????????????NODE????????????????DESIRED?STATE???????CURRENT?STATE????????????ERROR???????????????PORTS q5d9hbtzfszp????????ckl_web.1???????????nginx:latest????????dm1?????????????????Running?????????????Running?2?minutes?ago???????????????????????? cb1cv5dgqfrh?????????\_?ckl_web.1???????nginx:latest????????docker-2-120????????Shutdown????????????Shutdown?2?minutes?ago??????????????????????? wbx0wbr9w8tq????????ckl_web.2???????????nginx:latest????????dm1?????????????????Running?????????????Running?9?minutes?ago???????????????????????? mviu588mulo2????????ckl_web.3???????????nginx:latest????????dm2?????????????????Running?????????????Running?9?minutes?ago???????????????????????? ltnuyjpbj4eo????????ckl_web.4???????????nginx:latest????????dm2?????????????????Running?????????????Running?9?minutes?ago???????????????????????? ij9dt6fjjmhy????????ckl_web.5???????????nginx:latest????????dm2?????????????????Running?????????????Running?2?minutes?ago???????????????????????? lil6pq81fnaa?????????\_?ckl_web.5???????nginx:latest????????docker-2-120????????Shutdown????????????Shutdown?2?minutes?ago??????????????????????? ap36bx8k6y65????????ckl_web.6???????????nginx:latest????????dm1?????????????????Running?????????????Running?9?minutes?ago

#原來manager節點運行的容器已經被分攤到dm1和dm2上了

2.3.減少副本

2.3.1.減少副本數

[root@docker-2-120?~]#?docker?service?scale?ckl_web=4 ckl_web?scaled?to?4 overall?progress:?4?out?of?4?tasks? 1/4:?running???[==================================================>]? 2/4:??? 3/4:?running???[==================================================>]? 4/4:?running???[==================================================>]? verify:?Service?converged

2.3.2.查看service

[root@docker-2-120?~]#?docker?service?ls ID??????????????????NAME????????????????MODE????????????????REPLICAS????????????IMAGE???????????????PORTS v3ifjb3k2yye????????ckl_web?????????????replicated??????????4/4?????????????????nginx:latest

#副本數為4

2.3.3.查看容器運行節點

[root@docker-2-120?~]#?docker?service?ps?ckl_web ID??????????????????NAME????????????????IMAGE???????????????NODE????????????????DESIRED?STATE???????CURRENT?STATE????????????ERROR???????????????PORTS q5d9hbtzfszp????????ckl_web.1???????????nginx:latest????????dm1?????????????????Running?????????????Running?7?minutes?ago???????????????????????? cb1cv5dgqfrh?????????\_?ckl_web.1???????nginx:latest????????docker-2-120????????Shutdown????????????Shutdown?7?minutes?ago??????????????????????? wbx0wbr9w8tq????????ckl_web.2???????????nginx:latest????????dm1?????????????????Running?????????????Running?14?minutes?ago??????????????????????? mviu588mulo2????????ckl_web.3???????????nginx:latest????????dm2?????????????????Running?????????????Running?14?minutes?ago??????????????????????? ltnuyjpbj4eo????????ckl_web.4???????????nginx:latest????????dm2?????????????????Running?????????????Running?14?minutes?ago??????????????????????? lil6pq81fnaa????????ckl_web.5???????????nginx:latest????????docker-2-120????????Shutdown????????????Shutdown?7?minutes?ago

三、故障轉移

swarm內置failover策略可以實現故障轉移

模擬dm1宕機

3.1.查看node節點狀態

[root@docker-2-120?~]#?docker?node?ls ID????????????????????????????HOSTNAME????????????STATUS??????????????AVAILABILITY????????MANAGER?STATUS??????ENGINE?VERSION 32ak19ny1nib5woq9wfij5cz4?????dm1?????????????????Down????????????????Active??????????????????????????????????18.09.0 jhf5lcacfdun78t4tie3dt0zy?????dm2?????????????????Ready???????????????Active??????????????????????????????????18.09.0 shyex5019e84dup8kjwgy9esj?*???docker-2-120????????Ready???????????????Drain???????????????Leader??????????????18.09.0 #dm1階段狀態為down


3.2.查看service狀態

[root@docker-2-120?~]#?docker?service?ps?ckl_web ID??????????????????NAME????????????????IMAGE???????????????NODE????????????????DESIRED?STATE???????CURRENT?STATE?????????????ERROR???????????????PORTS rs3ntbl74en3????????ckl_web.1???????????nginx:latest????????dm2?????????????????Running?????????????Running?2?minutes?ago????????????????????????? q5d9hbtzfszp?????????\_?ckl_web.1???????nginx:latest????????dm1?????????????????Shutdown????????????Running?25?minutes?ago???????????????????????? cb1cv5dgqfrh?????????\_?ckl_web.1???????nginx:latest????????docker-2-120????????Shutdown????????????Shutdown?25?minutes?ago??????????????????????? kwctm7bg4jha????????ckl_web.2???????????nginx:latest????????dm2?????????????????Running?????????????Running?2?minutes?ago????????????????????????? wbx0wbr9w8tq?????????\_?ckl_web.2???????nginx:latest????????dm1?????????????????Shutdown????????????Running?33?minutes?ago???????????????????????? mviu588mulo2????????ckl_web.3???????????nginx:latest????????dm2?????????????????Running?????????????Running?32?minutes?ago???????????????????????? ltnuyjpbj4eo????????ckl_web.4???????????nginx:latest????????dm2?????????????????Running?????????????Running?32?minutes?ago???????????????????????? lil6pq81fnaa????????ckl_web.5???????????nginx:latest????????docker-2-120????????Shutdown????????????Shutdown?25?minutes?ago

#運行在dm1上的容器,已都轉移到dm2上了,故障節點狀態是shutdown


四、訪問docker service

4.1.在manager上部署service

[root@docker-2-120?~]#?docker?service?create?--name?"ckl_nginx"?--replicas=2?nginx


4.2.service運行節點

[root@docker-2-120?~]#?docker?service?ps?ckl_nginx ID??????????????????NAME????????????????IMAGE???????????????NODE????????????????DESIRED?STATE???????CURRENT?STATE????????????ERROR???????????????PORTS p28o2lobduog????????ckl_nginx.1?????????nginx:latest????????dm2?????????????????Running?????????????Running?29?seconds?ago??????????????????????? 38yanzwce36u????????ckl_nginx.2?????????nginx:latest????????dm1?????????????????Running?????????????Running?28?seconds?ago


4.3.在dm1查看容器

[root@dm1?~]#?docker?ps CONTAINER?ID????????IMAGE???????????????COMMAND??????????????????CREATED?????????????STATUS??????????????PORTS???????????????NAMES 6a835035f35f????????nginx:latest????????"nginx?-g?'daemon?of…"???51?seconds?ago??????Up?49?seconds???????80/tcp??????????????ckl_nginx.2.38yanzwce36uf007j0okvctus

查看容器并訪問:

[root@dm1?~]#?curl?http://10.8.95.2 <!DOCTYPE?html> <html> <head> <title>Welcome?to?nginx!</title> <style>body?{width:?35em;margin:?0?auto;font-family:?Tahoma,?Verdana,?Arial,?sans-serif;} </style> </head> <body> <h1>Welcome?to?nginx!</h1> <p>If?you?see?this?page,?the?nginx?web?server?is?successfully?installed?and working.?Further?configuration?is?required.</p> <p>For?online?documentation?and?support?please?refer?to <a?href="http://nginx.org/">nginx.org</a>.<br/> Commercial?support?is?available?at <a?href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank?you?for?using?nginx.</em></p> </body> </html>


4.4.端口映射,外網訪問service

[root@docker-2-120?~]#?docker?service?update?--publish-add?8000:80?ckl_nginx

查看service狀態:

[root@docker-2-120?~]#?docker?service?ls ID??????????????????NAME????????????????MODE????????????????REPLICAS????????????IMAGE???????????????PORTS ggjfmz39jzj7????????ckl_nginx???????????replicated??????????2/2?????????????????nginx:latest????????*:8000->80/tcp


[root@docker-2-120?~]#?docker?service?ps?ckl_nginx ID??????????????????NAME????????????????IMAGE???????????????NODE????????????????DESIRED?STATE???????CURRENT?STATE?????????????ERROR???????????????PORTS r84wybzu2zez????????ckl_nginx.1?????????nginx:latest????????dm2?????????????????Running?????????????Running?27?seconds?ago???????????????????????? p28o2lobduog?????????\_?ckl_nginx.1?????nginx:latest????????dm2?????????????????Shutdown????????????Shutdown?29?seconds?ago??????????????????????? t5xln1zllf3i????????ckl_nginx.2?????????nginx:latest????????dm1?????????????????Running?????????????Running?30?seconds?ago???????????????????????? 38yanzwce36u?????????\_?ckl_nginx.2?????nginx:latest????????dm1?????????????????Shutdown????????????Shutdown?32?seconds?ago


外網訪問:

查看docker網絡:

[root@docker-2-120?~]#?docker?network?ls NETWORK?ID??????????NAME????????????????DRIVER??????????????SCOPE 9a316505e6c8????????bridge??????????????bridge??????????????local bf0464ee4b94????????ckl_net?????????????bridge??????????????local 33a5e13e7f47????????ckl_net1????????????bridge??????????????local aed4e7c4891e????????host????????????????host????????????????local 43z63iliw2ok????????ingress?????????????overlay?????????????swarm??#swarm創建的overlay網絡 cf895048ef39????????none????????????????null????????????????local

五、service 之間通信

5.1.創建overlay網絡

[root@docker-2-120?~]#?docker?network?create?--driver?overlay?ckl_ov p6qmkf3jlbgescuwurwalu5me[root@docker-2-120?~]#?docker?network?ls NETWORK?ID??????????NAME????????????????DRIVER??????????????SCOPE 9a316505e6c8????????bridge??????????????bridge??????????????local bf0464ee4b94????????ckl_net?????????????bridge??????????????local 33a5e13e7f47????????ckl_net1????????????bridge??????????????local p6qmkf3jlbge????????ckl_ov??????????????overlay?????????????swarm??#創建的新網絡 aed4e7c4891e????????host????????????????host????????????????local 43z63iliw2ok????????ingress?????????????overlay?????????????swarm cf895048ef39????????none????????????????null????????????????local

5.2.創建web service

[root@docker-2-120?~]#?docker?service?create?--name?"ckl_web"?--replicas=3?--network?ckl_ov?nginx anlm52hs5p12efn5wras7h65v[root@docker-2-120?~]#?docker?service?ps?ckl_web ID??????????????????NAME????????????????IMAGE???????????????NODE????????????????DESIRED?STATE???????CURRENT?STATE????????????????ERROR???????????????PORTS tiqpv81m6icb????????ckl_web.1???????????nginx:latest????????dm2?????????????????Running?????????????Running?about?a?minute?ago??????????????????????? tl3i10w296kk????????ckl_web.2???????????nginx:latest????????dm1?????????????????Running?????????????Running?about?a?minute?ago??????????????????????? zdxxqy8zwnvt????????ckl_web.3???????????nginx:latest????????dm2?????????????????Running?????????????Running?about?a?minute?ago

5.3.創建centos service

[root@docker-2-120?~]#?docker?service?create?--name?"ckl_cent"?--network?ckl_ov?centos?sleep?10000 xut1xxmsp42mw4thixvd4iqt2 #兩個service屬于同一overlay網絡


查看service狀態:

[root@docker-2-120?~]#?docker?service?ls ID??????????????????NAME????????????????MODE????????????????REPLICAS????????????IMAGE???????????????PORTS xut1xxmsp42m????????ckl_cent????????????replicated??????????1/1?????????????????centos:latest??????? anlm52hs5p12????????ckl_web?????????????replicated??????????3/3?????????????????nginx:latest


[root@docker-2-120?~]#?docker?service?ps?ckl_cent ID??????????????????NAME????????????????IMAGE???????????????NODE????????????????DESIRED?STATE???????CURRENT?STATE????????????ERROR???????????????PORTS fzs6ejkhangm????????ckl_cent.1??????????centos:latest???????dm1?????????????????Running?????????????Running?59?seconds?ago

? ? ? ? ? ? ? ? ?

5.4.在dm1上測試連通

[root@dm1?~]#?docker?ps CONTAINER?ID????????IMAGE???????????????COMMAND??????????????????CREATED??????????????STATUS??????????????PORTS???????????????NAMES 710f6b55400d????????centos:latest???????"sleep?10000"????????????About?a?minute?ago???Up?About?a?minute???????????????????????ckl_cent.1.fzs6ejkhangm3r0eh8v46zljx 5f0c2ba01f88????????nginx:latest????????"nginx?-g?'daemon?of…"???About?an?hour?ago????Up?About?an?hour????80/tcp??????????????ckl_web.2.tl3i10w296kks0qnh0ri8i0i4[root@dm1?~]#?docker?exec?-it?710f6b55400d?/bin/bash [root@710f6b55400d?/]#? [root@710f6b55400d?/]#? [root@710f6b55400d?/]#?ping?-c3?ckl_web PING?ckl_web?(10.0.0.2)?56(84)?bytes?of?data. 64?bytes?from?10.0.0.2?(10.0.0.2):?icmp_seq=1?ttl=64?time=0.122?ms 64?bytes?from?10.0.0.2?(10.0.0.2):?icmp_seq=2?ttl=64?time=0.168?ms 64?bytes?from?10.0.0.2?(10.0.0.2):?icmp_seq=3?ttl=64?time=0.120?ms ---?ckl_web?ping?statistics?--- 3?packets?transmitted,?3?received,?0%?packet?loss,?time?2002ms rtt?min/avg/max/mdev?=?0.120/0.136/0.168/0.025?ms

#10.0.0.2是service 的VIP

在dm1上查看ip:

[root@dm1?~]#?docker?inspect?5f0c2ba01f88?|?grep?IPAddress?"SecondaryIPAddresses":?null,"IPAddress":?"","IPAddress":?"10.0.0.4",

在dm2上查看ip:

[root@dm2?~]#?docker?inspect?`docker?ps?|?grep?ckl_web?|?awk?'{print?$1}'`?|?grep?IPAddress"SecondaryIPAddresses":?null,"IPAddress":?"","IPAddress":?"10.0.0.5","SecondaryIPAddresses":?null,"IPAddress":?"","IPAddress":?"10.0.0.3",


#對于ckl_cent只需要知道webservice 的名詞就可以訪問,而不需要知道serviceip

六、swarm 升級副本

6.1.查看當前服務

[root@docker-2-120?~]#?docker?service?ls ID??????????????????NAME????????????????MODE????????????????REPLICAS????????????IMAGE???????????????PORTS xut1xxmsp42m????????ckl_cent????????????replicated??????????1/1?????????????????centos:latest??????? anlm52hs5p12????????ckl_web?????????????replicated??????????3/3?????????????????nginx:latest[root@docker-2-120?~]#?docker?service?ps?ckl_web ID??????????????????NAME????????????????IMAGE???????????????NODE????????????????DESIRED?STATE???????CURRENT?STATE??????????ERROR???????????????PORTS tiqpv81m6icb????????ckl_web.1???????????nginx:latest????????dm2?????????????????Running?????????????Running?16?hours?ago??????????????????????? tl3i10w296kk????????ckl_web.2???????????nginx:latest????????dm1?????????????????Running?????????????Running?16?hours?ago??????????????????????? zdxxqy8zwnvt????????ckl_web.3???????????nginx:latest????????dm2?????????????????Running?????????????Running?16?hours?ago

?

6.2.升級副本

部署service,在worker節點上要預先存在的鏡像,下面測試以及預先pull過

6.2.1.部署service服務

[root@docker-2-120?~]#?docker?service?create?--name?"ckl_web"?--replicas=3?nginx:1.2.1 image?nginx:1.2.1?could?not?be?accessed?on?a?registry?to?record its?digest.?Each?node?will?access?nginx:1.2.1?independently, possibly?leading?to?different?nodes?running?different versions?of?the?image. vnwqr4prkgmqtrpagp3tu9c4n overall?progress:?3?out?of?3?tasks? 1/3:?running???[==================================================>]? 2/3:?running???[==================================================>]? 3/3:?running???[==================================================>]? verify:?Service?converged

查看service狀態:

[root@docker-2-120?~]#?docker?service?ls ID??????????????????NAME????????????????MODE????????????????REPLICAS????????????IMAGE???????????????PORTS xut1xxmsp42m????????ckl_cent????????????replicated??????????1/1?????????????????centos:latest??????? vnwqr4prkgmq????????ckl_web?????????????replicated??????????3/3?????????????????nginx:1.2.1[root@docker-2-120?~]#?docker?service?ps?ckl_web ID??????????????????NAME????????????????IMAGE???????????????NODE????????????????DESIRED?STATE???????CURRENT?STATE???????????ERROR???????????????PORTS vma7lxxn29gw????????ckl_web.1???????????nginx:1.2.1?????????dm2?????????????????Running?????????????Running?2?minutes?ago??????????????????????? xiubyfckzete????????ckl_web.2???????????nginx:1.2.1?????????dm2?????????????????Running?????????????Running?2?minutes?ago??????????????????????? gmysmkahj6bz????????ckl_web.3???????????nginx:1.2.1?????????dm1?????????????????Running?????????????Running?2?minutes?ago

? ? ?

6.2.2.將service更新到1.2.2

[root@docker-2-120?~]#? [root@docker-2-120?~]#?docker?service?update?--image?nginx:1.2.2?ckl_web image?nginx:1.2.2?could?not?be?accessed?on?a?registry?to?record its?digest.?Each?node?will?access?nginx:1.2.2?independently, possibly?leading?to?different?nodes?running?different versions?of?the?image. ckl_web overall?progress:?3?out?of?3?tasks? 1/3:?running???[==================================================>]? 2/3:?running???[==================================================>]? 3/3:?running???[==================================================>]? verify:?Service?converged

查看service狀態:

[root@docker-2-120?~]#?docker?service?ps?ckl_web ID??????????????????NAME????????????????IMAGE???????????????NODE????????????????DESIRED?STATE???????CURRENT?STATE?????????????ERROR???????????????PORTS s9b3pzrzvhgj????????ckl_web.1???????????nginx:1.2.2?????????dm2?????????????????Running?????????????Running?15?seconds?ago???????????????????????? vma7lxxn29gw?????????\_?ckl_web.1???????nginx:1.2.1?????????dm2?????????????????Shutdown????????????Shutdown?16?seconds?ago??????????????????????? r1cp4b4c2yqb????????ckl_web.2???????????nginx:1.2.2?????????dm2?????????????????Running?????????????Running?11?seconds?ago???????????????????????? xiubyfckzete?????????\_?ckl_web.2???????nginx:1.2.1?????????dm2?????????????????Shutdown????????????Shutdown?13?seconds?ago??????????????????????? t21saofxe7ai????????ckl_web.3???????????nginx:1.2.2?????????dm1?????????????????Running?????????????Running?18?seconds?ago???????????????????????? gmysmkahj6bz?????????\_?ckl_web.3???????nginx:1.2.1?????????dm1?????????????????Shutdown????????????Shutdown?20?seconds?ago???????????????? #三個副本都已經升級到1.2.2

6.2.3.查看更新配置

[root@docker-2-120?~]#?docker?service?inspect?ckl_web ....},"UpdateConfig":?{"Parallelism":?1,??#一次并行,更新副本數量"FailureAction":?"pause","Monitor":?5000000000,"MaxFailureRatio":?0,"Order":?"stop-first"}, ....

6.2.4.設置并行更新副本的數量及更新延遲時間

--update-parallelism 設置并行更新副本的個數

--update-delay 設置更新間隔時長


模擬副本為6個,并行更新數量為2,延遲為50s

[root@docker-2-120?~]#?docker?service?update?--replicas=6?--update-parallelism?2?--update-delay=30s?--image?nginx:2.2.1?ckl_web? image?nginx:2.2.1?could?not?be?accessed?on?a?registry?to?record its?digest.?Each?node?will?access?nginx:2.2.1?independently, possibly?leading?to?different?nodes?running?different versions?of?the?image. ckl_web overall?progress:?6?out?of?6?tasks? 1/6:?running???[==================================================>]? 2/6:?running???[==================================================>]? 3/6:?running???[==================================================>]? 4/6:?running???[==================================================>]? 5/6:?running???[==================================================>]? 6/6:?running???[==================================================>]? verify:?Service?converged

6.2.5.查看更新結果

6.2.6.查看當前service配置

[root@docker-2-120?~]#?docker?service?inspect?--pretty?ckl_web ID:?????????????mrntpv6h7nv1cm08rt3j4she4 Name:???????????ckl_web Service?Mode:???ReplicatedReplicas:??????6 UpdateStatus:State:?????????completedStarted:???????4?minutes?agoCompleted:?????3?minutes?agoMessage:???????update?completed Placement: UpdateConfig:Parallelism:???2????#并行更新數量Delay:?????????30s??#更新時間間隔On?failure:????pauseMonitoring?Period:?5sMax?failure?ratio:?0Update?order:??????stop-first RollbackConfig:Parallelism:???1On?failure:????pauseMonitoring?Period:?5sMax?failure?ratio:?0Rollback?order:????stop-first ContainerSpec:Image:?????????nginx:2.2.1Init:??????????false Resources: Endpoint?Mode:??vip

6.2.7.更新回退

更新完畢后,如果想回退則只能回退到上一次更新版本使用參數--rollback

[root@docker-2-120?~]#?docker?service?update?--rollback?ckl_web ckl_web rollback:?manually?requested?rollback? overall?progress:?rolling?back?update:?3?out?of?3?tasks? 1/3:?running???[>??????????????????????????????????????????????????]? 2/3:?running???[>??????????????????????????????????????????????????]? 3/3:?running???[>??????????????????????????????????????????????????]? verify:?Service?converged

查看回退結果:

運行了三個副本,版本為1.2.2

七、設置service mode

service 除了replicated mode還有global mode,global mode運行每個host只能運行一個副本

7.1.創建service指定mode

[root@docker-2-120?~]#?docker?service?create?--mode?global?--name?"ckl_http"?httpd 29bwhe6v2nltogg059svx6u3j overall?progress:?2?out?of?2?tasks? 32ak19ny1nib:?running???[==================================================>]? jhf5lcacfdun:?running???[==================================================>]? verify:?Service?converged


[root@docker-2-120?~]#?docker?service?inspect?ckl_http?--pretty? ID:?????????????29bwhe6v2nltogg059svx6u3j Name:???????????ckl_http Service?Mode:???Global??#mode Placement: UpdateConfig:Parallelism:???1On?failure:????pauseMonitoring?Period:?5sMax?failure?ratio:?0Update?order:??????stop-first RollbackConfig:Parallelism:???1On?failure:????pauseMonitoring?Period:?5sMax?failure?ratio:?0Rollback?order:????stop-first ContainerSpec:Image:?????????httpd:latest@sha256:1a25dda4141b143ca018490fb4f64ce9aa8acb16c2660a7aa395db9fe4ae1793Init:??????????false Resources: Endpoint?Mode:??vip

八、使用label來控制service運行位置

要想控制service運行位置必須滿足:為node定義label;設置service運行的label node

8.1.設置dm1為test環境

[root@docker-2-120?~]#?docker?node?update?--label-add?env=test?dm1 dm1

查看dm1詳情:

8.2.將dm2設置為prod環境

[root@docker-2-120?~]#?docker?node?update?--label-add?env=prod?dm2 dm2

查看dm2詳情:

8.3.部署service到測試環境

[root@docker-2-120?~]#?docker?service?create?--constraint?node.labels.env==test?--replicas?3?--name?"ckl_test_web"?--publish?8000:80?nginx uoirr9a9no2lbuozo9qajj7gr overall?progress:?3?out?of?3?tasks? 1/3:?running???[==================================================>]? 2/3:?running???[==================================================>]? 3/3:?running???[==================================================>]? verify:?Service?converged[root@docker-2-120?~]#?docker?service?ps?ckl_test_web ID??????????????????NAME????????????????IMAGE???????????????NODE????????????????DESIRED?STATE???????CURRENT?STATE????????????ERROR???????????????PORTS xwd5kcug0fxg????????ckl_test_web.1??????nginx:latest????????dm1?????????????????Running?????????????Running?40?seconds?ago??????????????????????? 6w4rbz13ls2w????????ckl_test_web.2??????nginx:latest????????dm1?????????????????Running?????????????Running?40?seconds?ago??????????????????????? mkmglm5eroa6????????ckl_test_web.3??????nginx:latest????????dm1?????????????????Running?????????????Running?40?seconds?ago

8.4.更新service,遷移到生產環境

8.4.1.刪除原來的constraint

[root@docker-2-120?~]#?docker?service?update?--constraint-rm?node.labels.env==test?ckl_test_web ckl_test_web overall?progress:?3?out?of?3?tasks? 1/3:?running???[==================================================>]? 2/3:?running???[==================================================>]? 3/3:?running???[==================================================>]? verify:?Service?converged

8.4.2.更新constraint到生產環境

[root@docker-2-120?~]#?docker?service?update?--constraint-add?node.labels.env==prod?ckl_test_web ckl_test_web overall?progress:?3?out?of?3?tasks? 1/3:?running???[==================================================>]? 2/3:?running???[==================================================>]? 3/3:?running???[==================================================>]? verify:?Service?converged

8.4.3.查看服務狀態

8.4.4.constraint結合global mode

比如在生產環境中獲取某些文件內容

[root@docker-2-120?~]#?docker?service?create?--mode?global?--constraint?node.labels.env==prod?--name?"ckl_pro_http"?httpd gc5wse0q9q7exqz6yqky2mdiz overall?progress:?1?out?of?1?tasks? jhf5lcacfdun:?running???[==================================================>]? verify:?Service?converged

九、部署stack

stack可以將所有的應用部署寫在一個文件里,像管理代碼一樣,確保文件正確,就能不順利部署,從而省去收工的繁瑣及易出錯的場景。

9.1.模擬部署nginx,文件如下:

#?vim?ckl_ng.yml? version:?"3.2" services:web:image:?nginx:alpineports:-?"80:80"volumes:-?type:?volumesource:?mydatatarget:?/datavolume:nocopy:?true networks:webnet: volumes:

? mydata:

??

部署stack

[root@docker-2-120?~]#?docker?stack?deploy?-c?ckl_ng.yml?cklstack??? Creating?network?cklstack_default Creating?service?cklstack_web

#創建service及網絡


9.2.查看stack service

[root@docker-2-120?~]#?docker?stack?services?cklstack? ID??????????????????NAME????????????????MODE????????????????REPLICAS????????????IMAGE???????????????PORTS lzjsqs9o13pi????????cklstack_web????????replicated??????????1/1?????????????????nginx:alpine????????*:80->80/tcp


[root@docker-2-120?~]#?docker?stack?ps?cklstack? ID??????????????????NAME????????????????IMAGE???????????????NODE????????????????DESIRED?STATE???????CURRENT?STATE????????????ERROR???????????????PORTS 6mvt30fjpfxe????????cklstack_web.1??????nginx:alpine????????dm1?????????????????Running?????????????Running?30?seconds?ago

? ? ?


9.3.更新stack某些屬性,這里模擬更新端口

[root@docker-2-120?~]#?cat?ckl_ng.yml? version:?"3.2" services:web:image:?nginx:alpineports:-?"88:80"volumes:-?type:?volumesource:?mydatatarget:?/datavolume:nocopy:?true networks:webnet: volumes:mydata:

??

9.4.查看修改后的service

[root@docker-2-120?~]#?docker?stack?services?cklstack? ID??????????????????NAME????????????????MODE????????????????REPLICAS????????????IMAGE???????????????PORTS lzjsqs9o13pi????????cklstack_web????????replicated??????????1/1?????????????????nginx:alpine????????*:88->80/tcp

參考:https://docs.docker.com/engine/reference/commandline/service_create/#create-a-service-with-a-rolling-update-policy

轉載于:https://blog.51cto.com/ckl893/2335395

總結

以上是生活随笔為你收集整理的docker 实践(十一)docker swarm的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。