Docker如何共享资源

时间:2014-10-03 15:18:53

标签: linux docker lxc

我一直在研究Docker,我从this post了解到,运行多个docker容器意味着速度快,因为它们通过“LXC Host”共享内核级资源,但是,我还没有发现任何有关此关系如何工作的文档,特定于docker配置,以及共享资源的级别。

Docker镜像和Docker容器对共享资源的影响是什么以及资源如何共享?

编辑:

在谈论资源共享的“内核”时,这是哪个内核?它是指主机O.S(docker二进制文件所处的级别)还是引用容器所基于的映像的内核?基于不同Linux发行版的容器是否需要在不同类型的内核上运行?

编辑2:

最后一次编辑让我的问题更加清晰,我很好奇Docker是否真的没有运行图像的完整操作系统,因为他们建议{“3}}在”如何与Docker不同然后是一个VM“

以下陈述似乎与上图on this page

相矛盾
  

容器由操作系统,用户添加的文件和   元数据。正如我们所见,每个容器都是根据图像构建的。

2 个答案:

答案 0 :(得分:5)

严格来说,Docker不再需要使用LXC这个用户工具。它仍然使用与内部容器库libcontainer相同的底层技术。实际上Docker可以使用各种系统工具来处理进程和内核之间的抽象: enter image description here 对于不同的发行版,内核不必有所不同 - 但是你不能运行非Linux操作系统。主机和容器的内核是相同的,但它支持一种上下文感知,以将它们彼此分开。

每个容器在内核之外的每个方面都包含一个单独的操作系统。它有自己的用户空间应用程序/库,并且出于所有意图和目的,它的行为就像它有自己的内核一样。

答案 1 :(得分:1)

共享哪些资源 LXC的工作原理是设置具有受限可见性的命名空间 - 进程表,挂载表,网络资源等 - 但未明确限制和命名空间的任何内容都是共享的

这当然意味着所有这些组件的后端也是共享的 - 您不需要为每个guest虚拟机假装一组不同的页表,因为您不是假装运行多个核心;它是所有相同的内核,所有相同的内存分配池,所有相同的硬件设备都在进行比特操作(与虚拟机的模拟硬件的所有开销相比,并让每个客户机分别旋转其虚拟设备);相同的块缓存;等等等。

坦率地说,这个问题几乎过于宽泛而无法回答,因为共享的唯一真实答案是“几乎所有内容”,以及如何共享是“通过不首先做重复的工作”(因为传统的VM通过模拟硬件而不是只共享一个与真实硬件交互的内核)。这也是为什么内核攻击在基于LXC的系统中如此危险的原因 - 它只是一个内核,所以在一个容器中的环0和另一个容器中的环0之间没有任何重要的区别。