“lxd”与 lxc/docker 有何不同?

Posted

技术标签:

【中文标题】“lxd”与 lxc/docker 有何不同?【英文标题】:How is "lxd" different from lxc/docker? 【发布时间】:2015-08-06 11:21:30 【问题描述】:

问题

lxd 如何在容器中提供完整的操作系统功能,而不仅仅是单个进程? 它与 lxc/docker + wrappers 有何不同? 它是否类似于使用 docker + supervisor/wrapper 脚本启动的容器以在一个容器中包含多个进程?

换句话说:

我可以用 lxd 做什么,而我不能用 lxc 和 docker 上的一些包装器来做? 如果使用主线内核功能(命名空间和 cgroup),为什么它只在 ubuntu 中可用?

【问题讨论】:

【参考方案1】:

LXD 基于liblxc,其目的是控制一些lxc 的附加功能,如快照或实时迁移。 LXD 链接到 LXC 并且它们以操作系统为中心。

Docker 更加以应用程序为中心,一开始基于LXC,但现在独立于LXC,它可以使用openvz 或其他。 Docker 只关注具有 lib 和依赖关系的应用程序,而不关注操作系统。

查看更多信息: https://www.flockport.com/lxc-vs-lxd-vs-docker-making-sense-of-the-rapidly-evolving-container-ecosystem/

问候。

【讨论】:

【参考方案2】:

lxd 如何在容器中提供完整的操作系统功能,而不仅仅是单个进程?

容器是独立的 Linux 系统,在 Linux 内核中使用 cgroups 功能来限制 cpu/memory/network/etc,无需启动完整的虚拟机。

LXD 使用 liblxc(基于 LXC)提供的功能,由此产生了完整的操作系统功能。

它与 lxc/docker + wrappers 有什么不同?

LXD 使用来自 LXC 的 liblxc。 Docker 更侧重于应用程序,只有容器内应用程序的主要进程(现在默认使用 libcontainer,Docker 确实为此首先使用了 liblxc)

是否类似于使用 docker + supervisor/wrapper 启动的容器 在一个容器中包含多个进程的脚本?

类似的东西。 LXD 和 Docker 的区别在于 Docker 是一个应用容器,LXD 是一个系统容器。 LXD 在容器内使用 upstart/systemd 之类的主要进程,默认情况下已准备好成为一个完整的 VM 环境,内存/cpu 使用率非常低。是的,您可以使用 supervisorctl/runit 构建您的 docker,但您需要手动执行此过程。您可以检查在 http://phusion.github.io/baseimage-docker/ 中是如何在容器内执行类似操作的。

我可以用 lxd 做什么,而我不能用 lxc 和 docker 上的一些包装器来做?

实时迁移容器,像使用完整的虚拟机一样使用容器,精确配置专用 cpu 内核/内存/网络 I/O 以在容器中使用,以非特权模式运行容器进程(容器内的根进程!=您主机中的 root 进程)默认情况下 Docker 在特权模式下工作,只是现在在 Docker 1.10 中它们实现了非特权模式,但您需要查看(并且可能重写)您的 Dockerfile,因为很多东西在非特权模式下无法运行。

LXD 和 Docker 是不同的东西。 LXD 在容器中为您提供“完整操作系统”,您可以使用任何在 VM 中工作的部署工具在 LXD 中部署应用程序。使用 Docker,您的应用程序位于容器内,您需要不同的工具来在 Docker 中部署应用程序并衡量性能。 Docker 旨在运行在各种操作系统平台上,例如 Windows。 LXD/LXC 只能在 Linux 上运行:这就是 Docker 不再使用 LXC 作为其堆栈的一部分的原因。

如果它们使用主线内核功能(命名空间和 cgroup),为什么它只在 ubuntu 中可用?

如果需要,LXD 可以从 Canonical 获得商业支持,但是您可以在 Centos 7 中构建 LXD,ArchLinux(带有内核补丁)检查https://github.com/lxc/lxd。 Gentoo 现在支持 LXD https://wiki.gentoo.org/wiki/LXD.

【讨论】:

【参考方案3】:

LXD 与 LXC 一起工作,并非旨在取代或取代 LXC。相反,它旨在通过添加一个支持 REST API 的后端守护程序和一个简单的 CLI 客户端来使基于 LXC 的容器更易于使用,该客户端可通过 REST API 与本地守护程序和远程守护程序一起使用。

LXD 更像是 docker 主机。

【讨论】:

以上是关于“lxd”与 lxc/docker 有何不同?的主要内容,如果未能解决你的问题,请参考以下文章

Using lxd to do vlan test (by quqi99)

Using lxd to do vlan test (by quqi99)

Using lxd to do vlan test (by quqi99)

LXC---Docker的“前身”

如何确定进程是不是在 lxc/Docker 内部运行?

是否可以将 USB 设备暴露给 LXC/Docker 容器?