Docker资源控制

    同一台主机,运行多台容器时,会产生抢占主机硬件资源的现象,如果发生不公平事件会导致部分容器或服务停止运行,所以需要对容器配置资源限制。

Cgroup(控制组):

作用: 限制docker容器对宿主机资源的使用。

格式: docker run -itd --name test1 -c 512 [镜像名]
-c 指定cpu权重

1.限制CPU
栗子:限制test1,CPU权重为512,默认为1024

[root@docker01 ~]# docker run -itd --name test1 -c 512 centos:7 
07d93eaac80063bf7fac554f99021acf6b74748a95188777bc0bb65cc21f713e
[root@docker01 ~]# docker ps   

验证

[root@docker01 ~]# cat /sys/fs/cgroup/cpu/docker/07d93eaac80063bf7fac554f99021acf6b74748a95188777bc0bb65cc21f713e/cpu.shares 
512

2.限制内存
容器内存包括两个部分:物理内存和swap

可以通过参数控制容器内存的使用量:
-m 或者–memory: 设置内存的使用限额
–memory-swap: 设置内存+ swap的使用限额

栗子:限制test2内存200M ,swap300M

[root@docker01 ~]# docker run -itd --name test2 -m 200M --memory-swap 300M centos:7
bf8681d800304db5c306c642b8ae5c61b840a38e4a88184bab6557eefc118d38
[root@docker01 ~]# docker ps

验证:

[root@docker01 ~]# cd /sys/fs/cgroup/memory/docker/bf8681d800304db5c306c642b8ae5c61b840a38e4a88184bab6557eefc118d38/
]# cat memory.limit_in_bytes  //查看内存
209715200
]# cat memory.memsw.limit_in_bytes //查看swap
314572800

3.限制blkio(磁盘)

docker中可以通过设置权重,限制bps和iops的方式控制容器读写磁盘的IO.
bps: 每秒读写的数据量 byte per second
iops: 每秒IO的次数 io per second。

    默认情况下,所有容器都能够平等的读写磁盘,也可以通过–blkio-weight
参数改变容器的blockIO 的优先级。

–device-read-bps: 显示读取某个设备的bps。
–device-write-bps: 显示写入某个设备的bps。
–device-read-iops: 显示读取某个设备的iops。
–device-write-iops: 显示写入某个设备的iops。

栗子:限制test3写入/dev/sda这块磁盘的bps为30MB

[root@docker01 ~]# docker run -itd --name test3 --device- write-bps /dev/sda:30MB centos:7

验证

[root@docker01 ~]# docker exec -it test3 bash
[root@faa126252ef6 /]# time dd if=/dev/zero of=test.out bs=1M count=800 oflag=direct
800+0 records in
800+0 records out
838860800 bytes (839 MB) copied, 26.6203 s, 31.5 MB/s

real	0m26.627s
user	0m0.001s
sys	0m0.687s

test3的每秒读写的数据量大约在30MB左右而不是很精确
Docker资源控制_第1张图片

你可能感兴趣的:(Docker)