通常情况下制作镜像时,都是将jar包直接Add或Copy进入镜像中,这样启动容器后,如需更新jar包,需要重新制作镜像,从新制作容器,对于springboot的发布不易,那如果在不更新竞相或者容器的前提下就可以更新jar包呢。方法如下:
方法一:
1、制作Dockerfile
FROM java:8
EXPOSE 8090
ENTRYPOINT [“java”,"-Djava.security.egd=file:/dev/./urandom","-jar","/data/data-center-service-1.0.0-SNAPSHOT.jar"]
注意“/data/data-center-service-1.0.0-SNAPSHOT.jar”,在这里我们指定了运行容器里/data目录下的data-center-service-1.0.0-SNAPSHOT.jar文件。
到这里我们会想到,每次发布新版本的jar包时,将该文件替换掉不就将应用更新了。如果直接进容器去修改,目前我还没有找到办法。我想到的是在宿主机中将其更新呢,这样是最方便。那解决方案就是将宿主机的目录与data目录进行关联。
2、制作镜像。
docker build -t eurekaclient:1.2.0 .
3、将容器目录与宿主机目录进行关联。
由于通过Dockerfile文件中的VOLUME进行关联,只能指定容器的目录,而宿主机的目录是随机的。这样是不能满足我的需求的。我只能采用docker run时指定关联目录,命令如下:
docker run --name eurekaclient_1 -it -v /home/xijie/app/eureka-client/workplace:/data -d -p 8090:8090 eurekaclient:1.2.0
docker run --network host -e TZ=Asia/Shanghai --name arealq -it -v /root/wwwroot/LinkJava/quotation/time:/data -d -p 8089:8089 arealq:java
–name为指定容器的名称;
-v 宿主机目录关联容器目录
-p指定容器暴露的端口
4、这样每次更新的jar包时,将新jar包放入宿主机的“/home/xijie/app/eureka-client/workplace”目录下即可。
5、然后docker stop启动的容器,然后再docker start容器就可以了。就将信的应用进行了发布。
小结:方法一虽然解决了更新jar包的问题,但是又出现了一个问题就是在Dockerfile中将使用的jar包名称写死了,这样每次更新jar包必须是同样的jar包,这样当应用从1.1版本更新1.2版本时就很痛苦,需要将本是1.2版本的jar包改名为1.1,这样会导致后续jar包的错乱。那方法二就来解决这个问题,使用脚本。
docker 部署java 程序
最新推荐文章于 2024-05-23 20:56:49 发布