Kaniko 和 BuildKit/Buildx 有什么区别?

What is the difference between Kaniko and BuildKit/Buildx?

据我了解:

我能收集到的差异:

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

尽管有重叠的特征,但主要区别如下:

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

² Kaniko 和 BuildKit 都可以 运行 daemonless and rootless, though Kaniko is, practically speaking and in my humble opinion, easier to build a container from within a non-root container. Kaniko "builds as a root user within a container in an unprivileged environment", but does not require root or a daemon. BuildKit, when exposed via buildx,需要有特权的 docker 守护进程,但是 BuildKit 在其独立形式下不需要守护进程或 root 权限(使用 RootlessKit 等工具) ).

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

⁴ BuildKit 和 Kaniko 支持基于注册表的缓存。但是,BuildKit 要求注册表支持缓存 manifest lists.

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

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