Docker 与 VM 和 LXC 的关系

Posted

技术标签:

【中文标题】Docker 与 VM 和 LXC 的关系【英文标题】:Docker relationship to VMs and LXC 【发布时间】:2015-03-17 10:24:54 【问题描述】:

我对 Linux Containers (LXC) 的理解是它为 Linux 系统提供了一个本机管理程序,类似于在 Windows 8 中引入的 Windows 的 Hyper-V。我所说的“本机管理程序”是指, Linux 系统能够在其内部托管来宾​​ VM,而无需安装任何类型的专用虚拟化软件。

我对 Docker 的理解是它以某种方式构建在 LXC 之上,并允许应用程序开发人员定义:

    VM/节点的确切应用程序堆栈,包括操作系统、操作系统的准确配置和调整,以及安装/配置/部署到该操作系统的任何工具或应用程序;和 运行此 VM/节点的确切资源要求,包括 CPU 要求、内存/磁盘/网络要求、负载平衡和复制要求等。然后 Docker 使用这些声明的要求确定在哪些节点上运行容器其基线。

所以首先,如果我对 LXC 或 Docker 的理解完全有误导性,请首先纠正我!

假设我的理解或多或少是正确的,我问:

Docker 与 vmWare 或 Xen VM 之间有什么关系? Docker 是否“位于”虚拟化层之上?换句话说,是否有针对不同虚拟化平台(vmWare、Xen、kvm 等)的“Docker 绑定”,我可以为myapp 使用 Docker 容器并将其部署到任何 Docker 化平台? LXC和Docker有什么关系? Docker 只是简单地扩展了 LXC,还是完全类似(但完全独立)的概念?如果它是 LXC 的扩展,那是什么方式?

【问题讨论】:

【参考方案1】:

LXC 和 Docker 的关系,-> docker 开始使用 LXC,但是从 docker 0.9 开始,docker 使用 libcontainer,不再使用 lxc-start 来启动容器。与 LXC 相比,docker 提供了一个 REST Api,允许将图像从注册表移动到注册表,允许使用 Dockerfiles 构建......

【讨论】:

感谢@user2915097 (+1) - 但是我的第一个问题(Docker 与虚拟化平台的关系,例如 vmWare 或 Xen)呢?另外,对于您回答的问题,您能否详细说明 Docker“注册表”是什么?我也对libcontainerlxc-start 之间的关系感到困惑——这些库是相互竞争的吗?再次感谢! docker 与 VMWare 或 Xen 没有任何关系,它是一个不同的概念,你有最低限度的运行进程、文件系统隔离(每个容器都有自己的根文件系统)、进程隔离、网络隔离(单独的虚拟接口和 IP 地址)、资源隔离、特定日志记录(可以使用 STDIN、STDOUT 和 STDERR), 另外一个容器默认有 10 GB 的磁盘空间,可以修改,参见jpetazzo.github.io/2014/01/29/docker-device-mapper-resize,docker run 允许你指定分配给容器的 CPU 和内存的份额,请参阅docs.docker.com/reference/run/… 和这篇出色的帖子goldmann.pl/blog/2014/09/11/resource-management-in-docker 还可以看看这个比较 docker 和 KVM 的基准,来自 IBM 的一个人,bodenr.blogspot.fr/2014/05/… 再次感谢@user2915097(全部+3)-我将在现有 VM/节点(我们使用vSphere)上安装Docker,或者这样做以某种方式与 vSphere 等集成,然后抽象出我们对特定虚拟机的担忧?

以上是关于Docker 与 VM 和 LXC 的关系的主要内容,如果未能解决你的问题,请参考以下文章

Docker和LXC有啥不同

sh 连接到Docker for Mac中的Moby Dock VM

Docker和云计算的关系是啥?

Docker入门

Docker版本

Docker是啥?