Cgroup用于限制容器对CPU、内存等关键资源的使用,防止某个容器独占消耗超过安全阈值的宿主机资源。
1,限制CPU
Docker 能够指定一个容器的CPU相对执行权重,每个容器默认权重为1024。假设AB两个容器同时运行在一个宿主机上,A容器权重为1024,B容器权重为512,那么他们的资源分配率分别为66.6%和33.3%,但是如果B容器完全空闲,则A容器可以使用使用属于B容器的CPU资源。
例如,可以设置容器CPU权重为100,如下:
$ docker run --rm -it -c 100 ubuntu /bin/bash
另一方面,也可以设置容器对CPU资源的使用上限,每个0.5秒,只允许该ubuntu 容器运行0.25秒。如下:
$ docker run --rm -it --cpu-period=500000 --cpu-quota=250000 ubuntu /bin/bash
2,限制内存
一般来说,生产环境必须限制容器的内存使用量。命令如下:
$ docker run --rm -it -m 200M ubuntu /bin/bash
这个例子可将该容器可使用的内存限制在200MB,不过因为Linux 的内存机制特性,当内存不足时会将部分内存置换到swap分区里,因此如果只限制内存使用量,可能会导致swap分区被用过。此时,可通过--memory-swap参数限制容器对swap分区的使用。如果只是指定-m 而不指定 --memroy-swap,那么总的虚拟内存大小(虚拟内存=内存+swap大小)是-m参数的两倍。
3,限制块设备I/O
Docker 能设置容器的I/O权重,还允许你直接限制磁盘的读写速率,对应的参数有:
--device-read-bps:磁盘每秒最多可以读多少比特(bytes)
--device-write-bps:磁盘每秒最多可以写多少比特(bytes)
参考资料:
1,《Docker进阶与实战》
2,https://www.sohu.com/a/165506573_609513