docker镜像的批量备份和加载

随着微服务的不断发展,docker在微服务的部署中也占着不可缺少的角色,有这样一种场景,需要将服务器上的若干个最新的镜像打成tar.gz做一个备份或者异地部署。

  1. 针对此问题尝试写了如下shell脚本
    #vim saveImages.sh
    脚本内容如下:
#当前需要打包的版本号
version=xxx.0.0.1-RELEASE
#仓库
rep=defaultRep
#名称
name=defaultName
for i in "$@"
do
	#获取镜像仓库
	rep=$(docker images | grep $i | awk '{print $1}')
	echo -e "\033[0;30;42m ########## <<	镜像仓库为 $rep		>> ##########\033[0m\n"
	#获取容器名称(此处根据具体自己实现,本样例中 rep的值为 127.0.0.1:85/ideal-crm)
	#字符串截取
	name=${rep##*/}
	echo -e "\033[0;30;42m ########## <<	容器名称为 $name		>> ##########\033[0m\n"
    #修改镜像的tag为需要的version
    docker tag $i $rep:$version
    #根据修改好的镜像打包
	echo -e "\033[0;30;42m ########## <<	开始save镜像 $name-$version.tar.gz		>> ##########\033[0m\n"
    docker save $rep:$version | gzip > $name-$version.tar.gz
	echo -e "\033[0;30;42m ########## <<	镜像 $name-$version.tar.gz 打包成功		>> ##########\033[0m\n"
	#打包完成删除修改的镜像
	echo -e "\033[0;30;42m ########## <<	删除tag镜像 $rep$version		>> ##########\033[0m\n"
    docker rmi $rep:$version
    echo -e "\033[0;30;42m ########## <<	打包完成		>> ##########\033[0m\n"
done
  1. 脚本使用
// 脚本变为可执行
chmod u+x  saveImages.sh
// 查看当前系统中的镜像
docker images 
// 执行脚本
./saveImages.sh  imageId1 imageId2

执行脚本就会将对于的镜像打成tar.gz,后面的ImageId可以是多个。

  1. 加载备份的镜像
    将备份好的*.tar.gz,上传到Linux服务器,放在同一个文件夹下
    编写加载脚本
    vim loadImages.sh
    脚本内容如下
#load当前目录下所有*tar.gz镜像文件
path=$1
files=$(ls $path)
for filename in $files
do
 if [[ $filename == *.gz ]];then
 	echo -e "\033[0;30;42m ########## <<	开始load镜像 $filename		>> ##########\033[0m\n"
    gunzip -c $filename | docker load
    echo -e "\033[0;30;42m ########## <<	load镜像完成 $filename		>> ##########\033[0m\n"
 fi
done

使用脚本加载当前目录镜像文件
// 脚本变为可执行
chmod u+x loadImages.sh
// 执行
./loadImages.sh
// 查看镜像
docker images
以上就是一个镜像备份和加载,欢迎大家指正问题,互相学习。

你可能感兴趣的:(docker)