众所周知,容器之间是互相隔离的,容器的隔离机制只要得益于Linux命名空间和Linux控制组(cgroup)。
Linux命名空间使每个进程只能看到他自己的系统视图(如文件、进程、网络接口、主机名等)
Linux控制组限制了进程能使用的资源量(CPU、内存、网络带宽等)
Linux命名空间
默认情况下,每个Linux最初只有一个命名空间。所有系统资源都属于这一个命名空间。但是能创建额外的命名空间,以及在它们之间组织资源。对于一个进程,可以在其中一个命名空间中运行它,当然,该进程只能看到同一个命名空间下的资源。当然,会存在多种类型的多个命名空间,所以一个进程不单单只属于一个命名空间,而是一类命名空间。
空间空间类型
类型 | 用途 |
---|---|
Mount | 隔离mount point |
PID | 隔离进程,不同namespace的进程互不干扰 |
Network | 对网络接口进行隔离,每个网络接口都属于一个命名空间,但是可以在命名空间之间进行转移,且每个容器都使用自己的网络命名空间,因此每个容器仅仅稚嫩刚看到属于自己的一组网络接口 |
ipd | 隔离进程间的通信 |
UTS | 隔离主机名 |
user | 隔离用户 |
cgroup
限制容器能使用的系统资源。cgroup是Linux的一个内核功能,被用来限制一个进程或者一组进程的资源使用。一个进程的资源使用量不能超出被分配的量