找回密码
 立即注册
首页 业界区 业界 Spring Boot4先行篇:第一篇 Spring Boot 创建 Docker ...

Spring Boot4先行篇:第一篇 Spring Boot 创建 Docker 镜像

司寇涵涵 前天 13:35
日期更新说明2025年11月8日初版发布前言

Spring Boot4预计年底 11 月份发布,目前截止文章发布已经发布到了4.0.0 RC2版本;本文作为Spring Boo4专题学习预览篇,带你一起聊聊 Spring Boot4打包Docker镜像相关内容。
前置准备


  • 需要搭建或者准备好 Spring Boot 项目,手动推荐搭建:https://start.spring.io/
笔者的 Spring Boot 项目 Github 链接:https://github.com/will-we/blog/tree/main/java/springboot4-samples

  • 搭建docker环境
传统 Docker 构建


  • Dockerfile内容如下
  1. ARG RUNTIME_IMAGE=amazoncorretto:17.0.7-alpine
  2. FROM ${RUNTIME_IMAGE} AS runtime
  3. # 拷贝打包后的可执行 JAR
  4. COPY ./springboot4-samples-0.0.1.jar /app/app.jar
  5. WORKDIR /app
  6. # Spring Boot 默认端口
  7. EXPOSE 8080
  8. # 可通过环境变量调整运行参数/激活配置文件
  9. ENV SPRING_PROFILES_ACTIVE=default \
  10.     JAVA_TOOL_OPTIONS=""
  11. # 直接运行可执行 JAR
  12. ENTRYPOINT ["java","-jar","/app/app.jar"]
复制代码

  • 手动构建镜像:
  1. docker build -t springboot4-samples:latest .
复制代码
如下图:


  • 启动镜像
  1. docker run -p 8080:8080 springboot4-samples
复制代码
日志如下:

SpringBoot插件构建
  1. mvn spring-boot:build-image
