多级构建镜像脚本

#!/bin/sh


for dir in $(ls ./)
do

 if [  -d $dir ];then
    echo $dir
    a=$(echo "`pwd`"/"`echo $dir` ")
    echo $a
    cd `echo $a`
    pwd
    if [  -z " `cat config`" ];then
#if [  -z "$1" ];then
    #echo "未传入或传入参数错误,请重新执行脚本!"
    #echo "执行脚本命令参考 ./脚本名.sh 镜像id地址"
    exit
else
    echo "传入的镜像为 `cat config` "
    rm -rf a.txt
    var=`cat config`
    #var=` docker images| sed -n '2p'| awk -F' ' '{print $3}' `
fi
    time1=$(date)


cat > a.txt <<EOF
FROM  ` echo $var ` AS build-env
FROM scratch
MAINTAINER  author by admin ,TIME= `echo $time1`
COPY --from=build-env / /
EOF
     bash ./jrt1.sh >> a.txt

#   echo "`cat ./Dockerfile|tac|sed -n '1,/FROM/p'|sed '$d'|tac`" >>b.txt
    arr1=( "ENV"  "WORKDIR"  "VOLUME" "ENTRPOINT" "HEALTHCHECK" "USER" "STOPSIGNAL"  "EXPOSE" "ENTRYPOINT"  "CMD")
for org in ${arr1[@]};

do
        #bash ./jrt1.sh >> a.txt
    if [ "$org" = 'ENV' ];then
        for i in $(echo "`cat ./Dockerfile|tac|sed -n '1,/FROM/p'|sed '$d'|tac`" |grep -n 'ENV' | cut  -d  ":"  -f  1)
        #for i in $(grep -n 'ENV' b.txt | cut  -d  ":"  -f  1)
           do
                a=("${a[@]}"  "$i")
                                f=$i
                echo "`cat ./Dockerfile|tac|sed -n '1,/FROM/p'|sed '$d'|tac`" |sed -n "$(echo $f)p" >>a.txt
                    e=$(echo "`cat ./Dockerfile|tac|sed -n '1,/FROM/p'|sed '$d'|tac`" |sed -n "$(echo $f)p")
                            FINAL=${e: -1}
                while [ "$FINAL" = '\'  ]


                    do
                        let f++
                        #g=`sed -n "$(echo $f)p" b.txt`
                        g=$(echo "`cat ./Dockerfile|tac|sed -n '1,/FROM/p'|sed '$d'|tac`" |sed -n "$(echo $f)p")
                        echo $g >>a.txt
                        FINAL=${g: -1}
                    done

           done

    elif [[ "$org" = 'ENTRYPOINT' || "$org" = 'CMD' || "$org" = 'HEALTHCHECK' ]];then
        #grep $org ./b.txt |tail -1 >>a.txt
        echo "`cat ./Dockerfile|tac|sed -n '1,/FROM/p'|sed '$d'|tac`" |grep $org |tail -1 >>a.txt

    else
        #grep $org ./b.txt >>a.txt
        echo "`cat ./Dockerfile|tac|sed -n '1,/FROM/p'|sed '$d'|tac`" |grep $org >>a.txt
    fi

done
  m=`cat config`
  echo $m
  mm=`echo ${m%:*}`
  mm1=`echo ${mm##*/}`

   pwd
   docker build -t $mm1:v1  -f ./a.txt .
   docker tag $mm1:v1 $mm:v1
   mm2=" `echo $mm`:v1 "

   docker login -u admin -p Harbor12345 119.3.173.212:8085
   docker push $mm2

    cd ../





else

    a=$(echo " `echo $dir` 不是文件夹")
    echo $a

    continue
fi

done