jac*_*dbd 1 containers pack buildpack docker paketo
我开始使用pack为我的应用程序构建容器映像。我对不同的应用程序使用了不同的构建器:用于 Node.js 应用程序的gcr.io/buildpacks/builder和paketobuildpacks/builder:tiny和用于 Clojure 应用程序的
不必编写 Dockerfile 很棒,但我仍然不确定云原生 Buildpack 是如何工作的。构建包只是一堆可执行文件(由构建器运行),它们与手动编写 Docker多阶段构建FROM(即Dockerfile 中的多个指令)的开发人员实现相同的结果吗?
detect并且build.当你跑步时pack build。cli 获取您的所有信息并使用它来执行构建。为了进行构建,它将设置一个容器。容器使用堆栈中的构建映像,其中包括来自构建器的构建包组,通常还有一些专用于该映像的开发库,以便更轻松地构建应用程序。然后它会传递您通过 cli 输入的设置并在该容器内运行生命周期。
首先,生命周期将运行detect每个构建包中的脚本。其输出detect是一个构建计划,生命周期使用该计划来组装将参与构建的构建包列表。这就是packcli 和最终生命周期构建 Java 应用程序、Node.js 应用程序或 buildpack 支持的任何其他内容的方式。构建计划提供了需要哪些构建包来执行此操作的具体说明。
其次,生命周期将采用参与构建的构建包(同样由detect所选构建计划确定)并按顺序运行它们。然后,每个构建包都会运行并执行构建应用程序所需的操作。到底会发生什么,取决于您的构建包,但构建包几乎可以做任何事情。构建包运行的最终结果是一组填充有信息和文件的层。
然后,生命周期从构建器获取运行映像以及由运行并标记为用于启动映像的构建包生成的所有层,并将它们组合到输出或启动映像中。
生命周期还处理存储构建和缓存层,以便后续构建能够利用并运行得更快。
答案是两者都不是。每种工具都适合某些特定的事情,您应该使用最适合该工作的工具。
Buildpack 面向拥有源代码并希望将其转换为 OCI 映像的开发人员。Buildpack 无需为此任务策划手工制作的 Dockerfile,从而使开发人员能够腾出时间编写更多代码并为其应用程序增加价值。
构建包通过将为每种编程语言创建 OCI 映像的模式和最佳实践包装到一个封装的、经过良好测试且易于使用的工具中来实现这一目标。
Dockerfile 往往更适合其他任务(即不打包应用程序),例如制作通用操作系统映像或打包数据库或消息队列等服务器。事实上,Buildpack 使用 Dockerfile 来创建基础构建并运行属于构建器一部分的映像。
| 归档时间: |
|
| 查看次数: |
690 次 |
| 最近记录: |