复制代码
构建日志如下:
  1. [INFO] Replacing main artifact D:\Space\Git\gh\will-we\blog\java\springboot4-samples\target\springboot4-samples-0.0.1.jar with repackaged archive, adding nested dependencies in BOOT-INF/.
  2. [INFO] The original artifact has been renamed to D:\Space\Git\gh\will-we\blog\java\springboot4-samples\target\springboot4-samples-0.0.1.jar.original
  3. [INFO]
  4. [INFO] <<< spring-boot:4.0.0-SNAPSHOT:build-image (default-cli) < package @ springboot4-samples <<<
  5. [INFO]
  6. [INFO]
  7. [INFO] --- spring-boot:4.0.0-SNAPSHOT:build-image (default-cli) @ springboot4-samples ---
  8. [INFO] Building image 'docker.io/library/springboot4-samples:0.0.1'
  9. [INFO]
  10. [INFO]  > Pulling builder image 'docker.io/paketobuildpacks/builder-noble-java-tiny:latest' 100%
  11. [INFO]  > Pulled builder image 'paketobuildpacks/builder-noble-java-tiny@sha256:cc76fed86425b3335e4defaaf87ff28207b0fa9ba56807ec800f62d42cb3543a'
  12. [INFO]  > Pulling run image 'docker.io/paketobuildpacks/ubuntu-noble-run-tiny:0.0.38' for platform 'linux/amd64' 100%
  13. [INFO]  > Pulled run image 'paketobuildpacks/ubuntu-noble-run-tiny@sha256:fff1b886c0e466792b5fabd716c078f061ae1d95d187b53074803d8a99533908'
  14. [INFO]  > Executing lifecycle version v0.20.17
  15. [INFO]  > Using build cache volume 'pack-cache-4e8131ef3603.build'
  16. [INFO]
  17. [INFO]  > Running creator
  18. [INFO]     [creator]     ===> ANALYZING
  19. [INFO]     [creator]     Restoring data for SBOM from previous image
  20. [INFO]     [creator]     ===> DETECTING
  21. [INFO]     [creator]     target distro name/version labels not found, reading /etc/os-release file
  22. [INFO]     [creator]     6 of 26 buildpacks participating
  23. [INFO]     [creator]     paketo-buildpacks/ca-certificates   3.10.4
  24. [INFO]     [creator]     paketo-buildpacks/bellsoft-liberica 11.4.1
  25. [INFO]     [creator]     paketo-buildpacks/syft              2.23.0
  26. [INFO]     [creator]     paketo-buildpacks/executable-jar    6.13.3
  27. [INFO]     [creator]     paketo-buildpacks/dist-zip          5.10.3
  28. [INFO]     [creator]     paketo-buildpacks/spring-boot       5.33.4
  29. [INFO]     [creator]     ===> RESTORING
  30. [INFO]     [creator]     Restoring metadata for "paketo-buildpacks/ca-certificates:helper" from app image
  31. [INFO]     [creator]     Restoring metadata for "paketo-buildpacks/bellsoft-liberica:java-security-properties" from app image
  32. [INFO]     [creator]     Restoring metadata for "paketo-buildpacks/bellsoft-liberica:jre" from app image
  33. [INFO]     [creator]     Restoring metadata for "paketo-buildpacks/bellsoft-liberica:helper" from app image
  34. [INFO]     [creator]     Restoring metadata for "paketo-buildpacks/syft:syft" from cache
  35. [INFO]     [creator]     Restoring metadata for "paketo-buildpacks/spring-boot:helper" from app image
  36. [INFO]     [creator]     Restoring metadata for "paketo-buildpacks/spring-boot:spring-cloud-bindings" from app image
  37. [INFO]     [creator]     Restoring metadata for "paketo-buildpacks/spring-boot:web-application-type" from app image
  38. [INFO]     [creator]     Restoring data for "paketo-buildpacks/syft:syft" from cache
  39. [INFO]     [creator]     Restoring data for "paketo-buildpacks/spring-boot:spring-cloud-bindings" from cache
  40. [INFO]     [creator]     Restoring data for SBOM from cache
  41. [INFO]     [creator]     ===> BUILDING
  42. [INFO]     [creator]     target distro name/version labels not found, reading /etc/os-release file
  43. [INFO]     [creator]     
  44. [INFO]     [creator]     Paketo Buildpack for CA Certificates 3.10.4
  45. [INFO]     [creator]       https://github.com/paketo-buildpacks/ca-certificates
  46. [INFO]     [creator]       Build Configuration:
  47. [INFO]     [creator]         $BP_EMBED_CERTS                    false  Embed certificates into the image
  48. [INFO]     [creator]         $BP_ENABLE_RUNTIME_CERT_BINDING    true   Deprecated: Enable/disable certificate helper layer to add certs at runtime
  49. [INFO]     [creator]         $BP_RUNTIME_CERT_BINDING_DISABLED  false  Disable certificate helper layer to add certs at runtime
  50. [INFO]     [creator]       Launch Helper: Reusing cached layer
  51. [INFO]     [creator]     
  52. [INFO]     [creator]     Paketo Buildpack for BellSoft Liberica 11.4.1
  53. [INFO]     [creator]       https://github.com/paketo-buildpacks/bellsoft-liberica
  54. [INFO]     [creator]       Build Configuration:
  55. [INFO]     [creator]         $BP_JVM_JLINK_ARGS           --no-man-pages --no-header-files --strip-debug --compress=1  configure custom link arguments (--output must be omitted)
  56. [INFO]     [creator]         $BP_JVM_JLINK_ENABLED        false                                                        enables running jlink tool to generate custom JRE
  57. [INFO]     [creator]         $BP_JVM_TYPE                 JRE                                                          the JVM type - JDK or JRE
  58. [INFO]     [creator]         $BP_JVM_VERSION              21                                                           the Java version
  59. [INFO]     [creator]       Launch Configuration:
  60. [INFO]     [creator]         $BPL_DEBUG_ENABLED           false                                                        enables Java remote debugging support
  61. [INFO]     [creator]         $BPL_DEBUG_PORT              8000                                                         configure the remote debugging port
  62. [INFO]     [creator]         $BPL_DEBUG_SUSPEND           false                                                        configure whether to suspend execution until a debugger has attached
  63. [INFO]     [creator]         $BPL_HEAP_DUMP_PATH                                                                       write heap dumps on error to this path
  64. [INFO]     [creator]         $BPL_JAVA_NMT_ENABLED        true                                                         enables Java Native Memory Tracking (NMT)
  65. [INFO]     [creator]         $BPL_JAVA_NMT_LEVEL          summary                                                      configure level of NMT, summary or detail
  66. [INFO]     [creator]         $BPL_JFR_ARGS                                                                             configure custom Java Flight Recording (JFR) arguments
  67. [INFO]     [creator]         $BPL_JFR_ENABLED             false                                                        enables Java Flight Recording (JFR)
  68. [INFO]     [creator]         $BPL_JMX_ENABLED             false                                                        enables Java Management Extensions (JMX)
  69. [INFO]     [creator]         $BPL_JMX_PORT                5000                                                         configure the JMX port
  70. [INFO]     [creator]         $BPL_JVM_HEAD_ROOM           0                                                            the headroom in memory calculation
  71. [INFO]     [creator]         $BPL_JVM_LOADED_CLASS_COUNT  35% of classes                                               the number of loaded classes in memory calculation
  72. [INFO]     [creator]         $BPL_JVM_THREAD_COUNT        250                                                          the number of threads in memory calculation
  73. [INFO]     [creator]         $JAVA_TOOL_OPTIONS                                                                        the JVM launch flags
  74. [INFO]     [creator]         Using Java version 17 extracted from MANIFEST.MF
  75. [INFO]     [creator]       BellSoft Liberica JRE 17.0.17: Reusing cached layer
  76. [INFO]     [creator]       Launch Helper: Reusing cached layer
  77. [INFO]     [creator]       Java Security Properties: Reusing cached layer
  78. [INFO]     [creator]     
  79. [INFO]     [creator]     Paketo Buildpack for Syft 2.23.0
  80. [INFO]     [creator]       https://github.com/paketo-buildpacks/syft
  81. [INFO]     [creator]     
  82. [INFO]     [creator]     Paketo Buildpack for Executable JAR 6.13.3
  83. [INFO]     [creator]       https://github.com/paketo-buildpacks/executable-jar
  84. [INFO]     [creator]       Class Path: Contributing to layer
  85. [INFO]     [creator]         Writing env/CLASSPATH.delim
  86. [INFO]     [creator]         Writing env/CLASSPATH.prepend
  87. [INFO]     [creator]       Process types:
  88. [INFO]     [creator]         executable-jar: java org.springframework.boot.loader.launch.JarLauncher (direct)
  89. [INFO]     [creator]         task:           java org.springframework.boot.loader.launch.JarLauncher (direct)
  90. [INFO]     [creator]         web:            java org.springframework.boot.loader.launch.JarLauncher (direct)
  91. [INFO]     [creator]     
  92. [INFO]     [creator]     Paketo Buildpack for Spring Boot 5.33.4
  93. [INFO]     [creator]       https://github.com/paketo-buildpacks/spring-boot
  94. [INFO]     [creator]       Build Configuration:
  95. [INFO]     [creator]         $BPL_JVM_CDS_ENABLED                 false  whether to enable CDS optimizations at runtime
  96. [INFO]     [creator]         $BPL_SPRING_AOT_ENABLED              false  whether to enable Spring AOT at runtime
  97. [INFO]     [creator]         $BP_JVM_CDS_ENABLED                  false  whether to enable CDS & perform JVM training run
  98. [INFO]     [creator]         $BP_SPRING_AOT_ENABLED               false  whether to enable Spring AOT
  99. [INFO]     [creator]         $BP_SPRING_CLOUD_BINDINGS_DISABLED   false  whether to contribute Spring Boot cloud bindings support
  100. [INFO]     [creator]         $BP_SPRING_CLOUD_BINDINGS_VERSION    1      default version of Spring Cloud Bindings library to contribute
  101. [INFO]     [creator]       Launch Configuration:
  102. [INFO]     [creator]         $BPL_SPRING_CLOUD_BINDINGS_DISABLED  false  whether to auto-configure Spring Boot environment properties from bindings
  103. [INFO]     [creator]         $BPL_SPRING_CLOUD_BINDINGS_ENABLED   true   Deprecated - whether to auto-configure Spring Boot environment properties from bindings
  104. [INFO]     [creator]       Creating slices from layers index
  105. [INFO]     [creator]         dependencies (17.3 MB)
  106. [INFO]     [creator]         spring-boot-loader (457.5 KB)
  107. [INFO]     [creator]         snapshot-dependencies (3.2 MB)
  108. [INFO]     [creator]         application (111.2 KB)
  109. [INFO]     [creator]       Spring Cloud Bindings 2.0.4: Reusing cached layer
  110. [INFO]     [creator]       Web Application Type: Reusing cached layer
  111. [INFO]     [creator]       Launch Helper: Reusing cached layer
  112. [INFO]     [creator]       4 application slices
  113. [INFO]     [creator]       Image labels:
  114. [INFO]     [creator]         org.opencontainers.image.title
  115. [INFO]     [creator]         org.opencontainers.image.version
  116. [INFO]     [creator]         org.springframework.boot.version
  117. [INFO]     [creator]     ===> EXPORTING
  118. [INFO]     [creator]     Reusing layer 'paketo-buildpacks/ca-certificates:helper'
  119. [INFO]     [creator]     Reusing layer 'paketo-buildpacks/bellsoft-liberica:helper'
  120. [INFO]     [creator]     Reusing layer 'paketo-buildpacks/bellsoft-liberica:java-security-properties'
  121. [INFO]     [creator]     Reusing layer 'paketo-buildpacks/bellsoft-liberica:jre'
  122. [INFO]     [creator]     Reusing layer 'paketo-buildpacks/executable-jar:classpath'
  123. [INFO]     [creator]     Reusing layer 'paketo-buildpacks/spring-boot:helper'
  124. [INFO]     [creator]     Reusing layer 'paketo-buildpacks/spring-boot:spring-cloud-bindings'
  125. [INFO]     [creator]     Reusing layer 'paketo-buildpacks/spring-boot:web-application-type'
  126. [INFO]     [creator]     Reusing layer 'buildpacksio/lifecycle:launch.sbom'
  127. [INFO]     [creator]     Reused 5/5 app layer(s)
  128. [INFO]     [creator]     Reusing layer 'buildpacksio/lifecycle:launcher'
  129. [INFO]     [creator]     Reusing layer 'buildpacksio/lifecycle:config'
  130. [INFO]     [creator]     Reusing layer 'buildpacksio/lifecycle:process-types'
  131. [INFO]     [creator]     Adding label 'io.buildpacks.lifecycle.metadata'
  132. [INFO]     [creator]     Adding label 'io.buildpacks.build.metadata'
  133. [INFO]     [creator]     Adding label 'io.buildpacks.project.metadata'
  134. [INFO]     [creator]     Adding label 'org.opencontainers.image.title'
  135. [INFO]     [creator]     Adding label 'org.opencontainers.image.version'
  136. [INFO]     [creator]     Adding label 'org.springframework.boot.version'
  137. [INFO]     [creator]     Setting default process type 'web'
  138. [INFO]     [creator]     Saving docker.io/library/springboot4-samples:0.0.1...
  139. [INFO]     [creator]     *** Images (f85eff5507fe):
  140. [INFO]     [creator]           docker.io/library/springboot4-samples:0.0.1
  141. [INFO]     [creator]     Reusing cache layer 'paketo-buildpacks/syft:syft'
  142. [INFO]     [creator]     Adding cache layer 'paketo-buildpacks/syft:syft'
  143. [INFO]     [creator]     Reusing cache layer 'paketo-buildpacks/spring-boot:spring-cloud-bindings'
  144. [INFO]     [creator]     Adding cache layer 'paketo-buildpacks/spring-boot:spring-cloud-bindings'
  145. [INFO]     [creator]     Reusing cache layer 'buildpacksio/lifecycle:cache.sbom'
  146. [INFO]     [creator]     Adding cache layer 'buildpacksio/lifecycle:cache.sbom'
  147. [INFO]
  148. [INFO] Successfully built image 'docker.io/library/springboot4-samples:0.0.1'
  149. [INFO]
  150. [INFO] ------------------------------------------------------------------------
  151. [INFO] BUILD SUCCESS
  152. [INFO] ------------------------------------------------------------------------
  153. [INFO] Total time:  01:19 min
  154. [INFO] Finished at: 2025-11-08T10:20:16+08:00
  155. [INFO] ------------------------------------------------------------------------
