赞
踩
可参考上篇博客 入门方式
启动容器后,每次需更新jar包时,都得重新制作镜像,再重新制作容器。流程及其繁琐,效率极低。那如何在不更新镜像或者容器的前提下直接更新jar包完成部署呢?
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD trainning-service-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/home/xbb/trainning-service-0.0.1-SNAPSHOT.jar"]
最后一行ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/home/xbb/trainning-service-0.0.1-SNAPSHOT.jar"]会运行容器里/home/xbb/trainning-service-0.0.1-SNAPSHOT.jar文件
docker build -t trainning .
docker run --name trainning -it -v /home/xbb/:/home/xbb -d -p 8097:8080 trainning
-v 宿主机目录关联容器目录。这样宿主机的/home/xbb目录就与docker的/home/xbb目录进行映射。
这样的话,当jar包发生变动时,直接更新宿主机的/home/xbb目录下的jar包即可,更新jar包之后需要将容器重启一下。
通过jar包部署方式引起一个问题,若jar包名字发生变化,比如版本号变化(trainning-service-0.0.1-SNAPSHOT.jar–>>trainning-service-1.0.1-SNAPSHOT.jar)。需要怎么处理呢?下面就介绍第三种通过脚本部署的方式。
java -jar /data/trainning-service-0.0.1-SNAPSHOT123.jar
将startup.sh上传到/home/xbb,这个文件夹路径可以自定义,记住这个文件夹路径,后面还会用到。
chmod +x startup.sh
# Docker image for springboot file run
# VERSION 0.0.1
# Author: toutou
# 基础镜像使用java
FROM java:8
CMD ["sh","-c","/data/startup.sh"]
CMD ["sh","-c","/data/hellolearn.sh"]表示在容器启动时启动所创建的startup.sh脚本。
docker build -t trainning .
末尾的点号代表当前目录,所以生成镜像的命令需要在Dockerfile所在的目录执行。
docker run --name trainning -it -v /home/xbb:/data -d -p 8097:8080 trainning
将宿主机的/home/xbb目录与容器的/data目录映射关联。这样的话,当jar包发生变动时,直接更新宿主机目录下的jar包即可。当jar包名称发生变化时,直接更改startup.sh文件里的jar名称,重新启动容器即可。

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。