You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Spring Boot应用基于分层构建Docker镜像的最佳实践咨询

Spring Boot应用基于分层构建Docker镜像的最佳实践咨询

我目前了解到两种Spring Boot分层构建Docker镜像的实现思路,下面是对应的Dockerfile核心代码片段,咱们来逐一拆解:

方式一:基于提取的应用类文件启动

这种方式会把应用类文件提取到extracted_layers/application/BOOT-INF/classes/目录下,直接基于类文件启动:

# ... 其他构建步骤 ...
RUN java -Djarmode=layertools -jar app.jar extract --destination extracted_layers
# ... 其他构建步骤 ...
ENTRYPOINT ["java", "-XX:+UseContainerSupport", "-XX:MaxRAMPercentage=75.0", "-XX:+UseG1GC", "org.springframework.boot.loader.launch.JarLauncher"]

方式二:基于提取的应用Jar包启动

这种方式会把完整的应用Jar包提取到extracted_layers/application/目录下,通过传统的java -jar方式启动:

# ... 其他构建步骤 ...
RUN java -Djarmode=tools -jar app.jar extract --layers --destination extracted_layers
# ... 其他构建步骤 ...
ENTRYPOINT ["java", "-XX:+UseContainerSupport", "-XX:MaxRAMPercentage=75.0", "-XX:+UseG1GC", "-jar", "app.jar"]

核心差异点

两种方式最关键的区别在于**-Djarmode参数指定的工具不同**:方式一用的是layertools,方式二用的是tools

另外提一句,官方文档里采用的是第二种基于Jar包的构建方式,但我个人更倾向于第一种——毕竟直接运行已提取的类文件,理论上能省去Jar包启动时的解压、加载步骤,应该能获得更快的应用启动速度。

火山引擎 最新活动