gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:02:46 24 4
gpt4 key购买 nike

我目前正在开发一个 Spring Native 应用程序,它正在使用 paketo buildpack 进行构建并生成一个 Docker 镜像。
我想知道是否可以通过添加第三方工具(例如 Datadog 代理)来自定义生成的 Docker 镜像。
另外,现在生成的容器镜像安装在本地,是否可以直接发送到另一个 Docker repo 中?

最佳答案

I'm currently developping a Spring Native application, it's building using paketo buildpack and generating a Docker image. I was wondering if it's possible to customize the generated Docker image by adding third party tools (like a Datadog agent for example).


有几个选项:
  • 您可以自定义您使用的基本镜像(称为堆栈)。
  • 您可以添加额外的构建包,这些构建包将在构建期间执行更多自定义。

  • 如果有提供您需要的功能的 buildpack,#2 显然更容易。我相信 DataDog has a buildpack虽然我不知道它的状态(工作/不工作/正在更新/等)。
    这是更多的工作,但如果您希望添加特定功能,您也可以创建一个 buildpack。如果您有一个需要该功能的应用程序,我不建议您这样做,但是如果您有很多应用程序,那么这样做是值得的。
    我的一个同事把这个 basic sample buildpack一起安装和配置一个虚构的 APM 代理。这是这种情况的一个非常简洁的例子。
    #1 也是可能的。您可以 create your own base image and stack .这个过程并不难,特别是如果您基于一个定期更新的知名且值得信赖的图像。
    这两个选项更困难的是您需要使它们保持最新状态。这需要一些 CI 来监视软件更新并发布 buildpack 或堆栈的新版本。如果您不能 promise 这一点,那么两者都是一个坏主意,因为您的自定义将过时并可能导致安全问题。
    更新
  • 您可以将依赖项与您的应用程序捆绑在一起。如果您需要包含静态二进制文件(可能是您从应用程序调用的 cli),则此选项很有效。
    在这种情况下,您只需在项目中创建一个名为 binaries/ 的文件夹。 (或任何你想要的)并将静态二进制文件放在那里(确保下载与你正在使用的容器镜像兼容的版本,在我写这篇文章的时候 Paketo 是 Ubuntu Bionic)。然后,当您从应用程序调用 cli 命令时,只需使用它们的完整路径。那将是 /workspace/binaries/workspace/<path to binaries in your project> .
  • 您可以使用 apt buildpack 来安装带有 apt 的软件包。这是一个通用的 buildpack,您提供一个 apt 软件包列表,它将安装它们。
    这在某些情况下可以工作,但主要缺点是 buildpack 不以 root 身份运行,因此此 buildpack 无法将这些包安装到它们的标准位置。它试图通过设置环境变量来解决这个问题,比如 PATH , LD_LIBRARY_PATH等,以帮助其他应用程序找到已安装的软件包。
    这在大多数情况下都可以正常工作,但是您可能会遇到应用程序无法找到您使用 apt buildpack 安装的内容的情况。值得注意的是,如果您在尝试这种方法时发现问题。

  • 更新结束
    就其值(value)而言,这是一个常见的场景,处理起来有点痛苦。幸好还有 an RFC这应该会让这个过程在 future 更容易。

    Also, for now the generated container image is installed locally, is it possible to send it directly in another Docker repo ?


    您可以 docker push它或者你可以添加 --publish标志到 pack build它会将图像发送到您告诉它使用的任何注册表。
    https://stackoverflow.com/a/28349540/1585136
    发布标志的工作方式相同,您需要为图像命名 [REGISTRYHOST/][USERNAME/]NAME[:TAG] .

    关于buildpack - 是否可以自定义使用 Spring Native 生成​​的 docker 镜像(使用 buildpack),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69447497/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com