1 缘起与目的
在我刚实习的时候,老程序猿们通过docker容器优雅的启停jar包、查看日志等骚操作深深的的震撼了我,现在我们来探究一番他们是怎么部署docker容器jar包应用的。
在开始之前,你需要有以下条件来进行本次部署。
- 一台装了docker、能上传文件的、联网的linux服务器
当然,你也可以在未联网的服务器上部署,只需要在联网环境中按照本教程生成镜像后将镜像打包拿到服务器运行即可。
本次教程想要实现的目标效果如下:
- 使用docker容器启停jar包
- 能通过docker logs查看日志
- 替换jar包不用容器拷贝,直接放到宿主机指定目录,重启容器即可
- log日志可以从宿主机直接访问
- 最好能在启动时指定jar包使用哪个yml文件
2 理清思路
基于我们的目的,我们思路也逐渐理顺了,基本思路如下。
- Dockerfile文件。我们在Dockerfile中需要加载jdk环境。设置每次重启docker执行重启jar包命令。在run时可以通过传参的形式指定使用的yml。
- docker run。启动容器时需要配置端口。挂载jar包位置。可以指定配置yml。
- docker restart。重启jar包时需要重启docker容器。
3 Dockerfile
3.1 上传Dockerfile文件
FROM java:8
MAINTAINER roc
# 把docker的logs的调整到和服务器时间相同
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo ‘Asia/Shanghai’ >/etc/timezone
ENV MYPATH /usr/local
ENV properties ""
WORKDIR $MYPATH
# 给jar包赋予权限(可以不用)
CMD chmod 777 /usr/local/app/*.jar
# 用tee命令将产生的目录在输出到控制台的同时输出到文件中
CMD java -jar /usr/local/app/*.jar $properties | tee /usr/local/app/log.file
3.2 构建容器
cd /usr/local/sdyy/pm/shandong/app
docker build -t jar-app .
4 启动容器
4.1 指定配置文件yml
docker run -p 8815:8888 -v /usr/local/sdyy/pm/shandong/app/:/usr/local/app/ -e properties="--spring.profiles.active=test" --name pm-app jar-app
注意:由于使用tee命令的原因,启动时的输出不能退出容器。只能重新连接一个ssh。笔者这里也没有什么好办法。大家有什么办法可以评论或者私信我。
4.2 不指定配置文件yml
docker run -p 8815:8888 -v /usr/local/sdyy/pm/shandong/app/:/usr/local/app/ --name pm-app jar-app
5 查看日志
docker logs -ft --tail 50 pm-app
cat /usr/local/sdyy/pm/shandong/app/log.file
6 更新jar包
上传jar包之后重启docker容器
docker restart pm-app