Docker引擎如何replacepipe理程序和来宾操作系统?

左边是我从这个video中得到的虚拟机和丰富的Docker:

在这里输入图像说明

Docker引擎如何能够轻量级地取代客户操作系统和虚拟机pipe理程序,并仍能与主机操作系统一起工作? 从本质上讲,它只是比不同的虚拟机更有效地翻译不同的应用程序及其依赖项? 我听说Docker引擎使用与主机操作系统相同的内核,但我不确定我明白这是什么意思。 本质上,我们用一个Docker引擎replace了多个来宾操作系统和一个虚拟机pipe理程序的所有依赖关系,但我不明白这是如何实现的。 一个Docker引擎是否只删除了Guest OS所不应该拥有的那么多的无关内容? 什么是无关紧要的东西?

容器必须被理解为与Linux OS原语(如命名空间和cgroups)隔离的进程。 目前有5个命名空间:PID,安装,networking,IPC和用户命名空间。 简单地说:对于命名空间,进程不能相互看到,除非它们在同一个命名空间中。 可以把它看作是类固化的chroot(一种挂载名称空间)…这个概念类似于FreeBSD jails和Solaris Zones。 Cgroups是一种设置名称空间中一组进程对资源消耗限制的方法。

Docker只是以自己的方式实现了Linux容器,容器运行在联合文件系统的层上,等等。

容器运行与主机相同的内核。 为了减less内核的攻击面,seccomp和apparmor / selinux等机制被用来过滤大量的系统调用。 另外,大量的能力被降低,以达到一定程度的隔离,使得难以摆脱监狱。

里卡多的回答是正确的,因为Docker引擎实际上只是运行在机器上的另一个进程,它只是简单地configuration内核,提供隔离其他进程所需的各种名称空间。

我其实只是写了一篇关于这个发现在这里谈论这个的博客文章。 在这里,我提出了一个更好的形象,那就是下面的形象,到目前为止已经收到了很好的反馈。 希望能够帮助我们想象里卡多在谈论什么。

其他容器设置