【问题标题】:What is the difference between spring-boot:build-image vs jib?spring-boot:build-image 与 jib 有什么区别?
【发布时间】:2021-01-10 20:17:36
【问题描述】:

Spring Boot 2.3.x 添加了通过 spring-boot:build-image 使用其插件构建 Docker 映像的功能。 Jib 似乎允许相同的功能,但不限于 Spring boot。

Spring Boot 应用程序是否可以利用该 jib 不提供的任何特定优化(这就是为什么有一个 Spring Boot 插件的原因?)

除了unable to use boot image with a private registry

【问题讨论】:

    标签: spring-boot docker jib


    【解决方案1】:

    我们希望 Jib 能够很好地与所有框架配合使用,并且我们对 spring-boot 的持续支持是我们的重中之重。如果您喜欢 jib 并希望继续使用它,您应该会发现性能没有差异。事实上,spring 团队已经在 spring boot 工具中添加了一些配置,可以帮助各地的容器构建者构建更好的容器。

    除此之外,Jib 被设计为在任何地方运行,您不需要容器运行时,也不需要 buildpacks 服务,只要您有源代码和构建文件就可以创建容器。

    是的,rebase 很有价值,但是 buildpacks.io 上关于为什么 buildpacks 是最好的比较显然背后有一点营销魔力。由于容器的构建方式,Rebase 变得流畅和容易。开始理解它的一个有用方法是Building containers the hard way。 Buildpacks 与 Jib 中 rebase 的工作方式的区别如下(我认为主要是):

    • Buildpacks:buildpacks 基础映像在stack 中定义,如果您选择使用 buildpack,您将使用 buildpack 堆栈中提供的“运行映像”。如果您希望更新您的基本映像,则只能在 buildpack 所有者更新堆栈的“运行映像”后发生(编辑:看起来这可能不是真的,用户可以使用他们自己的“运行映像”但我认为这有点与工作流程混淆?)。然后运行 ​​rebase 将更新您的图像。如果这适合您的组织工作流程,那么效果很好。如果您希望控制更新图像,那么您需要依赖上游来执行此操作。
    • Jib:在 jib 中,虽然有一个默认的基本映像,但构建应用程序的映像的选择取决于您。你可以随意更新。更新基础镜像就像更改基础镜像和运行构建一样简单。由于 Jib 如何处理跨系统的缓存和可再现性,您不应该遇到任何额外的成本,并且结果与 pack rebase 相同。这样做的好处是您不受 buildpack 所有者的摆布。

    【讨论】:

      【解决方案2】:

      Jib 和 Spring Boot 的镜像构建的主要区别在于后者使用Buildpacks 来创建镜像。 buildpacks.io 上的 comparison table 列出了一些最显着的差异。

      这是主观的,但变基支持可能是最值得注意的。重新定位映像允许包含应用程序代码的层或多个层在新的操作系统或 JVM 层之上重新定位,而无需重新构建应用程序。与必须重新构建每个应用程序及其整个映像以使用更新相比,这使得应用操作系统和 JVM 安全更新的速度要快得多。

      【讨论】:

      • 很酷,现在我们需要做的就是等待 Spring Boot 在其主线代码中支持私有注册表(看起来它在里程碑中,但 2.4.0-M3 并没有像我理解的那样工作从他们的文档中)
      猜你喜欢
      • 2021-08-13
      • 2023-01-28
      • 1970-01-01
      • 2020-10-01
      • 2018-03-23
      • 2011-01-06
      • 2021-10-29
      • 2021-08-04
      • 1970-01-01
      相关资源
      最近更新 更多