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
网友评论