据我所知:
我可以收集到的差异:
我不清楚的是这两组工具之间的重叠程度以及何时应该使用一个而不是另一个。例如,这两种工具似乎都很好地涵盖了在 Kubernetes 集群上自托管远程映像构建农场的用例。
答案 0 :(得分:2)
尽管功能重叠,但主要区别如下:
╔══════════════════════════════╦════════════╦═════════╗
║ ║ BuildKit ║ Kaniko ║
╠══════════════════════════════╬════════════╬═════════╣
║ build with no docker daemon² ║ ║ ✔ ║
║ build multi-architecture³ ║ ✔ ║ ║
║ remote layer caching⁴ ║ ✔ ║ ✔ ║
║ local layer caching⁵ ║ ✔ ║ ║
╚══════════════════════════════╩════════════╩═════════╝
² Kaniko 和 BuildKit 都可以运行 daemonless 和 rootless,尽管 Kaniko 实际上更容易从非根容器中构建容器。 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 要求注册中心支持缓存 manifest lists。
⁵ BuildKit 支持多个 --cache-to
选项,包括本地文件系统。 https://docs.docker.com/engine/reference/commandline/buildx_build/#cache-to
通常,您的构建环境或平台的限制/功能会决定哪种工具最合适,如果您有两种选择,速度可能会帮助您做出决定(尽管这应该进行彻底的基准测试)。