spring-boot:build-image 与 jib 之间有什么区别?
What is the difference between spring-boot:build-image vs jib?
Spring Boot 2.3.x 添加了通过 spring-boot:build-image 使用其插件构建 Docker 映像的功能。 Jib 似乎允许相同的功能,但不限于 Spring 引导。
是否有 Spring 启动应用程序利用该 jib 未提供的任何特定优化(这就是为什么有一个 spring 启动插件的原因?)
除了 unable to use boot image with a private registry.
Jib 和 Spring Boot 映像构建的主要区别在于后者使用 Buildpacks to create the image. There's a comparison table on buildpacks.io 列出了一些最显着的区别。
这是主观的,但 rebase 支持可能是最值得注意的。重新定位映像允许包含应用程序代码的一个或多个层在新操作系统或 JVM 层之上重新定位,而无需重建应用程序。这使得 OS 和 JVM 安全更新的应用速度比必须重建每个应用程序及其整个映像才能使用更新快得多。
我们希望 Jib 能够很好地与所有框架一起工作,并且我们对 spring-boot 的持续支持是重中之重。如果您喜欢 jib 并希望继续使用它,您应该看不到性能上的差异。事实上,spring 团队已经在 spring 启动工具中添加了一些配置,可以帮助各地的容器构建者构建更好的容器。
除此之外,Jib 被设计为 运行 任何地方,你不需要容器 运行time,你不需要 buildpacks 服务,只要你有源和buildfile 你可以创建一个容器。
是的,rebase 很有价值,但是关于 buildpacks.io 的比较关于为什么 buildpacks 是最好的显然会有一个它背后的营销魔法很少。 Rebase 由于容器的构建方式而变得顺畅和容易。开始理解它的一个有用方法是 Building containers the hard way。 rebase 在 Buildpacks 和 Jib 中的工作方式的区别如下(我认为主要是):
- Buildpacks:buildpacks 基础映像在 stack 中定义,如果您选择使用 buildpack,您将使用 buildpack 堆栈中提供的“运行 映像”。如果你想更新你的基础镜像,只有在 buildpack 所有者更新了堆栈的“运行 镜像”(编辑:看起来这可能不是真的,用户可以使用他们自己的“运行 图像”,但我认为这有点扰乱工作流程?)。然后 运行ning 变基将更新您的图像。如果这适合您的组织工作流程,那么效果会很好。如果您希望控制图像的更新,那么您需要依赖上游。
- Jib:在 jib 中,虽然有一个默认的基本图像,但您可以选择构建您的应用程序的图像。你可以随意更新它。更新您的基本映像就像更改基本映像和 运行 构建一样简单。由于 Jib 处理跨系统缓存和可再现性的方式,您不会遇到任何额外成本,结果与 pack rebase 相同。这样做的好处是您不会受到 buildpack 所有者的摆布。
我认为 Andy 和 loosebazooka 的回答中遗漏(或不够清楚)的一个重要方面是 Spring-Boots“create-image”确实需要 Docker Deamon 来建造。传统上,创建 docker 图像构建将调用类似“docker build ....”的命令。 Create-image 做类似的事情,因此需要 Docker 安装,本地安装或远程安装(使用 DOCKER_HOST 设置)。
JIB 没有这个限制,这对您的构建服务器来说是一个优势。
Spring Boot 2.3.x 添加了通过 spring-boot:build-image 使用其插件构建 Docker 映像的功能。 Jib 似乎允许相同的功能,但不限于 Spring 引导。
是否有 Spring 启动应用程序利用该 jib 未提供的任何特定优化(这就是为什么有一个 spring 启动插件的原因?)
除了 unable to use boot image with a private registry.
Jib 和 Spring Boot 映像构建的主要区别在于后者使用 Buildpacks to create the image. There's a comparison table on buildpacks.io 列出了一些最显着的区别。
这是主观的,但 rebase 支持可能是最值得注意的。重新定位映像允许包含应用程序代码的一个或多个层在新操作系统或 JVM 层之上重新定位,而无需重建应用程序。这使得 OS 和 JVM 安全更新的应用速度比必须重建每个应用程序及其整个映像才能使用更新快得多。
我们希望 Jib 能够很好地与所有框架一起工作,并且我们对 spring-boot 的持续支持是重中之重。如果您喜欢 jib 并希望继续使用它,您应该看不到性能上的差异。事实上,spring 团队已经在 spring 启动工具中添加了一些配置,可以帮助各地的容器构建者构建更好的容器。
除此之外,Jib 被设计为 运行 任何地方,你不需要容器 运行time,你不需要 buildpacks 服务,只要你有源和buildfile 你可以创建一个容器。
是的,rebase 很有价值,但是关于 buildpacks.io 的比较关于为什么 buildpacks 是最好的显然会有一个它背后的营销魔法很少。 Rebase 由于容器的构建方式而变得顺畅和容易。开始理解它的一个有用方法是 Building containers the hard way。 rebase 在 Buildpacks 和 Jib 中的工作方式的区别如下(我认为主要是):
- Buildpacks:buildpacks 基础映像在 stack 中定义,如果您选择使用 buildpack,您将使用 buildpack 堆栈中提供的“运行 映像”。如果你想更新你的基础镜像,只有在 buildpack 所有者更新了堆栈的“运行 镜像”(编辑:看起来这可能不是真的,用户可以使用他们自己的“运行 图像”,但我认为这有点扰乱工作流程?)。然后 运行ning 变基将更新您的图像。如果这适合您的组织工作流程,那么效果会很好。如果您希望控制图像的更新,那么您需要依赖上游。
- Jib:在 jib 中,虽然有一个默认的基本图像,但您可以选择构建您的应用程序的图像。你可以随意更新它。更新您的基本映像就像更改基本映像和 运行 构建一样简单。由于 Jib 处理跨系统缓存和可再现性的方式,您不会遇到任何额外成本,结果与 pack rebase 相同。这样做的好处是您不会受到 buildpack 所有者的摆布。
我认为 Andy 和 loosebazooka 的回答中遗漏(或不够清楚)的一个重要方面是 Spring-Boots“create-image”确实需要 Docker Deamon 来建造。传统上,创建 docker 图像构建将调用类似“docker build ....”的命令。 Create-image 做类似的事情,因此需要 Docker 安装,本地安装或远程安装(使用 DOCKER_HOST 设置)。
JIB 没有这个限制,这对您的构建服务器来说是一个优势。