是否可以自定义使用 Spring Native(使用 buildpack)生成的 docker 镜像

2024-04-02

我目前正在开发一个 Spring Native 应用程序,它使用 paketo buildpack 进行构建并生成 Docker 映像。 我想知道是否可以通过添加第三方工具(例如 Datadog 代理)来自定义生成的 Docker 映像。

另外,目前生成的容器镜像已安装在本地,是否可以直接将其发送到另一个 Docker 存储库中?


我目前正在开发一个 Spring Native 应用程序,它使用 paketo buildpack 进行构建并生成 Docker 映像。我想知道是否可以通过添加第三方工具(例如 Datadog 代理)来自定义生成的 Docker 映像。

这适用于 Spring Boot 应用程序,但实际上也适用于您可以使用构建包构建的任何其他应用程序。

有几种选择:

  1. 您可以自定义您使用的基础映像(称为堆栈)。
  2. 您可以添加其他构建包,这些构建包将在构建过程中执行更多自定义操作。

如果有一个构建包提供您所需的功能,#2 显然会更容易。具体到 Datadog,Paketo 构建包现在有一个您可以将 Datadog Buildpack 与 Java 和 Node.js 应用程序一起使用 https://github.com/paketo-buildpacks/datadog.

这需要更多工作,但如果您想添加特定功能,也可以创建构建包。如果您有一个应用程序需要该功能,我不会推荐这样做,但如果您有很多应用程序,那么这一努力是值得的。

我的一位同事这样说基本示例构建包 https://github.com/pivotal-david-osullivan/tanzu-noop-apm一起安装和配置虚构的 APM 代理。这是此场景的一个非常简洁的示例。

#1也是可能的。你可以创建您自己的基础镜像和堆栈 https://buildpacks.io/docs/operator-guide/create-a-stack/。这个过程并不难,特别是如果您将其基于定期更新的知名且值得信赖的映像。 Paketo 团队还拥有jam create-stack https://github.com/paketo-buildpacks/jam您可以使用该命令来简化流程。

这两个选项更困难的是您需要使它们保持最新状态。这需要一些 CI 来监视软件更新并发布构建包或堆栈的新版本。如果您不能承诺这一点,那么两者都是一个坏主意,因为您的自定义将过时并可能导致未来的安全问题。

UPDATE

  1. 您可以将依赖项与您的应用程序捆绑在一起。如果您需要包含静态二进制文件(也许是从应用程序调用的 cli),则此选项非常有效。

    在这种情况下,您只需在项目中创建一个名为binaries/(或者任何你想要的)并将静态二进制文件放在那里(确保下载与你正在使用的容器镜像兼容的版本,在我写这篇文章时 Paketo 是 Ubuntu Bionic)。然后,当您从应用程序调用 cli 命令时,只需使用它们的完整路径即可。那将是/workspace/binaries or /workspace/<path to binaries in your project>.

  2. 您可以使用apt 构建包 https://github.com/fagiani/apt-buildpack使用 apt 安装软件包。这是一个通用构建包,您向其中提供 apt 软件包列表,它将安装它们。

    这在某些情况下可以工作,但主要缺点是 buildpack 不能以 root 身份运行,因此此 buildpack 无法将这些包安装到其标准位置。它尝试通过设置环境变量来解决这个问题,例如PATH, LD_LIBRARY_PATH等帮助其他应用程序找到已安装的软件包。

    这在大多数情况下都可以正常工作,但您可能会遇到应用程序无法找到使用 apt buildpack 安装的内容的情况。如果您在尝试此方法时发现问题,则值得注意。

更新结束

无论如何,这是一个常见的场景,解决起来有点痛苦。幸运的是,有an RFC https://github.com/buildpacks/rfcs/pull/173这应该会使未来的过程变得更容易。

另外,目前生成的容器镜像已安装在本地,是否可以直接将其发送到另一个 Docker 存储库中?

You can docker push或者你可以添加--publish标记为pack build它会将图像发送到您告诉它使用的任何注册表。

https://stackoverflow.com/a/28349540/1585136 https://stackoverflow.com/a/28349540/1585136

发布标志的工作方式相同,您需要命名您的图像[REGISTRYHOST/][USERNAME/]NAME[:TAG].

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以自定义使用 Spring Native(使用 buildpack)生成的 docker 镜像 的相关文章

随机推荐