Skip to content

Latest commit

 

History

History
104 lines (84 loc) · 2.88 KB

基础镜像更新脚本及其使用.md

File metadata and controls

104 lines (84 loc) · 2.88 KB

基础镜像更新脚本

参考本目录下的脚本文件 getbasediff.sh 和 updatebase.sh

  1. 本地开发机器上: SOURCEIMG=$1 SOURCETAG=$2 TARGETIMG=$3 TARGETTAG=$4 OVERLAYDIR=/var/lib/docker/overlay2

1.1 准备

#安装jq yum install -y jq #拉取镜像到本地 docker pull $SOURCEIMG:$SOURCETAG docker pull $TARGETIMG:$TARGETTAG

1.2 找源基础镜像的最上层目录UpperDir

UpperDir=docker inspect $SOURCEIMG:$SOURCETAG |jq .[0].GraphDriver.Data.UpperDir |sed 's/\"//g'

1.3 找目标镜像中在源镜像UpperDir之上的目录/diff(如果没有取目标镜像所有目录/diff)按顺序由低到高排序

declare -a arr1 SS=docker inspect $TARGETIMG:$TARGETTAG |jq .[0].GraphDriver.Data.LowerDir |sed 's/\"//g' arr=(${SS//:/ }) len=${#arr[*]} find=0 j=0 for ((i=len-1;i>=0;i--)) do if [ $find -eq 0 ];then if [ ${arr[i]} = $UpperDir ];then find=1 fi else arr1[$j]=${arr[i]} ((j++)) fi done if [ $find -eq 0 ];then j=0 for ((i=len-1;i>=0;i--)) do arr1[$j]=${arr[i]} ((j++)) done fi newupperdir=docker inspect $TARGETIMG:$TARGETTAG |jq .[0].GraphDriver.Data.UpperDir |sed 's/\"//g' arr1[$j]=$newupperdir

1.4 将1.2中所有目录内容依次写入“overlay2/tmp/base-目标镜像版本号”中,逐层覆盖

TMPDIR=$OVERLAYDIR/tmp/BASE-$TARGETTAG/diff mkdir -p $TMPDIR len1=${#arr1[]} for ((i=len1-1;i>=0;i--)) do \cp -af ${arr1[i]}/ $TMPDIR/ >> $TMPDIR/../log.log done

1.5 将/tmp/BASE-$TARGETTAG/diff下的内容打包

cd $TMPDIR/.. tar -cvzf BASE-$TARGETTAG-diff.tar.gz ./diff

  1. 对所有生产节点执行:(需要安装jq)

OVERLAYDIR=/mnt/disk01/docker/overlay2 SOURCEIMG=$1 SOURCETAG=$2 TARGETIMG=$3 TARGETTAG=$4

2.1 将变更文件包BASE-$TARGETTAG-diff.tar.gz上传到该节点的$OVERLAYDIR/tmp/下

2.2 查找要更新的基础镜像最上层目录UpperDir(备份源最上层目录,可供恢复)

TMPDIR=$OVERLAYDIR/tmp/BASE-$TARGETTAG/diff mkdir -p $TMPDIR cd $TMPDIR/../.. #如果tmp/baseimg.properties文件存在,从中读取基础镜像最上层目录base.dir和原版本号,否则从源基础镜像中获取 if [ -f "baseimg.properties" ]; then UpperDir=grep "base.dir" baseimg.properties | cut -d'=' -f2 | sed 's/\r//' BaseVer=grep "base.ver" baseimg.properties | cut -d'=' -f2 | sed 's/\r//' else UpperDir=docker inspect $SOURCEIMG:$SOURCETAG |jq .[0].GraphDriver.Data.UpperDir |sed 's/\"//g' BaseVer=$SOURCETAG echo "base.dir=$UpperDir" > baseimg.properties echo "base.ver=$SOURCETAG" >> baseimg.properties fi #备份源最上层目录 mkdir -p $TMPDIR/../../backup/$BaseVer \cp -af $UpperDir/* $TMPDIR/../../backup/$BaseVer/

2.3 解压变更文件包再覆盖基础镜像目录/diff

cd $TMPDIR/../.. tar -xvzf BASE-$TARGETTAG-diff.tar.gz -C $TMPDIR/../ \cp -af $TMPDIR/* $UpperDir/ sed -i "s#^base.ver=.*#base.ver=$TARGETTAG#g" $TMPDIR/../../baseimg.properties