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查看節(jié)點
[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#暫時只有管理節(jié)點
1.2.添加work節(jié)點
1.2.1.在dm1上執(zhí)行:
[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上執(zhí)行:
[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節(jié)點上查看:
[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"?nginx2.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 :當前的副本數(shù)量
#IMAGE :鏡像名詞
#PORTS:端口
2.1.2.查看副本狀態(tài)
[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.cb1cv5dgqfrhrt2bdpk8elzhw2.2.提升副本,模擬負載均衡
2.2.1.在manager上執(zhí)行
[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?converged2.2.2.查看擴展后副本信息
[root@docker-2-120?~]#?docker?service?ls ID??????????????????NAME????????????????MODE????????????????REPLICAS????????????IMAGE???????????????PORTS v3ifjb3k2yye????????ckl_web?????????????replicated??????????6/6?????????????????nginx:latest查看容器運行節(jié)點:
[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#目前正好均勻的運行在三個節(jié)點上,每個節(jié)點2個容器運行
2.2.3.如果只希望容器運行在worker節(jié)點
[root@docker-2-120?~]#?docker?node?update?--availability?drain?docker-2-120? docker-2-1202.2.4.查看node節(jié)點狀態(tài)
[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.02.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節(jié)點運行的容器已經(jīng)被分攤到dm1和dm2上了
2.3.減少副本
2.3.1.減少副本數(shù)
[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?converged2.3.2.查看service
[root@docker-2-120?~]#?docker?service?ls ID??????????????????NAME????????????????MODE????????????????REPLICAS????????????IMAGE???????????????PORTS v3ifjb3k2yye????????ckl_web?????????????replicated??????????4/4?????????????????nginx:latest#副本數(shù)為4
2.3.3.查看容器運行節(jié)點
[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內(nèi)置failover策略可以實現(xiàn)故障轉移
模擬dm1宕機
3.1.查看node節(jié)點狀態(tài)
[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階段狀態(tài)為down3.2.查看service狀態(tài)
[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上了,故障節(jié)點狀態(tài)是shutdown
四、訪問docker service
4.1.在manager上部署service
[root@docker-2-120?~]#?docker?service?create?--name?"ckl_nginx"?--replicas=2?nginx4.2.service運行節(jié)點
[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?ago4.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.端口映射,外網(wǎng)訪問service
[root@docker-2-120?~]#?docker?service?update?--publish-add?8000:80?ckl_nginx查看service狀態(tài):
[root@docker-2-120?~]#?docker?service?ls ID??????????????????NAME????????????????MODE????????????????REPLICAS????????????IMAGE???????????????PORTS ggjfmz39jzj7????????ckl_nginx???????????replicated??????????2/2?????????????????nginx:latest????????*:8000->80/tcp外網(wǎng)訪問:
查看docker網(wǎng)絡:
[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創(chuàng)建的overlay網(wǎng)絡 cf895048ef39????????none????????????????null????????????????local五、service 之間通信
5.1.創(chuàng)建overlay網(wǎng)絡
[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??#創(chuàng)建的新網(wǎng)絡 aed4e7c4891e????????host????????????????host????????????????local 43z63iliw2ok????????ingress?????????????overlay?????????????swarm cf895048ef39????????none????????????????null????????????????local5.2.創(chuàng)建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?ago5.3.創(chuàng)建centos service
[root@docker-2-120?~]#?docker?service?create?--name?"ckl_cent"?--network?ckl_ov?centos?sleep?10000 xut1xxmsp42mw4thixvd4iqt2 #兩個service屬于同一overlay網(wǎng)絡查看service狀態(tài):
[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? ? ? ? ? ? ? ? ?
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節(jié)點上要預先存在的鏡像,下面測試以及預先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狀態(tài):
[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狀態(tài):
[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???????????????? #三個副本都已經(jīng)升級到1.2.26.2.3.查看更新配置
[root@docker-2-120?~]#?docker?service?inspect?ckl_web ....},"UpdateConfig":?{"Parallelism":?1,??#一次并行,更新副本數(shù)量"FailureAction":?"pause","Monitor":?5000000000,"MaxFailureRatio":?0,"Order":?"stop-first"}, ....6.2.4.設置并行更新副本的數(shù)量及更新延遲時間
--update-parallelism 設置并行更新副本的個數(shù)
--update-delay 設置更新間隔時長
模擬副本為6個,并行更新數(shù)量為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?converged6.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????#并行更新數(shù)量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:??vip6.2.7.更新回退
更新完畢后,如果想回退則只能回退到上一次更新版本使用參數(shù)--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.創(chuàng)建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八、使用label來控制service運行位置
要想控制service運行位置必須滿足:為node定義label;設置service運行的label node
8.1.設置dm1為test環(huán)境
[root@docker-2-120?~]#?docker?node?update?--label-add?env=test?dm1 dm1查看dm1詳情:
8.2.將dm2設置為prod環(huán)境
[root@docker-2-120?~]#?docker?node?update?--label-add?env=prod?dm2 dm2查看dm2詳情:
8.3.部署service到測試環(huán)境
[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?ago8.4.更新service,遷移到生產(chǎn)環(huán)境
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?converged8.4.2.更新constraint到生產(chǎn)環(huán)境
[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?converged8.4.3.查看服務狀態(tài)
8.4.4.constraint結合global mode
比如在生產(chǎn)環(huán)境中獲取某些文件內(nèi)容
[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#創(chuàng)建service及網(wǎng)絡
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? ? ?
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的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 树莓派通过snowboy唤醒引擎(Pyt
- 下一篇: 【Python机器学习实战】聚类算法——