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包启动时的解压、加载步骤,应该能获得更快的应用启动速度。




