[spring-projects/spring-boot]添加对将 docker 镜像发布到注册表的支持

2024-04-12 156 views
2

目前我们无法将本地构建的 docker 镜像发布到远程存储库。您可以使用 docker CLI 来完成此操作,但最好有一些内置支持。

回答

8

是否支持自动创建 K8s 清单 - 骨架 - 只需使用 mvn 命令 - 本地构建包的一部分?稍后,开发人员只需添加值并从 yaml 添加和删除键添加此支持是否有意义? - 想要了解

3

我认为这个用例不应该是 spring-boot maven 插件应该做的事情。如果确实如此,是否还需要包含将应用程序/映像部署到不同平台的目标?我认为用户应该坚持使用多个插件,而不是使用一个插件来完成所有工作(并不是说 spring-boot 不能提供)。我在 Fabric8 Maven 插件中看到了这种模式,他们必须慢慢回滚并将该插件分解为更小的、更单一用途的插件。我的2分钱。

2

这里的要求/功能是能够直接将图像构建到注册表中,就像 jib 所做的那样:https://github.com/GoogleContainerTools/jib

从我的角度来看,这是必须具备的,因为出于安全原因,许多公司都在使用“Docker”CI,但没有“Docker in Docker”。所以目前,我到处都能看到 Jib、Kaniko……并且由于这个 docker 要求,他们无法迁移到 Spring Boot 插件。

如果插件可以在文件系统上生成 OCI 映像,那么这可以部分完成工作,因为我们可以使用像 skopeo 这样的工具来执行“发送”操作。

7

那么我的错是,由于问题中没有描述,它可能会让其他人感到困惑,就像对我来说一样。也许@philwebb 可以添加描述,以便人们更好地理解他们正在投票/评论的内容。

0

抱歉,我提出这个问题仅供我自己参考,并没有期待任何投票/评论。我添加了一个简短的描述。

8

@jorgemoralespou 你能详细说明一下我们可能面临的问题吗?我原本以为我们可以掏钱打电话docker push。我认为这就是 jib 目前的处理方式。

9

嗯,有两个方面:

  • 技术:您需要能够支持私有和不安全的注册表,并且需要以不同的方式与 Windows/Mac/Linux 上的 Docker 进行交互,因此最好不要使用 docker,而是使用可以处理推动方向。
  • 战略上:对我来说,这是真正的交易。如果 spring-boot 插件开始这样做,那么还有什么?与其他插件相比,这个插件应该做什么?老实说,maven/gradle 用户知道如何配置多个插件以及如何调用它们,那么执行以下操作有什么区别:mvn spring-boot:build-image spring-boot:push-imagevs mvn spring-boot:build-image other-plugin:push-image.?我想到了 Fabric8 次,现在是jKube,他们挣扎着将其分解,因为它在一个地方做了太多的事情。在我看来,可以组合的单一用途插件应该受到青睐。
1

如果有一个我们可以依赖的单一用途 Maven 和 Gradle 插件,并且可能会自动配置(这样您就不需要提供图像标签),那将是一个理想的选择。我之前在查看时发现的唯一一个是三角臂,而推动并不是真正的独立功能。我也没有找到可以与注册表对话的 Java 库,似乎只有GoPython存在。也许jib 中的RegistryClient会在某个时候被提取到一个库中。

6

可以使用 Docker 守护进程 API 来标记推送图像,让守护进程完成所有工作。我们正在添加对从守护进程对注册表进行身份验证的支持,这也足以满足推送的要求。

我们通常尝试保持 Boot 插件和packCLI 之间的对等。pack支持使用选项推送到注册表pack build --publish。我认为仅向引导插件添加类似的功能不会有太大的范围蔓延风险。

3

Maven 生命周期的结构方式,在我看来,发布应该与构建分开。目标build-image依附于package阶段,这是有道理的,但不是发布。这应该在 Maven 阶段完成deploy。我还没有找到一种只构建package和只发布的方法deploy。我错过了什么吗?

1

@theHilikus 在 #26187 中有一些对此的讨论。我们尝试将 Spring Boot 构建插件的重点放在 Cloud Native Buildpacks 集成上,并避免添加功能来覆盖 OCI 映像的整个生命周期。

9

我错过了那张票。谢谢