java應用docker化

weixin_34216196發表於2018-11-14

java應用的docker化很簡單,只需要編寫一個dockerfile檔案

FROM openjdk:8
MAINTAINER DAOSHU
LABEL app="KM-JIAOGUAN" version="1.0.0-SNAPSHOT" by="DAOSHU"
VOLUME /tmp
ADD km-jiaoguan-web-0.0.1-SNAPSHOT.jar /app/app.jar
COPY lib /app/lib
COPY config /app/config
WORKDIR /app/
EXPOSE 8094
ENTRYPOINT ["java","-jar","./app.jar"]

僅僅一個dockerfile已經可以完成java應用的docker化了,為了方便操作,我自己寫了一個shell指令碼,可以完成docker映象的一鍵打包,啟動,還可配置要儲存的歷史映象版本個數。

#!/bin/bash
#此指令碼可以一鍵構建映象並執行,需要在當前路徑下有dockerfile檔案以及有一個空白version.txt檔案來記錄版本資訊
#容器內部暴露的埠號
container_port=8094
#容器要對映到宿主機的埠號
port=8094
#構建的映象名稱
image_name="km-jiaoguan"
#容器啟動之後的服務名
container_name="km-jiaoguan"
#預設要保留歷史映象數量
image_number=5



#檢視上次最大版本號
version=`sed -n '$p' version.txt`
echo "最後一個${image_name}的版本號是${version}"

newversion=`expr ${version} + 1 `
docker build -t ${image_name}:${newversion} .
tag=`docker images | grep ${image_name} | awk '{print $2}' | sort -n`
echo "現存在的版本有 "
echo "${tag[@]}"
flag=0
for loop in ${tag[@]}
do
        if [ ${loop} == ${newversion} ]
        then
                echo "新映象構建成功"
                echo ${newversion} > version.txt
                flag=1
        fi
    size=`docker images | grep -c ${image_name}`
    if [ ${size} -gt ${image_number} ]
        then
                echo "只保留${image_number}個映象,刪除版本為${loop}的${image_name}歷史映象"
        docker rmi ${image_name}:${loop}
        fi
done

if [ ${flag} -eq 1 ]
then
        docker stop ${container_name}
        if [ $(docker ps | grep -c ${container_name})  -lt 1 ]
        then
            echo "成功停止舊容器${container_name}"
        fi
        docker rm ${container_name}
        if [ $(docker ps -a| grep -c ${container_name})  -lt 1 ]
        then
            echo "成功移除舊容器${container_name}"
        fi
        docker run --name=${container_name} --restart=always -p ${port}:${container_port} -d ${image_name}:${newversion}

        if [ $(docker ps -a| grep -c ${container_name}) -ge 1 ]
        then
            echo "新容器${container_name}啟動成功"
        fi
else
    echo "映象${image_name}構建失敗"
fi

相關文章