docker的资源限制

前面提到过   cgroup对容器container进行资源限制,namespace对container进行隔离。

首先先来熟悉一下什么是资源控制

INSTALL测压工具
    yum -y install epel-release
    yum -y install stress

pull一个centos和一个测压镜像
    docker pull centos:7.3.1611
    docker pull progrium/stress

 

    前提说明,docker的container默认是不进行限制的,但是生产环境中,我们需要跑很多的container,所以必须做资源限制

1、限制容器对memory的使用

    docker  run  -it  -m  200M  --memory-swap=300M  progrium/stress  --vm  1  --vm-bytes  290M
 解析:限制条件(-m:200M内存    --memory--swap=300M:交换分区300-200=100M)   测压条件(--vm 1:分配一个线程        --vm-bytes 290M:一个线程290M)

docker的资源限制_第1张图片

提示:如果测压线程大于分配的大小,容器则终端,下面测压的结果

docker的资源限制_第2张图片

现在我们来运行一个container,并做内存限制,再查看

docker  run  -dit  --name  nginx  --hostname  nginx  -m  200M  --memory-swap=300M  centos:7.3.1611 

这里没启动一个container,在/sys/fs/cgroup/memory/docker里面就会生成一个container id,在container id目录里面可以看到我们做的内存限制,以bytes为单位,转换为M,大约300M。

docker的资源限制_第3张图片

2、限制container对cpu的使用

docker可以通过-c或者--cpu-shares设置container使用CPU的权重,默认1024也就是全部,但是我们设置CPU权重不是绝对的,docker会根据container的数量来分配CPU总数的比例。可能说的不太明白,下面我们实操来理解一下。为了更直观的看到我们结果,我把虚拟机改为一个CPU

docker  run  -it  -c  1024  progrium/stress  --cpu  1         执行过后再打开一个界面使用top查看

docker的资源限制_第4张图片

top查看我们的stress测压已经占用CPU的全部

docker的资源限制_第5张图片

下面我们再跑一个container,然后再查看

docker  run  -it  -c  512  progrium/stress  --cpu  1

docker的资源限制_第6张图片

可以看到又多了stress,CPU的占用率是第一个的一半,因为我们设置CPU权重一个是1024,一个是512。

最后我们在配置文件里面看一眼  cd  /etc/fs/cgroup/cpu/docker/

docker  run  -dit  -c  512  centos:7.3.1611

3、限制container的block  IO

默认情况下所有container都可以平等的读写磁盘,可以通过 --blkio-weight来改变container的读写优先级,这里提一下,它和--cpu-shares类似,设置的是相对的权重值,不是绝对的。注意:目前Block io之对direct io(不使用缓存)有效

下面实操

--device-read-bps  限制读设备的bps

--device-weite-bps  限制写设备的bps

--device-read-iops   限制读设备的iops

--device-weite-ops  限制写设备的iops

docker  run  -it  --name  testio --hostname  testio  --blkio-weight  600  centos:7.3.1611

再开个命令界面

docker  run  -it  --name  testio2  --hostname  testio2  --blkio-weight  300  centos:7.3.1611

分别用dd命令测试io的速度,可以明显看出来,第一个比第二个快了两倍。

docker的资源限制_第7张图片

我们再来跑一个container,限制io为30M

docker  run  -it  --device-write-bps  /dev/sda:30MB  centos:7.3.1611

在使用dd命令测试,可以看到io只有30Mb/s

docker的资源限制_第8张图片

 

 

 

 

 

 

 

你可能感兴趣的:(docker)