增量更新docker镜像方法

#!/bin/sh
set -e

# 当前目录
CURRENT_DIR=$(
   cd "$(dirname "$0")"
   pwd
)
nowDate=$(date +'%Y%m%d%H%M')


# 旧版本镜像 中间空格分割
oldImages="kg_lj_208_algo_base:2023-10-13 "
# 新版本镜像 中间空格分割
newImages= "kg_lj_208_algo_knowledge_fusion:v0.2 "

# 导出包的名字
outPutName="update.tar.gz"

# 是否拉取镜像
isPullImages=false

# 拉取镜像
pullImages(){
	if [[ $isPullImages == "true" ]]; then
		echo "拉取旧版本镜像"
		for oldImage in ${oldImages[*]}
		do
			docker pull ${oldImage}
		done
		
		echo "拉取新版本镜像"
		for newImage in ${newImages[*]}
		do
			docker pull ${newImage}
		done
		
		echo "拉取镜像结束"
	fi
}

packageImage(){
	path=$1
	flag=$2

	images=()
	mkdir -p $path && cd $path
	if [[ $flag == "old" ]];then
		images=${oldImages}
	else
		images=${newImages}
	fi
	echo "打包 镜像${images[*]}" 
	docker save -o  $path/images.tar ${images} 
	tar -xf images.tar  -C . && ls -l |grep ^d  > /dev/null && rm -rf images.tar
}

checkFile(){
	oldPath=$1
	newPath=$2
	oldFileNams=$(ls $oldPath)
	newFileNams=$(ls $newPath)
	
	for newImage in $newFileNams
	do
		if [[ "${oldFileNams[@]}"  =~ "${newImage}" ]] && [[ "$newImage" != "repositories" ]]&& [[ "$newImage" != "manifest.json" ]] && [[ "$newImage" !=  *.json ]]
		then
			rm -rf $newPath/$newImage
			echo "相同 $newPath/$newImage"
		else
			echo "不相同 $newImage"
		fi
	done
	cd $newPath && tar -zvcf $CURRENT_DIR/$outPutName *
	# rm -rf $newPath
	# rm -rf $oldPath
}

main(){
	# 拉取镜像
	pullImages
	
	oldPath=$CURRENT_DIR/oldImages
	newPath=$CURRENT_DIR/newImages
	
	# 打包旧的
	packageImage $oldPath old
	# 打包新的
	packageImage $newPath new
	# 检查不同的,删除相同的,打包新的
	checkFile $oldPath $newPath
	
}

main


以上内容是bash脚本

需要修改的部分是

# 旧版本镜像 中间空格分割
oldImages="kg_lj_208_algo_base:2023-10-13 "
# 新版本镜像 中间空格分割
newImages= "kg_lj_208_algo_knowledge_fusion:v0.2 "

# 导出包的名字
outPutName="update.tar.gz"

在当另一个服务器有旧版本镜像时,执行docker load -i update.tar.gz即可生成新版本镜像

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值