介绍 🔗
从 2.3.0 版本开始,Spring Boot 提供了一种新的打包方式, 可以将依赖和代码模块打包到不同的目录中。通过这种方式, 在构建 Docker 镜像时,可以将不同更新频率的依赖分配到不同的层中, 从而减小构建时发生变化的镜像层的大小。这种优化可以 使得镜像的更新更加高效。
spring boot 配置 🔗
pom.xml 添加配置 🔗
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<layers>
<enabled>true</enabled>
</layers>
</configuration>
</plugin>
打包生成的 jar 结构 🔗
- "dependencies":
- "BOOT-INF/lib/"
- "spring-boot-loader":
- "org/"
- "snapshot-dependencies":
- "application":
- "BOOT-INF/classes/"
- "BOOT-INF/classpath.idx"
- "BOOT-INF/layers.idx"
- "META-INF/"
dependencies
为第三方依赖snapshot-dependencies
版本中包含 SNAPSHOT 的第三方依赖spring-boot-loader
spring loader 类application
应用代码及资源
解压 jar 🔗
查看 jar 包内容
java -Djarmode=layertools -jar demo-0.0.1.jar list
解压 jar 包到当前目录
java -Djarmode=layertools -jar demo-0.0.1.jar extract
构建 docker 镜像 🔗
FROM jdk:11
WORKDIR /app
COPY dependencies/ ./
COPY snapshot-dependencies/ ./
COPY spring-boot-loader/ ./
COPY application/ ./
ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]