springboot jar以及docker镜像太大问题解决方案

    每次更换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,需先创建镜像参考:

        CSDNicon-default.png?t=M7J4https://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     

        根据报错原因,解决问题

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值