OS容器隔离与进程隔离

ber*_*uan 15 containers

在许多进程之间,操作系统容器提供的隔离与内核提供的隔离有何不同?

每个进程已经与在同一内核上运行的任何其他进程隔离.这种隔离与容器提供的隔离有何不同?

blu*_*res 7

每个进程已经与在同一内核上运行的任何其他进程隔离.

是吗?kill -9工作怎么样?如果我有足够的权限,我可以伸手去触摸我想要的任何过程.

像Docker,rkt和LXC这样的容器技术利用两个Linux内核特性来实现"容器化".

第一个是命名空间.从维基百科条目的开头简介:

命名空间是Linux内核的一项功能,可隔离和虚拟化进程集合的系统资源.可虚拟化的资源示例包括进程ID,主机名,用户ID,网络访问,进程间通信和文件系统.命名空间是Linux上容器的基本方面.

例如,我可以在内核级别使用命名空间来限制进程可以看到的内容或进程可以与之通信的内容.我可以通过这样一种方式配置进程间通信和文件系统可见性,使得我的kill -9命令无法看到生活在不同命名空间中的进程,因此不能直接杀死它们.

其次是控制组,它允许资源限制和隔离.Cgroup让我们告诉一个过程"你只能拥有512MB的内存和10%的主机CPU使用率".如果我有一些丑陋的命令能够使用99%的CPU,那么主机上的其他进程将不会被隔离,不必偶尔共享1%的CPU.有了Cgroups,我可以改变它.我可以告诉我丑陋的命令"在任何给定的时间你只能得到25%的CPU"而这就是它所能拥有的一切.

这里要记住的是,这些是Linux内核功能,而不是一些用螺栓固定的系统管理器工具或其他软件.Docker/rkt/LXC是围绕内核的这两个核心功能的平台和工具,它们只是利用已经存在于最基本级别的内容,使其更加可用.


小智 1

如果“操作系统容器”指的是 Docker 之类的东西,我的答案就是这个。

在 Docker 上,您可以限制在同一台计算机上设置的每个容器的内存和 CPU 使用率。以下链接解释了如何操作以及其中一些可能性:

https://docs.docker.com/engine/admin/resource_constraints/

虽然在流程上您可以使用作业对象执行类似的操作,但它们需要在您的应用程序中进行编码。

https://msdn.microsoft.com/en-us/library/ms684161(VS.85).aspx

希望我很好地理解了这个问题。