docker-compose如何单独更新某个服务
作者:simplefanC
这篇文章主要介绍了docker-compose如何单独更新某个服务问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
docker-compose单独更新某个服务
假设有一服务名为AAA(基于镜像AAA)
步骤
- 更新镜像
docker build -t AAA
- stop容器
docker-compose stop AAA
- 删除容器
docker-compose rm -f AAA
- 基于更新后的镜像重新启动容器
docker-compose up AAA -d
通过脚本更新docker-compose中的服务
由于服务每次重启更新都要改配置文件,手动输入多个命令执行,操作繁琐,为了提升工作效率,现在使用脚本进行升级,减少升级时间。
注意:
由于脚本是基于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]重启
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。