针对docker容器硬件资源的限制,主要有cpu、内存、blkio三个方面。

1.对CPU资源的控制

对CPU的控制有下面几种方式:

  • 限制CPU的使用率;
  • 多任务按比例分配CPU;
  • 限制CPU内核(核心数)使用;

(1)基于使用率控制:

CPU的百分比是以1000位单位的,因此总额为100000,即10万,那么我们写入20000,则使用率为20%。

案例:

docker run -itd --name test1 --cpu-quota 20000 centos:7 /bin/bash

进入容器使用bc工具测试

echo "scale=5000; 4*a(1)" | bc -l -q
#说明:其中a是bc的一个内置函数,代表arctan(三角函数哈~),由于tan(pi/4)=1,所以4*arctan(1)=pi 【pi就是π】,5000表示计算精确到小数点后面

top

(2)基于比例控制:

对于上面基于使用率分配给容器的方式可能只适合于少量的容器情况下,容器数量多的时候并不好计算以及设置使用率,这时我们可以通过按比例分配的方式(通过--cpu-share选项配置),这样既方便又灵活。

docker run -itd --name c1 --cpu-shares 512 centos:7 /bin/bash

docker run -itd --name c2 --cpu-shares 1024 centos:7 /bin/bash

开始在两个终端上使用stress命令压测

[root@6ec8bb5d2fde /]# stress -c 4
stress: info: [98] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd


[root@03a587d09afb /]# stress -c 4
stress: info: [97] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd


宿主机:
docker stats

比较cpu使用率

(3)基于内核控制:

在docker中可以使用--cpuset-cpus选项来使某些程序独享CPU的内核,以便提高其处理速度。如果我们的CPU核心数为4那么对应的编号为0,1,2,3。

docker run -itd --name test2 --cpuset-cpus 1,3 centos:7 /bin/bash

top

2.对内存的控制

内存使用相对于CPU而言比较简单了,通过-m参数进行设置。

docker run -itd --name demo -m 512m centos:7 /bin/bash

docker stats

3.对blkio的控制

对应blkio的设置,主要是对于在一台服务器上进行容器的混合部署的场景,就会出现同时有多个程序写入磁盘数据的情况,此时可以通过--device-write-iops选项来限制写入的iops,相应的有--device-read-bps选项可以限制读取的iops。但是这种方法只能针对blkio限制的是设备,而不是分区。

--device-read-bps:限制读某个设备的bps(数据量)使用多

--device-write-iops:限制写入某个设备的iops(次数)

实例演示:

docker run -itd --name test4 --device-write-bps /dev/sda:30m centos:7 /bin/bash

表示对sda磁盘设备限制写入的带宽为30m,需要进行高并发的操作,可以进行大量的写入操作即可