docker springboot项目镜像优化

遇到的问题:
公司java项目按老的方式打包出来一个fat jar,100MB, 推送到腾讯云镜像仓库很慢,8分钟。。。走的是公网,专线暂时还没配置好
以前是内网harbor,速度还不明显。
归根究底,一次推送100MB是个不合理的事情

思路:

  1. 了解spring boot打包,期望将依赖的libs 和 业务代码拆分
  2. 优化dockerfile,充分利用缓存

解决问题:

  1. 先修改spring-boot-maven-plugin,只打包业务代码。网上有些是配置exclude,我试了,恶心到了。。那么多包挨个找

    org.springframework.boot
    spring-boot-maven-plugin
    
        
        ZIP
        
        
            
                ${project.groupId}
                ${project.artifactId}
            
        
    

  1. 新增maven-dependency-plugin,将依赖移到libs目录下

    org.apache.maven.plugins
    maven-dependency-plugin
    
        
            copy
            package
            
                copy-dependencies
            
            
                jar
                jar
                runtime
                ${project.build.directory}/libs
            
        
    

  1. 优化dockerfile
    参考 https://medium.com/@nieldw/caching-maven-dependencies-in-a-docker-build-dca6ca7ad612 ,牛逼
FROM mvn3.5 as builder
WORKDIR /build
COPY pom.xml .
RUN mvn dependency:go-offline

COPY src/ /build/src/
RUN mvn package

FROM jdk1.8
EXPOSE 80
CMD exec java -Dloader.path="/home/libs/" -jar /home/app.jar
COPY --from=builder /build/target/*.jar /home/app.jar
COPY --from=builder /build/target/libs /home/libs/

搞定。最终代码变化每次推送也就1MB多
启动命令 java -Dloader.path="libs/" -jar app.jar

你可能感兴趣的:(docker springboot项目镜像优化)