6

据我了解:

  • 它们都是构建容器镜像的工具
  • 构建本身在容器中运行
  • 构建可以在远程节点上进行,例如在 Kubernetes 集群(KanikoBuildKit)中
  • 它们都提供高级功能,例如层缓存

我可以收集的差异:

  • 安全模型(Kaniko
  • BuildKit 利用了最新的发展,例如缓存清单和清单列表
  • BuildKit 支持多种架构

我不清楚的是两组工具之间的重叠程度以及何时应该使用其中一个而不是另一个。例如,这两种工具似乎都很好地涵盖了在 Kubernetes 集群上自行托管远程映像构建场的用例。

4

1 回答 1

5

尽管有重叠的功能,但主要区别在于:

╔══════════════════════════════╦════════════╦═════════╗
║                              ║ BuildKit   ║ Kaniko  ║
╠══════════════════════════════╬════════════╬═════════╣
║ build with no docker daemon² ║            ║ ✔       ║
║ build multi-architecture³    ║ ✔          ║         ║
║ remote layer caching⁴        ║ ✔          ║ ✔       ║
║ local layer caching⁵         ║ ✔          ║         ║
╚══════════════════════════════╩════════════╩═════════╝

² Kaniko 和 BuildKit 都可以运行daemonlessrootless,尽管 Kaniko 实际上更容易从非 root 容器中构建容器。BuildKit,你可以通过 buildx 与之交互,需要一个 docker 守护进程。https://github.com/GoogleContainerTools/kaniko#how-does-kaniko-work

³ Kaniko 在撰写本文时不支持多架构构建。https://docs.docker.com/desktop/multi-arch/#build-multi-arch-images-with-buildx

⁴ BuildKit 和 Kaniko 支持基于注册表的缓存。但是,BuildKit 要求注册表支持缓存清单列表

⁵ BuildKit 支持多种--cache-to选项,包括本地文件系统。https://docs.docker.com/engine/reference/commandline/buildx_build/#cache-to

通常,您的构建环境或平台的限制/功能将决定哪种工具最合适,如果您同时拥有这两种工具,速度可能会帮助您做出决定(尽管这应该彻底进行基准测试)。

于 2021-07-15T14:31:32.583 回答