Docker引擎如何取代虚拟机管理程序和来宾操作系统?

时间:2017-05-12 04:31:56

标签: docker virtual-machine

左边是我从这个video获得的VM和丰富的tis Docker:

enter image description here

Docker引擎如何轻量化以至于它可以取代Guest OS和Hypervisor并仍然可以与Host OS一起使用?从本质上讲,它只是比VM更有效地翻译不同的应用程序及其依赖项?我听说Docker引擎使用与主机操作系统相同的内核,但我不确定我理解这意味着什么。基本上我们用一个Docker引擎替换了多个Guest OS和Hypervisor的所有依赖关系,但我不明白如何做到这一点。 Docker引擎是否只是删除了客户操作系统首先不应该拥有的那么多无关紧要的东西?什么是不必要的无关的东西?

2 个答案:

答案 0 :(得分:3)

必须将容器理解为具有Linux OS原语(如命名空间和cgroup)的独立进程。目前,有5个名称空间:PID,mount,网络,IPC和用户名称空间。简而言之:对于名称空间,除非它们位于同一名称空间中,否则进程无法看到对方。可以把它想象成类固醇上的chroot(一种mount命名空间)......这个概念类似于FreeBSD jails和Solaris Zones。  Cgroup是一种通过命名空间中的一组进程设置资源消耗限制的方法。

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

容器与主机运行相同的内核。为了减少内核的攻击面,使用诸如seccomp和apparmor / selinux之类的机制来过滤大量系统调用。此外,许多功能被删除以达到一定程度的隔离,这使得很难突破监狱。

答案 1 :(得分:1)

里卡多的答案是正确的,因为Docker引擎实际上只是在机器上运行的另一个进程,它只是使用提供隔离其他进程所需的各种命名空间来配置内核。

我实际上刚刚写了一篇关于这篇found here的博客文章。在其中,我提出的论点是,下面的图像会更好,到目前为止已收到很好的反馈。希望有助于想象里卡多在谈论什么。

Other container setup