Docker容器技术底层是通过Cgroup(Control Group 控制组)实现容器对物理资源使用的限制,限制的资源包括CPU、内存、磁盘三个方面。基本覆盖了常见的资源配额和使用量控制。
Cgroup是Linux内核提供的一种可以限制、记录、隔离进程组所使用的物理资源的机制,被LXC及Docker等很多项目用于实现进程的资源控制。
Cgroup是提供进程进行分组化管理的功能和接口的基础结构,Docker中I/O或内存的分配控制等具体的资源管理功能都是通过Cgroup功能来实现的。
- blkio:限制块设备的输入输出控制。如:磁盘、光盘、USB等。
- cpu:限制CPU资源的访问
- cpuacct:产生Cgroup任务的CPU资源报告。
- cpuset:限制分配单独的CPU和内存资源。
- devices:允许或拒绝对设备的访问。
- freezer:暂停和恢复Cgroup任务。
- memory:设置每个Cgroup的内存限制以及产生内存资源报告。
- net_cls:用于标记每个网络包
- perf_event:增加了对每group的监测跟踪的能力,可以监测属于某个特定的group的所有线程以及运行在特定CPU上CPU上的线程。
尽量使用绑定内核的方式分配CPU资源给容器进程使用,然后再配合–cpu-shares选项动态
通过cpuset-cpus制定容器A使用CPU内核0,容器B只是用CPU内核1.在主机上只有这两个容器使用对应CPU内核的情况,它们各自占用全部的内核资源,cpu-shates没有明显效果。