容器技术-docker实现原理之控制组概念(cgroups)
Docker容器与虚拟机的区别
虚拟机实现资源隔离的方法是利用一个独立的Guest OS,并利用Hypervisor虚拟化CPU、内存、IO设备等实现的. 例如,为了虚拟化内存,Hypervisor会创建一个shadow page table,正常情况下,一个page table可以用来实现从虚拟内存到物理内存的复制.
相比虚拟机实现资源限制和环境隔离的方案,Docker就显得简练很多,它不像虚拟机一样重新加载一个操作系统内核,而是利用Linux内核特性实现的隔离,运行容器的速度几乎等同于直接启动进程。

关于Docker实现原理,简单总结如下:
- 使用镜像管理功能,利用Docker的镜像分层、写时复制、内容寻址、联合挂载技术实现了一套完整的容器文件系统及运行环境,再结合镜像仓库,镜像可以快速下载和共享,方便在多环境部署。
- 使用CGroups限制系统的资源使用,比如一台16核32GB的机器上只让容器使用2核4GB。使用CGroups还可以为资源设置权重,监控并计算使用量,操控任务(进程或线程)启停.
- 使用Namespaces实现了系统环境的隔离,Namespaces允许一个进程以及它的子进程从获得的宿主机内核资源(网络栈、进程列表、挂载点等)里获得一个仅自己可见的隔离区域,让同一个Namespace下的所有进程可以相互通信,但对外界进程一无所知,仿佛运行在一个独占的操作系统中.
什么是Cgroups控制组?
为什么要有CGroups?
CGroups技术最初是Google开发的,在2008年1月份加入到Linux 2.6.24版本的内核中. CGroups主要提供统一的接口来管理进程或整个操作系统级别的虚拟化(其中就已经包括Linux容器)
- 资源限制:限制进程使用的内存,CPU等资源上限.
- 优先级:一个或多个控制组可以分配更多或更少的CPU,I/O
- 记录:CGroups资源使用情况会被记录并计算.
- 控制:进程或进程组可以被冻结,停止或重启.
Linux的CGroups控制组技术简单说就是一系列的控制器管理技术. 比如,内存控制器,CPU控制器.
怎样访问及管理控制组资源?
(Debian) # apt-get install libcgroup1 cgroup-tools
浙公网安备 33010602011771号