复制代码
查看下本地镜像

构建对比分析

SpringBoot 插件构建

实际上发生的事情:

  • 打包应用(Jar/War)




    • 先执行 package 阶段,生成一个可执行的 fat jar。


  • 调用 Cloud Native Buildpacks(CNB)




    • Spring Boot Plugin 内部调用 Paketo Buildpacks(官方推荐)。


  • 构建镜像(通过 lifecycle)




    • 使用 CNB 的 Lifecycle 阶段:detect → analyze → build → export。


  • 生成 OCI 镜像




    • 输出一个可直接运行的 Docker 镜像(通常是 docker.io/library/:)。


  • 推送(可选)




    • 若配置了 publish=true,则自动推送到远程镜像仓库。


阶段分析
阶段作用Detect检测是否有合适的 buildpack 来构建该项目(Spring Boot → Java buildpack)Analyze分析缓存、上一次构建产物Build运行 buildpacks 构建层(JDK层、依赖层、应用层)Export导出成最终 OCI 镜像(可直接 docker run)对比项BuildpacksDockerfile构建语言声明式、自动检测命令式、需人工编写优化自动层缓存、分层优化手动优化层安全性由社区维护的基础镜像需要自己维护适合场景Spring Boot / Cloud Native 架构需要复杂构建逻辑的项目Docker 镜像推送

推送阿里云镜像仓库
  1. docker tag springboot4-samples:0.0.1 registry.cn-hangzhou.aliyuncs.com/weirson/springboot4-samples:0.0.1
  2. docker push registry.cn-hangzhou.aliyuncs.com/weirson/springboot4-samples:0.0.1
复制代码
推送 Docker 镜像仓库
  1. docker tag springboot4-samples:0.0.1 weirson/springboot4-samples:0.0.1
  2. docker push weirson/springboot4-samples:0.0.1
复制代码


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册