Spring Cloud基于Docker进行打包部署5-容器的版本升级

版本升级分为两部分,一部分是数据库服务的升级,一部分是其他服务的升级。

1、当然,首先要判断是否需要升级,我没想到更好的办法,我是根据docker镜像的tag来判断的,tag可以作为版本号,通过比较以安装的镜像的tag和要安装的版本号比较即可得知是否需要升级。

(1)查询某个镜像的tag

declare tag=$(docker images | grep '镜像名' | awk {'print $2'})

docker images | grep '镜像名' | awk {'print $2'}的意思是,查找docker images列表中包含某个字符串的镜像,并返回列表的第二列即tag列。

root@greenvm-w14014v2:~# docker images
REPOSITORY                            TAG                 IMAGE ID            CREATED             SIZE
sebp/elk                              latest              ac9f80b1eba4        3 days ago          1.15GB
ubuntu                                16.04               c9d990395902        6 days ago          113MB
fluent/fluentd                        latest              19e4a20a16e2        7 days ago          38.2MB
tomcat                                latest              33e02377a00f        7 days ago          554MB
nginx                                 latest              b175e7467d66        8 days ago          109MB

(2)比较版本号大小

if [ -z "${tag}" ]; then
    #tag为空说明没安装docker,需要走安装流程.
elif [[ "${tag}" < "最新版本" ]]; then
    #走升级流程
fi

2、其他服务的升级比较简单,只需要销毁容器和镜像,重新构建即可。

(1)销毁容器,在docker-compose.yml所在目录下执行:

docker-compose down

(2)删除镜像

docker rmi -f $(docker images | grep athena | awk {'print $3'})

(3)重新构建镜像并运行容器,在docker-compose.yml所在目录下执行

docker-compose up -d

3、数据库的升级,我自己琢磨的,不清楚是不是有更好的方案。

步骤:

(1)将升级脚本拷贝到mysql容器中

(2)执行升级脚本

下面分别来说一下:

(1)将升级脚本拷贝到mysql容器中

docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径

在本例中:

docker cp upgrade.sql mysql-server:/usr/local/work
docker cp upgrade.sh mysql-server:/usr/local/work

(2)执行升级脚本

在docker-compose.yml文件目录下执行:

docker-compose exec 容器名 命令

在本例中:

docker-compose exec mysql-server bash /usr/local/work/upgrade.sh

upgrade.sh:

mysql -uroot -p$MYSQL_ROOT_PASSWORD << EOF
source /usr/local/work/upgrade.sql
EOF

ps:

由于mysql容器数据库的数据是放在宿主机文件系统的,所以mysql容器的销毁或创建甚至mysql镜像的重新构建都不会影响数据,容器重新运行后数据库依然能正常使用。

猜你喜欢

转载自blog.csdn.net/sinat_27143551/article/details/80080943