1. 前言
本文中,基于Docker Compose实现服务滚动更新。
具体来说,webapp想要从v1.0更新到v2.0,更新过程中服务不能中断,如果v2.0有问题那么就停止更新并回退。
参考文档:
2. 滚动更新思路
1、增加一个新版本容器
2、验证新版本容器
3、删除老版本容器,增加新版本容器
3. docker-compose配置
3.1. docker-compose.yml
docker-compose.yml 定义如下:
1 | version: "3" |
3.2. 准备nginx配置
多个容器之间,通过nginx进行负载均衡,负载均衡基于 Docker’s embedded DNS
。
nginx.conf 定义如下:
1 | user nginx; |
4. 滚动更新操作
1、修改webapp版本
修改 docker-compose.yml ,webapp镜像改为 voidking/nginx:v2.0
2、使用新版本扩容出一个容器
1 | docker-compose up -d --scale webapp=3 --no-recreate |
3、验证新版本容器
4、删除老版本容器
1 | docker ps | grep "voidking/nginx:v1.0" | awk '{print $1}' | xargs docker rm -f |
5、扩容新版本容器
1 | docker-compose up -d --scale webapp=2 --no-recreate |
当容器数量比较多时,4和5可以进行改成删一个旧容器,加一个新容器,删一个旧容器,加一个新容器。。。
5. 自动化脚本实现
未完待续。。。