"lxd" 与 lxc/docker 有何不同?

How is "lxd" different from lxc/docker?

问题


换句话说:

LXD 基于 liblxc,其目的是通过添加功能(如快照或实时迁移)来控制某些 lxcLXD 链接到 LXC,它们以 OS 为中心。

Docker 更以应用为中心,一开始基于 LXC 但现在独立于 LXC,它可以使用 openvz 或其他任何东西。 Docker只关注带lib和依赖的应用,不关注OS。

看看这个了解更多: https://www.flockport.com/lxc-vs-lxd-vs-docker-making-sense-of-the-rapidly-evolving-container-ecosystem/

此致。

How does lxd provide Full operating system functionality within containers, not just single processes?

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

LXD 使用 liblxc(基于 LXC)提供的功能,由此产生完整的 OS 功能。

How is it different from lxc/docker + wrappers?

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

Is it similar to a container that is launched with docker + supervisor/wrapper script to contain multiple processes in one container?

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

What can I do with lxd that I cannot do with some wrappers over lxc and docker ?

实时迁移容器,像使用完整的虚拟机一样使用您的容器,精确配置专用 cpu cores/memory/network I/O 用于您的容器,运行 您的容器非特权模式下的进程(容器内的根进程!=主机中的根进程)默认情况下 Docker 在特权模式下工作,只有现在 Docker 1.10 他们实现非特权模式但​​你需要审查(和也许重写)你的 Docker 文件,因为很多东西在非特权模式下无法工作。

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

Why is it available only in ubuntu if they are making use of mainline kernel features (namespaces and cgroup )?

如果需要,LXD 有来自 Canonical 的商业支持,但您可以在 Centos 7 中构建 LXD,ArchLinux(已修补内核)检查 https://github.com/lxc/lxd. Gentoo supports LXD now https://wiki.gentoo.org/wiki/LXD.

LXD 与 LXC 结合使用,并非旨在替代或取代 LXC。相反,它旨在通过添加支持 REST API 的后端守护进程和通过 REST API.

LXD 更像是 docker 主机。