限制容器的 Block IO - 每天5分钟玩转 Docker 容器技术(29)

简介: 前面学习了如何限制容器对内存和CPU的使用,本节我们来看 Block IO。Block IO 是另一种可以限制容器使用的资源。Block IO 指的是磁盘的读写,docker 可通过设置权重、限制 bps 和 iops 的方式控制容器读写磁盘的带宽,下面分别讨论。

前面学习了如何限制容器对内存和CPU的使用,本节我们来看 Block IO。

Block IO 是另一种可以限制容器使用的资源。Block IO 指的是磁盘的读写,docker 可通过设置权重、限制 bps 和 iops 的方式控制容器读写磁盘的带宽,下面分别讨论。

注:目前 Block IO 限额只对 direct IO(不使用文件缓存)有效。

block IO 权重

默认情况下,所有容器能平等地读写磁盘,可以通过设置 --blkio-weight 参数来改变容器 block IO 的优先级。

--blkio-weight 与 --cpu-shares 类似,设置的是相对权重值,默认为 500。在下面的例子中,container_A 读写磁盘的带宽是 container_B 的两倍。

docker run -it --name container_A --blkio-weight 600 ubuntu   

docker run -it --name container_B --blkio-weight 300 ubuntu

限制 bps 和 iops

bps 是 byte per second,每秒读写的数据量。
iops 是 io per second,每秒 IO 的次数。

可通过以下参数控制容器的 bps 和 iops:
--device-read-bps,限制读某个设备的 bps。
--device-write-bps,限制写某个设备的 bps。
--device-read-iops,限制读某个设备的 iops。
--device-write-iops,限制写某个设备的 iops。

下面这个例子限制容器写 /dev/sda 的速率为 30 MB/s

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

我们来看看实验结果:

136.png

通过 dd 测试在容器中写磁盘的速度。因为容器的文件系统是在 host /dev/sda 上的,在容器中写文件相当于对 host /dev/sda 进行写操作。另外,oflag=direct 指定用 direct IO 方式写文件,这样 --device-write-bps 才能生效。

结果表明,bps 25.6 MB/s 没有超过 30 MB/s 的限速。

作为对比测试,如果不限速,结果如下:

137.png

其他参数的使用方法类似,留给大家自己练习。

下一节我们讨论实现容器的底层技术。 

二维码+指纹.png

目录
相关文章
|
存储 Docker 容器
外部世界如何访问容器? - 每天5分钟玩转 Docker 容器技术(37)
上节我们学习了容器如何访问外部网络,今天讨论另一个方向:外部网络如何访问到容器? 答案是:端口映射。 docker 可将容器对外提供服务的端口映射到 host 的某个端口,外网通过该端口访问容器。
2640 0
|
网络协议 Docker 容器
容器间通信的三种方式 - 每天5分钟玩转 Docker 容器技术(35)
容器之间可通过 IP,Docker DNS Server 或 joined 容器三种方式通信。 IP 通信 从上一节的例子可以得出这样一个结论:两个容器要能通信,必须要有属于同一个网络的网卡。 满足这个条件后,容器就可以通过 IP 交互了。
1509 0
LeetCode算法小抄 -- Kruskal 最小生成树算法
LeetCode算法小抄 -- Kruskal 最小生成树算法
|
数据库 Docker 容器
准备 overlay 网络实验环境 - 每天5分钟玩转 Docker 容器技术(49)
为支持容器跨主机通信,Docker 提供了 overlay driver,使用户可以创建基于 VxLAN 的 overlay 网络。VxLAN 可将二层数据封装到 UDP 进行传输,VxLAN 提供与 VLAN 相同的以太网二层服务,但是拥有更强的扩展性和灵活性。
2052 0
|
Linux Docker 容器
跨主机网络概述 - 每天5分钟玩转 Docker 容器技术(48)
前面已经学习了 Docker 的几种网络方案:none、host、bridge 和 joined 容器,它们解决了单个 Docker Host 内容器通信的问题。本章的重点则是讨论跨主机容器间通信的方案。
2026 0
|
数据安全/隐私保护 Docker 容器
创建 Machine - 每天5分钟玩转 Docker 容器技术(46)
对于 Docker Machine 来说,术语 Machine 就是运行 docker daemon 的主机。“创建 Machine” 指的就是在 host 上安装和部署 docker。先执行 docker-machine ls 查看一下当前的 machine: 如我们所料,当前还没有 machine,接下来我们创建第一个 machine: host1 - 192.168.56.104。
1505 0
|
Shell 虚拟化 Docker
安装 Docker Machine - 每天5分钟玩转 Docker 容器技术(45)
前面我们的实验环境中只有一个 docker host,所有的容器都是运行在这一个 host 上的。但在真正的环境中会有多个 host,容器在这些 host 中启动、运行、停止和销毁,相关容器会通过网络相互通信,无论它们是否位于相同的 host。
1556 0
|
存储 Docker 容器
volume 生命周期管理 - 每天5分钟玩转 Docker 容器技术(44)
Data Volume 中存放的是重要的应用数据,如何管理 volume 对应用至关重要。前面我们主要关注的是 volume 的创建、共享和使用,本节将讨论如何备份、恢复、迁移和销毁 volume。 备份 因为 volume 实际上是 host 文件系统中的目录和文件,所以 volume 的备份实际上是对文件系统的备份。
1547 0
|
Docker 容器
data-packed volume container - 每天5分钟玩转 Docker 容器技术(43)
在上一节的例子中 volume container 的数据归根到底还是在 host 里,有没有办法将数据完全放到 volume container 中,同时又能与其他容器共享呢? 当然可以,通常我们称这种容器为 data-packed volume container。
1478 0
|
Docker 容器
用 volume container 共享数据 - 每天5分钟玩转 Docker 容器技术(42)
volume container 是专门为其他容器提供 volume 的容器。它提供的卷可以是 bind mount,也可以是 docker managed volume。下面我们创建一个 volume container: 我们将容器命名为 vc_data(vc 是 volume container 的缩写)。
1464 0