spring-boot:build-image 与 jib 有什么区别?

Arc*_*ano 4 docker spring-boot jib

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

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

除了无法使用带有私有注册表的启动映像

And*_*son 9

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

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


loo*_*oka 6

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

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

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

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


Mar*_*o B 5

我认为Andy和loosebazooka的答案中缺少的一个重要方面(或者在我看来不够清楚)是Spring-Boots“create-image”确实需要Docker Deamon来构建。传统上创建 docker 镜像构建将调用类似“docker build ....”的命令。Create-image 执行类似的操作,因此需要安装 Docker,可以是本地安装,也可以是远程安装(使用 DOCKER_HOST 设置)。

JIB 没有这个限制,这对您的构建服务器来说可能是一个优点。