遇到的問題:
公司java項(xiàng)目按老的方式打包出來一個(gè)fat jar,100MB, 推送到騰訊云鏡像倉(cāng)庫(kù)很慢摆霉,8分鐘豪椿。奔坟。。走的是公網(wǎng)搭盾,專線暫時(shí)還沒配置好
以前是內(nèi)網(wǎng)harbor咳秉,速度還不明顯。
歸根究底鸯隅,一次推送100MB是個(gè)不合理的事情
思路:
- 了解spring boot打包澜建,期望將依賴的libs 和 業(yè)務(wù)代碼拆分
- 優(yōu)化dockerfile,充分利用緩存
解決問題:
- 先修改spring-boot-maven-plugin蝌以,只打包業(yè)務(wù)代碼炕舵。網(wǎng)上有些是配置exclude,我試了跟畅,惡心到了咽筋。。那么多包挨個(gè)找
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--<mainClass>cn.qg.clotho.Bootstrap</mainClass>-->
<layout>ZIP</layout>
<!--<executable>true</executable>-->
<includes>
<include>
<groupId>${project.groupId}</groupId>
<artifactId>${project.artifactId}</artifactId>
</include>
</includes>
</configuration>
</plugin>
- 新增maven-dependency-plugin徊件,將依賴移到libs目錄下
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<type>jar</type>
<includeTypes>jar</includeTypes>
<includeScope>runtime</includeScope>
<outputDirectory>${project.build.directory}/libs</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
- 優(yōu)化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多
啟動(dòng)命令 java -Dloader.path="libs/" -jar app.jar