Kaniko 和 BuildKit/Buildx 有什么区别?

Yac*_*uri 15 containers docker kaniko docker-buildkit buildx

据我了解:

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

我能收集到的差异:

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

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

jbi*_*ick 20

尽管功能有重叠,但主要区别如下:

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n
构建套件蟹子
不使用 root 或守护进程\xc2\xb2 进行构建\xe2\x9c\x94\xe2\x9c\x94
构建多架构\xc2\xb3\xe2\x9c\x94
远程层缓存\xe2\x81\xb4\xe2\x9c\x94\xe2\x9c\x94
本地层缓存\xe2\x81\xb5\xe2\x9c\x94
\n
\n

\xc2\xb2 Kaniko 和 BuildKit 都可以运行daemonlessrootless,但实际上,以我的愚见,Kaniko 更容易从非根容器中构建容器。Kaniko “在非特权环境中的容器内以 root 用户身份构建”,但不需要 root 或守护程序。BuildKit 通过 暴露时buildx需要一个特权 docker 守护进程,但 BuildKit 在其独立形式中不需要守护进程或 root 权限(使用一些工具,如 RootlessKit)。

\n

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

\n

\xe2\x81\xb4 BuildKit 和 Kaniko 支持基于注册表的缓存。然而,BuildKit 要求注册表支持缓存清单列表

\n

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

\n

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

\n

  • buildx 是 docker 用户访问 buildkit 的便捷包装器,并且 buildkit 本身在容器中运行,较低级别不需要 docker 引擎。 (6认同)