jar包打包成镜像文件

jar包打包成镜像文件

目录结构
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

主程序
build.sh

#!/bin/bash
# set -x
echo "---------------------------------------------"
echo "1、打包的文件夹与镜像名保持一致"
echo "2、打包的文件夹中必须包含Dockerfile与jar包"
echo "3、Dockerfile中定义的jar包名称与提供的jar包名一致"
echo "---------------------------------------------"
image_name=$1
if [ "$image_name" == "" ]; then
    echo "请输入打包的镜像名:"
    read input
    if [ "$input" == "" ]; then
        echo "镜像名不能为空"
        exit 1
    fi
    image_name=$input
fi
shares=()
function read_dir(){
    for file in `ls $1`
    do
    cp -r $1"/"$file $image_name
    shares[${#shares[@]}]=$file
    done
}
function mv_bak(){
    if [ ! -d "$image_name/bak" ]; then
        mkdir $image_name"/bak"
    fi
    for file in ${shares[*]}
    do
        if [ -d "$image_name/bak/$file" ]; then
           rm -rf "$image_name/bak/$file"
        fi
        mv $image_name"/"$file"/" $image_name"/bak/"
    done
}
read_dir share
docker build -t $image_name $image_name
mv_bak
docker image prune -f
input="n"
echo "是否需要导出? (y/n) "
read input
if echo $input | grep -qi "y"; then
    bash export.sh $image_name $image_name/${image_name}.tar.gz
else
    exit 1
fi

dockerfile依赖,openjdk:8镜像包自行下载,
Dockerfile

FROM openjdk:8
WORKDIR /app/etc/
LABEL USER=HULAN

#名称为你打包的jar
ENV JARNAME=datalook-wechat-ui-2.1.4.RELEASE.jar

COPY ${JARNAME} /app/lib/${JARNAME}
COPY startup.sh /app/bin/startup.sh

RUN chmod +x /app/bin/startup.sh
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

ENTRYPOINT ["sh","/app/bin/startup.sh"]

运行jar包构建镜像包
startup.sh

set -x
#如果未配置xmx和xms则使用感知功能
if [ ! -z "${XMX}" ] && [ ! -z "${XMS}" ]; then
    JAVA_OPT="${JAVA_OPT} -Xmx${XMX} -Xms${XMS}"
fi

JAVA_OPT="${JAVA_OPT} -XX:+HeapDumpOnOutOfMemoryError"
JAVA_OPT="${JAVA_OPT} -XX:HeapDumpPath=/app/etc"
JAVA_OPT="${JAVA_OPT} -XX:+ExitOnOutOfMemoryError"
JAVA_OPT="${JAVA_OPT} -Duser.timezone=GMT+08"
JAVA_OPT="${JAVA_OPT} -Dspring.config.location=/app/etc/"
JAVA_OPT="${JAVA_OPT} /app/lib/${JARNAME}"

java -jar ${JAVA_OPT}

导出镜像包
export.sh

#!/bin/bash
# set -x
image_name=$1
file_name=$2
if [ "$image_name" == "" ]; then
    echo "请输入导出镜像名:"
    read input
    if [ "$input" == "" ]; then
        echo "镜像名不能为空"
        exit 1
    fi
    image_name=$input
fi
if [ "$file_name" == "" ]; then
    echo "请输入导出的文件名(如:image.tar.gz或path/image.tar.gz):"
    read input
    if [ "$input" == "" ]; then
        echo "导出的文件名不能为空"
        exit 1
    fi
    file_name=$input
fi
echo "准备导出${1}到${2}"
docker save $image_name | gzip -c > $file_name

删除镜像
v8_build_push_rmi.sh

#!/bin/bash
# set -x
#版本后缀年月日时分
cur_date=`date +%Y%m%d%H%M`
harborurl='192.168.16.41:8881/v8/'
isimport='n'
iseDel='y'

exists_image_file(){
    file=$1
    if [ -f "Dockerfile" ]&&[ "${file##*.}"x = "jar"x ];then
        return 0
    fi
    return 1
}
install(){
    echo "--------Start install --------"
    echo "------------------------------"
    dir=$(ls -l |awk '/^d/ {print $NF}')
    for file_name in $dir
    do
        cd $file_name
        echo ""
        echo $file_name
        echo "++++++++++++++++++++++++++++++++++++"
        echo "--------install ${file_name} package--------"
        flag="1"
        for suf in `ls`
        do
            exists_image_file "$suf"
            if [ $? -eq 0 ]; then
                load_tag_push 2>&1 | tee -a  $(dirname "$PWD")/load_push.log
                flag="0"
                break;
            fi
        done
        if [ $flag -eq "1" ]; then
            echo "*.jar or Dockerfile  was not found"
        fi
        echo "++++++++++++++++++++++++++++++++++++"
        cd ..
    done
    echo "------------------------------"
    echo "---------install end!---------"
}
shares=()
function read_dir(){
    for file in `ls ../$1`
    do
        cp -r ../$1"/"$file ./
        shares[${#shares[@]}]=$file
    done
}
function mv_bak(){
    if [ ! -d "bak" ]; then
        mkdir "bak"
    fi
    for file in ${shares[*]}
    do
        if [ -d "bak/$file" ]; then
            rm -rf "bak/$file"
        fi
        mv $file"/" "bak/"
    done
}
load_tag_push(){
    # 创建镜像
    echo "Scene start build  ${suf}"
    read_dir share
    docker build -t ${harborurl}$file_name:$cur_date ./../$file_name
    if [ $? -eq 0 ]; then
        mv_bak
        echo "Scene build loaded successfully ${suf}"
        echo "Scene start pushed ${suf}"
        # 推送镜像
        docker push ${harborurl}$file_name:$cur_date > /dev/null
        if [ $? -eq 0 ]; then
            echo "Scene pushed successfully ${harborurl}$file_name:$cur_date"

            if echo $isimport | grep -qi "y"; then
                # 导出镜像
                echo "Scene start Docker save ${suf}"
                docker save  ${harborurl}$file_name:$cur_date | gzip -c > $file_name.tar.gz
                if [ $? -eq 0 ]; then
                    echo "Scene save successfully ${harborurl}$file_name:$cur_date"
                else
                    echo "Scene save failed ${harborurl}$file_name:$cur_date"
                fi
            fi
            if echo $iseDel | grep -qi "y"; then
                #删除镜像
                echo "Scene start Docker rmi ${suf}"
                docker rmi --force `docker images | grep ${harborurl} | awk '{print $3}'`
                if [ $? -eq 0 ]; then
                    echo "Scene rmied successfully ${harborurl}$file_name:$cur_date"
                else
                    echo "Images ${harborurl}$file_name:$cur_date failed to rmi"
                fi
            fi
        else
            echo "Images ${harborurl}$file_name:$cur_date failed to push"
        fi
    else
        echo "Images ${suf} failed to build load"
    fi
}

if [ "$file_name" == "" ]; then
    echo "输入文件夹名称:"
    read input
    if [ "$input" == "" ]; then
        echo "文件夹不能为空"
        exit 1
    fi
    echo "Need to Rmi Image? (y/n) "
    read iseDel
    echo "Need to export Image? (y/n) "
    read isimport

    if [ "$input" == "all" ];then
        install
    else
        file_name=$input
        cd $file_name
        echo ""
        echo $file_name
        echo "++++++++++++++++++++++++++++++++++++"
        echo "--------install ${file_name} package--------"
        flag="1"
        for suf in `ls`
        do
            exists_image_file "$suf"
            if [ $? -eq 0 ]; then
                load_tag_push 2>&1 | tee -a  $(dirname "$PWD")/load_push.log
                flag="0"
                break;
            fi
        done
        if [ $flag -eq "1" ]; then
            echo "*.jar or Dockerfile  was not found"
        fi
        echo "++++++++++++++++++++++++++++++++++++"
        cd ..
    fi
fi

打包的镜像包会复制到本地文件夹里面

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柒月VII

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值