如何理解LXD与VM和Docker的区别?

问题描述

当我使用 Travis-CI 时,我需要在 LXD 和完整 VM 之间进行选择:https://docs.travis-ci.com/user/reference/overview/。虽然链接页面在具体用法上描述了它们的特性,但我想问一下 LXD 在概念上与所谓的完整 VM 有何不同,以及它们与 Docker 相比如何?我认为 CI 测试应该在预装了 Linux 或其他操作系统的服务器上运行,并且我们不需要在服务器端运行 LXD 或 VM。所以我对在服务器上运行的 LXD 或 VM 的基本概念感到很困惑。有什么说明吗?

解决方法

使用 VM,您可以设置完整的 Linux 发行版,并且它运行新的 Linux 内核和发行版的运行时。您需要在 CPU 中为 VM 提供硬件支持,需要大量内存,并且启动需要一些时间。

通过 LXD,您可以设置虚拟机和系统容器

系统容器的行为类似于 VM,但不使用硬件虚拟化。它使用 Linux 内核功能与主机的其余部分隔离,即 cgroupsnamespaces

此外,系统容器不会启动单独的 Linux 内核;它重用了主机的 Linux 内核。由于 Linux 内核稳定 API,您的主机可以运行 Ubuntu,您可以同时拥有运行 Ubuntu、Fedora、Alpine、Oracle Linux 等的系统容器。

相比之下,系统容器与虚拟机相比只占用很少的资源。作为系统容器的典型 Linux 发行版可能从大约 200MB RAM 开始。

系统容器(和 LXD 虚拟机)使用存储池,包括 ZFS、btrfs、LVM 或其他一些。通过这样做,他们支持copy-on-write,这意味着容器的创建几乎是瞬时的。因为存储池中已经有一个容器镜像,任何新的容器都基于该容器镜像。在快速服务器上,它可能不到一秒。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...