概述
由于服务每次重启更新都要改配置文件,手动输入多个命令执行,操作繁琐,为了提升工作效率,现在使用脚本进行升级,减少升级时间。
注意:由于脚本是基于docker-compose,所以脚本的目录与docker-compose.yml必须放在同一个目录下,否则无法使用。
脚本内容
#!/bin/bash
app_name="$1"
version="$2"
apps=(
blade-admin
blade-turbine
blade-zipkin
lecent-park
lecent-pay
blade-gateway
blade-auth
blade-log
blade-desk
blade-user
lecent-process
blade-system
blade-resource
lecent-battery
lecent-community
lecent-convenience
lecent-device
lecent-operate
lecent-cabinet
lecent-trash
lecent-door
lecent-mall
lecent-terminal
lecent-open-vidu
leliven-stand-mall
)
#用已有镜像重启
restart(){
docker-compose stop $app_name
echo '----------容器已停止------------'
echo yes | docker-compose rm $app_name
echo '----------容器已删除------------'
docker-compose up -d $app_name
echo '----------容器重启成功----------'
docker-compose logs -f $app_name
}
#获取新的镜像并重启
pull_image_restart(){
echo '------------开始停止容器---------'
docker-compose stop $app_name
echo '----------容器已停止------------'
echo '-----------开始删除容器----------'
echo yes | docker-compose rm $app_name
echo '-----------容器已删除-----------'
imageName=harbor.lecent.cn/blade/$app_name:$version;
docker rmi $imageName;
echo '-----------镜像已删除-----------';
echo '-------开始替换docker-compose.yml对应服务的版本号'
old_version=harbor.lecent.cn/blade/$app_name.*
new_version=harbor.lecent.cn/blade/$app_name:$version'"'
sed -i "s|$old_version|$new_version|g" docker-compose.yml
echo '-------------docker-compose.yml---版本替换成功'
echo '----------获取新的镜像并重启------------'
docker-compose up -d $app_name
echo '----------容器重启成功----------'
docker-compose logs -f $app_name
}
if [ ! -n "$1" ] ;then
echo "服务名不能为空,请传入服务名!"
exit
elif [ ! -n "$2" ] ;then
if [[ ! "${apps[@]}" =~ "${1}" ]]; then
echo "服务:[$1] 不存在,请检查后重试! "
exit
fi
echo "服务名:["${app_name}"],用已有镜像重启"
restart
else
if [[ ! "${apps[@]}" =~ "${1}" ]]; then
echo "服务:[$1] 不存在,请检查后重试! "
exit
fi
echo "服务名:["${app_name}"],版本号:["${version}"],使用版本["${version}"]重启"
pull_image_restart
fi
用法
脚本有两个参数,第一个参数为服务名,第二个参数为镜像版本号,其中服务名为必填项,版本号不是必填项,当版本号为空时,用本地镜像重启,当版本号不为空时,用指定的版本号重启。
不传参数时提示:
[root@node12 docker]# sh restart-compose.sh
服务名不能为空,请传入服务名!
当服务名不存在时提示:
[root@node12 docker]# sh restart-compose.sh 111
服务:[111] 不存在,请检查后重试!
重启某个服务:
[root@node12 docker]# sh restart-compose.sh lecent-park
服务名:[lecent-park],用已有镜像重启
以指定的版本重启服务:
[root@node12 docker]# sh up-d.sh lecent-park 1.0.6
服务名:[lecent-park],版本号:[1.0.6],使用版本[1.0.6]重启