【问题标题】:Using cloud-native buildpacks with Spring Boot < 2.3在 Spring Boot < 2.3 中使用云原生构建包
【发布时间】:2020-09-25 09:05:17
【问题描述】:

Spring Boot 2.3 引入了对使用 Spring Boot maven/gradle 插件构建优化的 Docker 映像的支持。 spring-boot:build-image 目标做了很多事情:

  • 创建图层索引
  • 调用 Paketo 构建包
  • 构建 OCI 映像

有没有办法为使用旧 Spring Boot 版本的模块复制这些步骤?更好的是,这些步骤可以直接集成到 maven/gradle 构建中吗?

【问题讨论】:

  • 您可以将pack buildgithub.com/buildpacks/pack 与Java 元CNB、github.com/paketo-buildpacks/java 一起使用,为Java 应用程序生成优化图像。 Spring Boot 2.3 集成正在使用这些构建包。我不确定这是否会为您提供 100% 的 Spring Boot 优化,但它应该可以为您提供基于 Paketo 构建包的构建良好的映像。
  • @DanielMikusa,这是否包括 Spring Boot 插件提供的层检测/优化?
  • 不确定,我建议两种方式构建图像并进行比较。您可以使用dive 或类似的东西来比较图层。 github.com/wagoodman/dive

标签: spring spring-boot maven buildpack paketo


【解决方案1】:

作为分层 jars 功能(包括 layers.idx 文件生成和 spring-boot-maven-plugin 支持 Cloud Native Buildpacks / Paketo.io)was introduced in Spring Boot 2.3 我想说你不能用标准工具。

但我想您可以尝试自己生成layers.idx 文件 - 甚至选择默认文件,因为您的应用程序的布局毕竟可能不会发生太大变化。一个例子是(不使用SNAPSHOT 依赖):

- "dependencies":
  - "BOOT-INF/lib/"
- "spring-boot-loader":
  - "org/"
- "snapshot-dependencies":
- "application":
  - "BOOT-INF/classes/"
  - "BOOT-INF/classpath.idx"
  - "BOOT-INF/layers.idx"
  - "META-INF/"

有了这个文件(意味着把它放到你的target 文件夹中(也许你可以用一个简单的 Maven 插件来自动化它)),pack CLI 应该能够选择它。所以install pack CLI 并运行 Paketo 构建而不使用 spring-boot-maven-plugin 自己像这样:

pack build yourAppNameHere --path . --builder paketobuildpacks/builder:base

我自己并没有真正尝试过这种方法 - 如果旧 Spring Boot 版本中的目录结构有很大不同,你可能会遇到问题。但我希望能听到一些反馈!

【讨论】:

    猜你喜欢
    • 2018-05-22
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 2018-06-18
    • 2019-03-31
    • 2020-11-13
    • 1970-01-01
    • 2020-11-21
    相关资源
    最近更新 更多