在前面的实验中,咱们部署了多个副本的服务,本节将讨论如何滚动更新每个副本。html
滚动更新下降了应用更新的风险,若是某个副本更新失败,整个更新将暂停,其余副本则能够继续提供服务。同时,在更新的过程当中,老是有副本在运行的,所以也保证了业务的连续性。node
下面咱们将部署三副本的服务,镜像使用 httpd:2.2.31,而后将其更新到 httpd:2.2.32。web
建立服务:docker
docker service create --name my_web --replicas=3 httpd:2.2.31
将 service 更新到 httpd:2.2.32:学习
docker service update --image httpd:2.2.32 my_web
--image
指定新的镜像。3d
Swarm 将按照以下步骤执行滚动更新:code
中止第一个副本。htm
调度任务,选择 worker node。blog
在 worker 上用新的镜像启动副本。部署
若是副本(容器)运行成功,继续更新下一个副本;若是失败,暂停整个更新过程。
docker service ps
查看更新结果。
三个副本都已经更新到 httpd:2.2.32。
默认配置下,Swarm 一次只更新一个副本,而且两个副本之间没有等待时间。咱们能够经过 --update-parallelism
设置并行更新的副本数目,经过 --update-delay
指定滚动更新的间隔时间。
好比执行以下命令:
docker service update --replicas 6 --update-parallelism 2 --update-delay 1m30s my_web
service 增长到六个副本,每次更新两个副本,间隔时间一分半钟。
docker service inspect
查看 service 的当前配置。
docker service ps
确保6个副本处于正常状态。
执行以下命令,将镜像更新到 httpd:2.4.16。
docker service update --image httpd:2.4.16 my_web
等待一会,查看更新的状态。
有4个副本已经更新到 httpd:2.4.16,从启动时间看,确实是分了两批进行,之间间隔90秒,每次更新两个副本。
Swarm 还有个方便的功能是回滚,若是更新后效果不理想,能够经过 --rollback
快速恢复到更新以前的状态。
service 全部副本都已经恢复到 httpd:2.2.32。
请注意,--rollback
只能回滚到上一次执行 docker service update
以前的状态,并不能无限制地回滚。
滚动更新就讨论到这里,下一节咱们学习 Docker Swarm 如何管理数据。
书籍:
1.《天天5分钟玩转Docker容器技术》
https://item.jd.com/16936307278.html
2.《天天5分钟玩转OpenStack》
https://item.jd.com/12086376.html