Jér*_*ury 6 buildpack graalvm-native-image spring-native
我目前正在开发一个 Spring Native 应用程序,它使用 paketo buildpack 进行构建并生成 Docker 映像。我想知道是否可以通过添加第三方工具(例如 Datadog 代理)来自定义生成的 Docker 映像。
另外,目前生成的容器镜像已安装在本地,是否可以直接将其发送到另一个 Docker 存储库中?
Dan*_*usa 11
我目前正在开发一个 Spring Native 应用程序,它使用 paketo buildpack 进行构建并生成 Docker 映像。我想知道是否可以通过添加第三方工具(例如 Datadog 代理)来自定义生成的 Docker 映像。
这适用于 Spring Boot 应用程序,但实际上也适用于您可以使用构建包构建的任何其他应用程序。
有几种选择:
如果有一个构建包提供您所需的功能,#2 显然会更容易。具体到 Datadog,Paketo buildpack 现在有一个Datadog Buildpack,您可以将其与 Java 和 Node.js 应用程序一起使用。
这需要更多工作,但如果您想添加特定功能,也可以创建构建包。如果您有一个应用程序需要该功能,我不会推荐这样做,但如果您有很多应用程序,那么这一努力是值得的。
我的一位同事将这个基本示例构建包放在一起,它安装并配置了一个虚构的 APM 代理。这是此场景的一个非常简洁的示例。
#1也是可能的。您可以创建自己的基础映像和堆栈。这个过程并不难,特别是如果您将其基于定期更新的知名且值得信赖的映像。Paketo 团队还提供了jam create-stack可用于简化流程的命令。
这两个选项更困难的是您需要使它们保持最新状态。这需要一些 CI 来监视软件更新并发布构建包或堆栈的新版本。如果您不能承诺这一点,那么两者都是一个坏主意,因为您的自定义将过时并可能导致未来的安全问题。
更新
您可以将依赖项与您的应用程序捆绑在一起。如果您需要包含静态二进制文件(也许是从应用程序调用的 cli),则此选项非常有效。
在这种情况下,您只需在项目中创建一个名为binaries/(或任何您想要的名称)的文件夹,并将静态二进制文件放入其中(确保下载与您正在使用的容器映像兼容的版本,Paketo 是 Ubuntu Bionic,位于我写这个的时候)。然后,当您从应用程序调用 cli 命令时,只需使用它们的完整路径即可。那将是/workspace/binaries或/workspace/<path to binaries in your project>。
您可以使用apt buildpack通过 apt 安装软件包。这是一个通用构建包,您向其中提供 apt 软件包列表,它将安装它们。
这在某些情况下可行,但主要缺点是 buildpack 不能以 root 身份运行,因此此 buildpack 无法将这些包安装到其标准位置。PATH它尝试通过设置、等环境变量来解决此问题,LD_LIBRARY_PATH以帮助其他应用程序找到已安装的软件包。
这在大多数情况下都可以正常工作,但您可能会遇到应用程序无法找到使用 apt buildpack 安装的内容的情况。如果您在尝试此方法时发现问题,则值得注意。
更新结束
无论如何,这是一个常见的场景,解决起来有点痛苦。幸运的是,有一个 RFC可以使将来的过程变得更容易。
另外,目前生成的容器镜像已安装在本地,是否可以直接将其发送到另一个 Docker 存储库中?
您可以docker push这样做,也可以添加--publish标志pack build,它会将图像发送到您告诉它使用的任何注册表。
发布标志的工作方式相同,您需要命名您的图像[REGISTRYHOST/][USERNAME/]NAME[:TAG]。
| 归档时间: |
|
| 查看次数: |
3344 次 |
| 最近记录: |