每次更换jar包,只需要更替几百k即可,无需把依赖包加进去
docker镜像过大
1、了解spring boot打包,期望将依赖的libs 和 业务代码拆分
2、优化dockerfile,充分利用缓存
以下只解决了依赖的libs 和 业务代码拆分,优化dockerfile后续补充
1、pom文件添加如下:
<!-- ==================== 依赖jar 优化start ========================== -->
<!-- lib包,打完一次后可以注释掉也可以不管,如果有新引入的jar包需要把lib包下的jar更新到服务器下,
// 压缩后jar包的启动指令 nohup java -Dloader.path="lib/" -jar xxx.jar &
// 未压缩jar包的启动指令 nohup java -jar xxx.jar &"
-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!-- 依赖包输出目录,将来不打进jar包里 -->
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<excludeTransitive>false</excludeTransitive>
<stripVersion>false</stripVersion>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
<!-- 压缩jar包,打出来的jar中没有了lib文件夹 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<layout>ZIP</layout>
<includes>
<include>
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
</includes>
</configuration>
</plugin>
<!-- ==================== 依赖jar 优化end ========================== -->
idea 中clean -->package 后, 项目目录中会多个target目录,里面多个lib目录,
docker部署:
如果是第一次使用docker,需先创建镜像参考:
CSDNhttps://mp.csdn.net/mp_blog/creation/editor/126367264
把idea生成的lib、xxx.jar和配置文件application.yml、bootstrop.yml放入XXXApp目录下,后面 ADD ./XXXApp/* /home/XXX/XXXApp/会加入到容器中,
若已经使用docker部署过,无需在操作创建镜像。但也需要知道创建镜像后各个文件及其功能,不然后面列出的文件不清楚什么情况。
直接在docker-compose.yml中新增一条挂载(物理机和容器的映射关系)
volumes:
- "/home/docker/volumes/xxx_data/_data/lib/:/home/XXX/XXXApp/lib/"
把idea生成的lib中的jar放入/home/docker/volumes/xxx_data/_data/lib中,
xxx.jar和配置文件application.yml、bootstrop.yml放入/home/docker/volumes/xxx_data/_data/中
然后在启动脚本startup.sh中加上对lib的依赖命令:
java -Dloader.path=lib/ -jar xxx.jar
查看容器id:docker ps -a
根据容器id,启动docker:
docker restart g46546fg434g 或者
docker stop g46546fg434g docker start g46546fg434g
启动后,进入容器中 :docker exec -it g46546fg434g /bin/bash
若进入容器失败,例如报
Error response from daemon: Container 630ebe592507cf829058848019a1580d4ab81f6b58ace40c3454562becd95918 is restarting, wait until the container is running
解决方法思路:
查看docker 日志:
docker logs g46546fg434g
根据报错原因,解决问题