关于docker images批量备份其实是很简单的脚本,网上写的不少,有的写的比较复杂一点,自己从新写了一个。如有不对的地方,欢迎指正。
导出镜像
脚本如下:dockerImagesBackup.sh【批量导出docker镜像】
#!/bin/sh
# Date:
# Author:
# Desc:
# Batch backup docker local images.
# environment
_BAKDIR=/root/pkg/bak
_LOGDIR=/root/pkg/bak/logs
_LOGFILE=${_LOGDIR}/imagebackup.$(date +%s).lst
_LOGSNUM=30
# Determine whether the file directory exists
fileexist(){
[ ! -d ${_BAKDIR} ] && mkdir -p ${_BAKDIR}
[ ! -d ${_LOGDIR} ] && mkdir -p ${_LOGDIR}
}
imagebackup(){
_IMAGESLIST=$(docker images | awk 'NR>1{print $1":"$2}')
for imageslist in ${_IMAGESLIST}; do
# M:2021.12.31 sed -e 有多个"/"导致只替换了一个
_imagesfile=$(echo $imageslist | sed -e 's#/#_#g' -e 's#:#_#g')
/usr/bin/docker save ${imageslist} -o ${_BAKDIR}/${_imagesfile}.tar
echo "**$imageslist**.The backup is complete.Backup Time:$(date +%Y-%m-%d)" >> ${_LOGFILE} 2>&1
done
}
# main
main(){
fileexist
# Empty the directory before backing up.
# rm -rf ${_BAKDIR}/
imagebackup
# Delete the previous 30 days log
find ${_LOGFILE} -mtime +${_LOGSNUM} -exec rm -rf {} \;
}
main
导入镜像
脚本如下:dockerImagesLoad.sh【批量导入docker镜像】
#!/bin/bash
# Date:
# Author:
# Desc:
_path=$(ls ~/pkg/bak)
_imagepath=~/pkg/bak
for image in ${_path[@]}; do
docker load -i ${_imagepath}/$image
done