多级构建镜像脚本
#!/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