我已使用hashicorp packer构建烘焙的VM镜像。

但是我想知道linuxkit是否也做同样的事情,我的意思是构建烘焙的VM镜像,唯一的区别是容器和内核中心化。

想知道这两种情况与用例之间的确切区别。

也可以同时使用packer和linuxkit的任何用例。

最佳答案

我已经相当广泛地使用了两者(公开:我是LinuxKit的自愿维护者)。我使用了packer一段时间,然后将我在packer中所做的几乎所有工作都切换到LinuxKit(lkt)。

原则上,两者都是具有相同目的的开源工具:生成可以运行的OS镜像。实际上,大多数人都使用它来使VM镜像在vbox,AWS,Azure,GCR等上运行,但是您也可以生成可以在裸机上运行的镜像,我也做了。

Packer年龄较大,具有更广泛的预配器,构建器,插件等。它尝试基于广泛的基础,并且不受人欢迎。随处构建,运行所需的任何安装。

LinuxKit在容器中运行几乎所有内容-onboot进程和连续services。通过从OCI镜像复制文件,甚至可以配置引导系统镜像的init阶段。

LinuxKit关于如何运行和构建事物的强烈观点在某些方面可能是限制性的,但也可能是解放的。

我认为最重要的区别如下:

  • lkt从零开始积累到您所需的最低限度;数据包从现有的操作系​​统库构建。
  • lkt的安全攻击面将更小,因为它不是从现有的操作系​​统开始的,而是一无所有。
  • lkt图像可以小得多,因为您只添加了所需的内容。
  • lkt构建在本地运行。 Packer实质上启动了VM(vbox,EC2等),运行一些基础镜像,根据您的说明对其进行了修改,然后将其另存为新镜像。 lkt只是通过下载和复制文件来创建新图像来操纵OCI图像。

  • 我可以得到与Packer和LinuxKit 1-3相同的最终结果,尽管lkt的工作量要少得多。例如。我向LinuxKit提供了getty包,以分离和控制启动getty的时间/方式以及启动命名空间的方式。在基于完整OS的打包程序镜像中进行分离和控制的工作量要困难得多。对于tpm包也是如此。等等。

    但是,IMO最大的不同之处在于步骤4。由于Packer启动了VM并在其中运行命令,因此它速度慢得多,调试起来也困难得多。花费我10多分钟才能构建的同一打包程序镜像,在lkt中可能是30秒。您的里程可能会有所不同,具体取决于是否下载了OCI图像,以及您所做的工作有多复杂,但这对我来说确实快了一个数量级。

    同样,在远程VM上运行的进程中,逐步调试或查找错误,运行,调试和重建要比本地命令lkt build困难得多。

    就像我说的,意见是我自己的,但这就是为什么我将几乎所有构建工作移交给lkt,做出贡献并同意在团队要求时加入优秀的维护者团队的原因。

    同时,我对HashiCorp出色的工具集深表感谢。 Packer为我服务很好;如今,LinuxKit为我提供了更好的服务。

    关于docker - hashicorp packer与linuxkit之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47812633/

    10-13 04:54