lxd 如何在容器内提供完整的操作系统功能,而不仅仅是单个进程?
容器是隔离的 Linux 系统,使用 cgroups 功能来限制 Linux 内核中的 cpu/内存/网络等,无需启动完整的虚拟机。
LXD 使用 liblxc(基于 LXC)提供的功能,并由此获得完整操作系统功能的功能。
它与 lxc/docker + 包装器有什么不同?
LXD 使用 LXC 的 liblxc。 Docker 更注重应用程序,只有容器内应用程序的主要进程(现在默认使用 libcontainer,Docker 确实首先使用了 liblxc)
是不是类似于用docker+supervisor/wrapper启动的容器
在一个容器中包含多个进程的脚本?
相似的东西。 LXD和Docker的区别在于Docker是应用程序容器,LXD是系统容器。 LXD 在容器内使用像主进程一样的 upstart/systemd,并且默认情况下已准备好成为内存/CPU 使用量非常少的完整 VM 环境。是的,你可以使用supervisorctl/runit构建你的docker,但你需要这样做manually这个流程。您可以检查如何完成http://phusion.github.io/baseimage-docker/ http://phusion.github.io/baseimage-docker/在容器内做类似的事情。
我可以用 lxd 做什么,而用 lxc 和 docker 上的一些包装器却无法做到?
容器的实时迁移,像完整虚拟机一样使用容器,精确配置容器中使用的专用CPU核心/内存/网络I/O,以非特权模式运行容器进程(容器内的根进程!=容器中的根进程)默认情况下,Docker 在特权模式下工作,直到现在在 Docker 1.10 中,它们才实现非特权模式,但您需要检查(甚至重写)您的 Dockerfile,因为很多事情在非特权模式下无法工作。
LXD 和 Docker 是不同的东西。 LXD 为您提供了容器中的“完整操作系统”,您可以使用任何适用于虚拟机的部署工具在 LXD 中部署应用程序。使用 Docker,您的应用程序位于容器内,您需要不同的工具在 Docker 中部署应用程序并进行性能指标。 Docker 设计为在各种操作系统平台上运行,例如 Windows。 LXD/LXC 只能在 Linux 上运行:这就是 Docker 不再使用 LXC 作为其堆栈一部分的原因。
如果使用主线内核功能(命名空间和 cgroup),为什么它只能在 ubuntu 中使用?
如果需要,LXD 可以从 Canonical 获得商业支持,但您可以在 Centos 7、ArchLinux(已修补内核)中构建 LXD 检查https://github.com/lxc/lxd https://github.com/lxc/lxd。 Gentoo 现在支持 LXDhttps://wiki.gentoo.org/wiki/LXD https://wiki.gentoo.org/wiki/LXD.