一个计算机技术爱好者与学习者

0%

好好学Docker:Docker容器磁盘IO限速

1. 前言

为避免Docker容器打满磁盘IO,有时需要对容器进行磁盘IO限速。

参考文档:

2. 启动容器时限制容器磁盘IO

1
2
3
4
5
docker run --name test -d \
--device-read-bps=/dev/sda:40mb \
--device-write-bps=/dev/sda:20mb \
--blkio-weight=500 \
busybox:latest tail -f /dev/null

上面的命令中,限制了容器读写 /dev/sda 的速度:

  • 读速度最高40MBps
  • 写速度最高 20MBps
  • 磁盘IO权重500(多个容器竞争IO时的相对权重,取值10到1000)

注意1:device对应的宿主机的磁盘设备,例如 /dev/sda、/dev/sdb1
注意2:创建容器之后,无法通过 update 修改容器磁盘IO限制
注意3:宿主机内核版本在3.13以上才支持blkio cgroups;Docker存储驱动也需要支持blkio cgroups,比如overlay2

3. Compose限制容器磁盘IO

1
2
3
4
5
6
7
8
9
10
11
12
version: '3.2'
services:
your-service:
image: your-image:latest
blkio_config:
weight: 500
device_read_bps:
- path: /dev/sda
rate: 40mb
device_write_bps:
- path: /dev/sda
rate: 20mb

4. 查看容器磁盘IO限制

1
2
docker inspect -f '{{.HostConfig.BlkioDeviceReadBps}}' <container id>
docker inspect -f '{{.HostConfig.BlkioDeviceWriteBps}}' <container id>