了解这两个特性能够更好的理解docker的资源分配和管理
1、NameSapces 命名空间
很多编程语言都包含了命名空间的概念,我们可以认为命名空间是一种封装,封装本身实际上实现了代码的隔离,
在操作系统中命名空间命名空间提供的是系统资源的隔离,其中系统资源包括了:进程、网络、文件系统......
实际上linux系统实现命名空间主要目的之一就是为了实现轻量级虚拟化服务,也就是我们说的容器,在同一个命名空间下的进程可以感知彼此的变化,而对其他命名空间的进程一无所知,这样就可以让容器中的进程产生一个错觉,仿佛他自己置身于一个独立的系统环境当中,以此达到独立和隔离的目的。
2、Docker命名空间的种类:
PID(ProcessID):进程隔离
NET(Network):管理网络接口
IPC(InterProcess Communication):管理跨进程通信的访问
MNT(Mount):管理挂在点(文件系统相关的隔离)
UTS(Unix Timesharing System):隔离内核和版本标识
这些隔离是怎么管理起来的呢?那么就需要用到Control groups控制组
3、Control groups(cgroups) 控制组
一种linux内核提供的一种可以限制、记录、隔离进程组所使用的理资源的机制。为容器而生,没有cgroups就没有今天的容器技术。
资源限制:如外面的子系统可以进程组设置一个内存使用的上限,一旦进程组使用的内存达到了限额,那他再申请内存就会发出内存用完的消息
优先级设定:他可以设定哪些进程组使用更大的cup,或者是磁盘IO的资源
资源计量:他可以计算出进程组使用了多少资源
资源控制:他可以将进程组挂起和恢复
带给docker的能力:
文件系统的隔离:每个容器都有自己的root文件系统
进程的隔离:每个容器都运行在自己的进程环境中
网络隔离:容器间的虚拟网络接口和IP地址都是分开的
资源的隔离和分组:使用cgroups将CPU和内存之类的资源独立分配给每个Docker容器。