利用shell脚本解决区块链Fabric学习时下载Docker镜像失败和费时问题
在学习研究Fabric时第一步就是拉取Docker镜像,为避免在多机器下重复这种费时费力的工作。
解决办法
1. 使用Vmware的克隆功能或者快照功能
2. 导出Docker 相关镜像,需要的时候再导入,跳过下载过程
备注:centos,新建文件夹后,上传脚本或和镜像文件,执行导出或导入,导入导出比较占机器资源,大约十来分钟时间,和镜像个数与包大小有关
./dockerSaveAndLoad.sh
文末有分享链接
./dockerSaveAndLoad.sh save
./dockerSaveAndLoad.sh load
#!/bin/bash
#导出Fabric Docker 相关镜像
#导入当前文件夹下所有的镜像包
#
TYPE_SAVE_OR_LOAD="$1"
function eBlue(){
echo -e "\033[34;1m$1\033[0m"
}
function eRed(){
echo -e "\033[35;1m$1\033[0m"
}
function saveTxt(){
result=`docker images > images.txt`
}
function listDockerImgs(){
cat images.txt
}
function listDirImgFiles(){
for filename in `ls .`
do
if [[ $filename == *.tar ]] ; then
echo $filename
fi
done
imgSize=`du -sh`
eBlue "......................... 当前镜像总大小:${imgSize}....................................."
}
function saveDockerImgs(){
index=1
str=''
dockerFileTemp=''
dockerTag=''
for i in `cat images.txt`
do
if [ $index -lt 6 ];then
index=$[$index+1]
continue
fi
temp=$((index-6))
if test $((temp%7)) -eq 0;then
if [ -z "$str" ];then
str=${i}
else
str=${str}' '${i}
fi
if [[ $str != *SIZE* ]] ; then
echo ${str}
fi
if [[ $str == *fabric* ]] && [[ $str != *latest* ]] ; then
dockerFile=${dockerTag//\/_}
temp1=`echo $dockerFile | sed -n "s/:/_/p"`
temp2=`echo $temp1 | sed -n "s/\//_/p"`
dockerFile=$temp2'.tar'
#result=`docker save -o ./$dockerFile $dockerTag`
#eColor $result
eBlue "导出当前镜像:${dockerFile}";
dockerFileTemp=''
dockerTag=''
fi
echo ''
str=''
else
if [ -z "$str" ];then
str=${i}
else
str=${str}' '${i}
fi
indexTemp=$((temp%7))
if test $indexTemp -eq 1;then
dockerTag=''${i}
elif test $indexTemp -eq 2;then
dockerTag=${dockerTag}':'${i}
dockerFile=${dockerTag}
fi
fi
index=$[$index+1]
done
}
function loadTar2Docker(){
for filename in `ls .`
do
if [[ $filename == *.tar ]] ; then
#result=`docker load < $filename`
echo $result
fi
done
}
function printHelp () {
echo -e "Usage: ./dockerSaveAndLoad.sh <save|load> \nThe arguments must be in order."
}
eRed "=================================================================================================="
eBlue " ____ _____ _ ____ _____ "
eBlue "/ ___| |_ _| / \ | _ \ |_ _|"
eBlue "\___ \ | | / _ \ | |_) | | | "
eBlue " ___) | | | / ___ \ | _ < | | "
eBlue "|____/ |_| /_/ \_\ |_| \_\ |_| "
saveTxt
if [ "${TYPE_SAVE_OR_LOAD}" == "save" ]; then
eRed "==================当前DOCKER镜像列表=============================================================="
listDockerImgs
eRed "==================开始导出镜像===================================================================="
saveDockerImgs
eRed "=================================================================================================="
listDirImgFiles
elif [ "${TYPE_SAVE_OR_LOAD}" == "load" ]; then
eRed "==================当前DOCKER镜像列表=============================================================="
listDockerImgs
eRed "==================当前镜像文件列表================================================================"
listDirImgFiles
eRed "==================开始导入镜像===================================================================="
loadTar2Docker
eRed "==================当前DOCKER镜像列表=============================================================="
listDockerImgs
else
printHelp
exit 1
fi
eRed "=================================================================================================="
eBlue " _____ _ _ ____ "
eBlue "| ____| | \ | | | _ \ "
eBlue "| _| | \| | | | | | "
eBlue "| |___ | |\ | | |_| | "
eBlue "|_____| |_| \_| |____/ "
eRed "=================================================================================================="