1、Docker依赖的Linux内核特性
Namespaces命名空间
Control groups (cgroups)控制组
2、命名空间说明
编程语言中的命名空间实现的是代码的隔离
对应操作系统,命名空间实现的是系统资源的隔离,如进程、网络、文件系统……
Linux系统内核的命名空间就是为了实现轻量级虚拟化容器,也就是我们说的容器,在同一个命名空间下的进程能够感知相互间的变化,但对其他命名空间下的进程一无所知,从而达到隔离目的
Docker的5种命名空间:
PID(Process ID) 进程隔离
NET(Network)管理网络接口
IPC(InterProcess Communication)管理跨进程通信的访问
MNT(Mount)管理挂载点
UTS(Unix Timesharing System)隔离内核和版本标识
3、Control groups控制组
用来分配资源:是Linux内核提供的一种能够限制,记录,隔离进程组所使用的物理资源的一组机制
来源于Google
Linux kernel 2.6.24@2007 版本怎和到Linux中
详细控制项:
资源限制:如memory子系统为进程组设置一个内存的上限, 一旦进程组达到了限额,再申请内存,就会发出out of memory的消息
优先级设定:可以设定哪些进程组优先使用更大的CPU或磁盘IO的资源
资源计量:可以计算进程组使用了多少系统资源,尤其是在计费系统中尤为重要
资源控制:如将进程组的资源挂起或回复
4、Docker容器的能力
文件系统隔离:每个容器都有自己的root文件系统
进程隔离:每个容器都运行在自己的进程环境中
网络隔离:容器间的虚拟网络接口和IP地址都是分开的
资源隔离和分组:使用cgroups将CPU和内存之类的资源独立分配给每个Docker容器