serive更新其实并不是简单的更新,在swarm模式下的service都是在运行的,正在运行的进行更新,swarm是生产环境,我们不想因为更新中断咱们的业务,想的是不影响正常的业务开展。在现实生产环境进行不宕机的更新远比现在咱们这种要复杂的多的多,咱们这次演示可能稍微简单,只是让大家明白一个思路。
源码:https://github.com/limingios/docker/tree/master/No.5/labs/wordpress
创建service
- 必须创建overlay的network
sudo docker network create -d overlay demo
- 创建servie
先创建一个service,从hub中拉取1.0版本,然后扩展service里面的容器数量为2,通过shell脚本的方式访问容器返回结果,然后将拉取1.0的版本升级为2.0版本,查看shell访问的返回是否中断
- 拉取1.0版本
docker service create --name web -p 8080:5000 --network demo xiaopeng163/python-flask-demo:1.0
docker service ls
docker service ps web
- 扩展容器数量
docker service scale web=2
docker service ls
docker service ps web
- 编写shell脚本一直访问
sh -c "while true;do curl 127.0.0.1:8080&&sleep 1;done"
- 更新为2.0
中间没有发生中断操作,直接升级成了2.0
docker service update --image xiaopeng163/python-flask-demo:2.0 web
#1.0已经shutdown了,启动了2.0
docker service ps web
- 更新为端口
端口更新可能存在业务中断的情况
docker service update --publish-rm 8080:5000 --publish-add 8088:5000 web
docker service ps web
docker service web
![](https://upload-images.jianshu.io/upload_images/11223715-6fade88e179915be.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![(https://upload-images.jianshu.io/upload_images/11223715-27d2f7fc53484ed0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![](https://upload-images.jianshu.io/upload_images/11223715-930fcf5a94462a8b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) PS:stack 更新 就不给大家演示了,其实跟这个类似的操作命令大同小异。