Docker详解(十三)——Docker容器的内存和磁盘I/O限制配置

今天继续给大家介绍Linux运维相关知识,本文主要内容是Docker的内存和I/O限制配置。
在前文Docker详解(十)——Docker容器CPU资源限额配置中,我们介绍了对Docker容器内存和磁盘I/O的使用限制,今天,我们来讲解一下对Docker容器内存和I/O的使用限制。

一、Docker内存限制

经常,我们的应用场景要对Docker容器的运行内存进行限制,防止其使用过多的内存。对Docker容器内存限制的参数为-m或者是–memory,后面直接跟允许Docker镜像使用的内存资源。Docker容器内存限制成功后,可以在/sys/fs/cgroup/memory/memory.limit_in_bytes文件中查看,结果如下所示:
在这里插入图片描述
在上图中,我们给该Docker容器分配了128M的内存,而文件中显示的数值是Byte,即为12810241024。

二、Docker磁盘I/O限制

同样的,Docker也可以对磁盘I/O进行限制,来限制Docker容器磁盘读写的速度。在Docker中,可以使用4个参数对磁盘I/O进行限制,这四个参数及其作用如下:
1、–device-read-bps
限制Docker容器每秒磁盘读的速度
2、–device-read-iops
限制Docker容器每秒磁盘读的I/O
3、 --device-write-bps
限制Docker容器每秒磁盘写的速度
4、–device-write-iops
限制Docker容器每秒磁盘写的I/O
下面,我通过一个实现来展现–device-write-bps参数对Docker容器写磁盘速率的限制。
首先,我们打开一个Docker容器,执行命令:

docker run -it -v /root/:/root/ --device /dev/sda:/dev/sda --device-write-bps /dev/sda:512kb --privileged=true -u root centos /bin/bash

在上述命令中,我们开启了一个Docker容器,并对/root/目录和/dev/sda磁盘进行了映射,这是因为我们测试磁盘I/O必须有实际的硬盘。此外,为了防止权限问题,我们还使用了–privileged=true和-u root参数。
进入容器后,我们执行命令:

time dd if=/dev/sda of=/root/123.out bs=1M count=30 oflag=direct,nonblock

在上述命令中,dd命令用于从/dev/sda磁盘中读取数据,并输出到/root/123.out文件中,共写入30块1M大小的数据块,后面的direct和nonblock表示对数据的读写采用直接和非阻塞I/O的方式。最后,time命令用于计量该命令执行所用的时间。
该命令执行结果如下:
在这里插入图片描述
从上图可以看出,time命令计算得到的时间共有约60秒。不难计算,在理论上,我们设定的磁盘写入速率极限为512Kbps,数据总量大小为1M*30=30M,写入时间为30M/512Kbps,大约为60s。由此可见,我们的实验值和理论值大致相等,对Docker容器的磁盘I/O限制成功!
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200

猜你喜欢

转载自blog.csdn.net/weixin_40228200/article/details/124209473