LXC 与 LXD

LXC 与 LXD

在研究和学习有关容器的更多信息时,Docker 似乎拥有出色的文档和用例示例以及分步指南。而另一方面,LXD 只有一个简单的入门指南。有哪些来源有关于 LXD 的良好文档可供我查看?

答案1

Canonical Ltd 的 LXD 技术主管 Stéphane Graber 还发表了一系列精彩的博客文章,发布在这里:

https://www.stgraber.org/2016/03/11/lxd-2-0-blog-post-series-012/

和这里:

http://insights.ubuntu.com/2016/03/14/the-lxd-2-0-story-prologue/

答案2

LXC 与 LXD

博客文章内容丰富,适合入门阅读,但入门后它们就不是好的文档了。如果你和我一样,在阅读了几篇常见的博客文章后,你可能对 Docker 和 LXC/LXD 之间的区别就很清楚了。但旧的 LXC 项目和新的 LXD 项目之间的区别对我来说一点也不清楚,而且我发现的大多数页面都没有用我能理解的方式很好地解释它。他们大多试图消除应用程序容器(Docker)和操作系统容器(LXC/LXD)之间的混淆。然后我发现了这篇博客文章: lxd 适合于哪里

您现在可能已经知道,所有这些工具(Docker/LXC/LXD)都使用命名空间和 cgroups 等常见内核功能,问题只是用户空间决定如何使用它们。根据我的理解,上述文章的摘要重点介绍了 LXC 与 LXD 的演变:

  • LXC 最初是为了测试新的内核功能而创建的;因此它是 shell 脚本和 C 程序的大杂烩(至今仍通过“旧”的 LXC 命令行工具使用)。
  • 然后将其重构为一个库。现有的 LXC 用户空间命令行工具现在使用此库。
  • LXD 是一种与该库交互的全新方式,不受与旧 LXC 命令行工具向后兼容的限制。因此,它更易于使用且功能更强大。

如果任何人(例如维护者)发现上述错误,请随时纠正我的答案。:)

关于 libvirt-lxc 的一些说明

此外,如果您正在考虑libvirt-lxc(例如如果您已经在使用libvirtKVM):

  • Red Hat 已弃用此功能:https://access.redhat.com/articles/1365153
  • Upstream 表示他们仍将继续致力于此:https://www.redhat.com/archives/libvirt-users/2015-August/msg00026.html
  • 尽管名字里libvirt-lxc有,lxc它实际上并没有使用lxc而是直接使用内核功能。因此,尽管命名混乱,但不要将此libvirt驱动程序与混淆。参考:lxchttp://libvirt.org/drvlxc.html (请注意,我认为 proxmox使用lxc适当的工具,但不要使用较新的lxd工具)。
  • Stéphane Graber 认为,libvirt与容器一起使用不太合适,尽管有人可以编写一个libvirt-lxd,但他认为这也不太合适。总结:libvirt旨在管理虚拟机,而容器不是虚拟机,因此事情变得混乱,您只支持一些共同的功能。参考:https://lists.linuxcontainers.org/pipermail/lxc-devel/2014-November/010820.html
  • 为了强调前面的观点,使用 创建新容器并不容易libvirt-lxc。例如,您必须为要创建的新容器提供现有 rootfs 的路径,并且不支持libvirt-lxc启动它。因此,您只能使用外部工具(例如lxc-create从模板创建新容器),然后libvirt-lxc使用刚刚创建的现有目录创建新容器,这让我不禁要问:“为什么要大惊小怪,libvirt-lxc而不是直接使用lxd?”

LXD 文档

回到你的问题,我尝试收集所有我能找到的关于 LXD 的参考文档。这里有一些不错的文档:

https://github.com/lxc/lxd/tree/master/doc

尤其:

  • configuration.md有一个很好的可能的配置选项参考列表。
  • imagehandling.md讨论操作系统映像如何在本地缓存。
  • lxd-ssl-authentication.md讨论了 REST API 以及它如何通过本地 UNIX 套接字和可选的 HTTPS 公开,以及如何保护它的安全。
  • storage-backends.md讨论每个存储后端的局限性和配置。
  • userns-idmap.mdlxd 默认使用非特权容器,这意味着容器 UID/GID 必须映射到主机 UID/GID;本文讨论了这一点。
  • 剩余的许多文档并不那么重要,或者更适合开发人员。

以上链接来自lxd上游的主分支,因此您可能需要检查doc目录中您实际安装的软件包的源,这样您就不会意外使用尚未安装的一些新功能。

实际上没有很多手册页,但是我发现lxdlxd-client包中包含以下内容:

  • LXC(1)- 与服务器守护进程通信的客户端程序。目前(2016 年 5 月 14 日)相当无用且信息量不大。希望将来可以为该工具制作一系列手册页,就像btrfs手册页一样。
  • LXD(1)- 服务器守护进程命令行。

当然还有服务器指南页面:https://help.ubuntu.com/lts/serverguide/lxd.html

最后,请记住 lxd 基于 lxc 库(但不是旧的 lxc 命令行工具)。这意味着 lxc 配置仍然可以直接完成,例如使用raw.lxclxd 中的配置选项。因此,对底层 LXC 配置的一些引用是有用的,但请记住,如果可能的话,应该避免这样做,以避免与 LXD 发生冲突(例如,如果您在 LXD 和 LXC 中设置了相同的配置项)。如果需要,您可以浏览手册页来找到这些内容:https://linuxcontainers.org/lxc/manpages/

答案3

目前我能找到的学习和获得 LXD 经验的最好的方法是使用在线演示。

https://linuxcontainers.org/lxd/try-it/

该演示将指导您创建、销毁和删除 LXD 容器。您也可以直接安装 LXD 并在本地运行,但他们有一个云 VM,您可以直接从站点使用。

除此之外,深入研究手册页并使用--help将显示一些额外的信息。

也许一旦 LXD 得到进一步发展并被广泛采用,我们就会看到丰富的文档发布。

相关内容