美文网首页
java应用docker化

java应用docker化

作者: 風過無痕_d1cc | 来源:发表于2018-11-14 17:48 被阅读0次

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
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone
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
    #容器重启后是否直接打开日志页面
    open_log=true
    
    
    
    #查看上次最大版本号
    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}启动成功"
                container_id=`docker ps -a | grep ${container_name} | awk '{print $1}'`
                echo "新容器id为${container_id}"
                if ${open_log}
                then
                     sleep 2
                    docker logs ${container_id} -f --tail 200
                fi
            fi
    else
            echo "镜像${image_name}构建失败"
    fi

相关文章

网友评论

      本文标题:java应用docker化

      本文链接:https://www.haomeiwen.com/subject/gbnjfqtx.html