Docker 限制容器的 Block IO使用

前面学习了如何限制容器对内存和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

我们来看看实验结果:

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

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

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解Docker 容器使用 cgroups 限制资源使用

    上一篇文章将到 Docker 容器使用 linux namespace 来隔离其运行环境,使得容器中的进程看起来就像爱一个独立环境中运行一样.但是,光有运行环境隔离还不够,因为这些进程还是可以不受限制地使用系统资源,比如网络.磁盘.CPU以及内存 等.为了让容器中的进程更加可控,Docker 使用 Linux cgroups 来限制容器中的进程允许使用的系统资源. 1. 基础知识:Linux control groups 1.1 概念 Linux Cgroup 可​​​让​​​您​​​为​​​系

  • 详解Docker cpu限制分析

    本文测试了,Docker容器限制cpu资源使用的几个配置参数.分别使用top和dstat命令分析了资源占有情况. package main import ( "flag" "runtime" "fmt" ) func main() { cpunum := flag.Int("cpunum", 0, "cpunum") flag.Parse() fmt.Println("cpunum:",

  • Docker容器内存限制的方法

    1.使用Docker自带的-m操作进行内存限制时可能会由于内核限制所以出现以下提示 Your kernel does not support swap limit capabilities.memory limit without swap 必须通过修改grub文件/etc/default/grub 添加: GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1" 之后更新grub并重启可以解决 $ sudo update-grub

  • docker 限制容器对CPU的使用

    上节学习了如何限制容器对内存的使用,本节我们来看CPU. 默认设置下,所有容器可以平等地使用 host CPU 资源并且没有限制. Docker 可以通过-c或--cpu-shares设置容器使用 CPU 的权重.如果不指定,默认值为 1024. 与内存限额不同,通过-c设置的 cpu share 并不是 CPU 资源的绝对数量,而是一个相对的权重值.某个容器最终能分配到的 CPU 资源取决于它的 cpu share 占所有容器 cpu share 总和的比例. 换句话说:通过 cpu shar

  • Docker 限制容器对内存的使用详解

    一个 docker host 上会运行若干容器,每个容器都需要 CPU.内存和 IO 资源.对于 KVM,VMware 等虚拟化技术,用户可以控制分配多少 CPU.内存资源给每个虚拟机.对于容器,Docker 也提供了类似的机制避免某个容器因占用太多资源而影响其他容器乃至整个 host 的性能. 内存限额 与操作系统类似,容器可使用的内存包括两部分:物理内存和 swap. Docker 通过下面两组参数来控制容器内存的使用量. 1. -m或--memory:设置内存的使用限额,例如 100M,

  • Docker 限制容器的 Block IO使用

    前面学习了如何限制容器对内存和CPU的使用,本节我们来看 Block IO. Block IO 是另一种可以限制容器使用的资源.Block IO 指的是磁盘的读写,docker 可通过设置权重.限制 bps 和 iops 的方式控制容器读写磁盘的带宽,下面分别讨论. 注:目前 Block IO 限额只对 direct IO(不使用文件缓存)有效. block IO 权重 默认情况下,所有容器能平等地读写磁盘,可以通过设置--blkio-weight参数来改变容器 block IO 的优先级. -

  • Centos7下安装与卸载docker应用容器引擎的方法

    Docker 是一个开源的应用容器引擎,基于Go 语言并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化. 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低. Docker的应用场景 Web 应用的自动化打包和发布. 自动化测试和持续集成.发布. 在服务型环境中部署和调整数据库或其他的后台应用. 从头编译或者扩展现

  • 如何使用docker对容器资源进行限制

    问题窥探 在服务器当中,假设iis服务部署多个站点,那么只要其中一个站点出问题,假设是cpu100%,或者是内存爆满,那么这台服务器上的其他站点都会跟着挂掉.同样在使用容器时,单台主机上可能会跑几十个容器,容器虽然都相互隔离,但是用的却是与宿主机相同的内核,CPU.内存.磁盘等硬件资源.如果不对容器资源进行限制,容器之间就会相互影响. 解决办法 Docker提供了限制内存,CPU或磁盘IO的方法, 可以对容器所占用的硬件资源大小以及多少进行限制,我们在使用docker create创建一个容器或

  • Docker Runc容器生命周期详细介绍

    Docker Runc容器生命周期 容器的生命周期涉及到内部的程序实现和面向用户的命令行界面,runc内部容器状态转换操作.runc命令的参数定义的操作.docker client定义的容器操作是不同的,比如对于docker client的create来说, 语义和runc就完全不同,这一篇文章分析runc的容器生命周期的抽象.内部实现以及状态转换图.理解了runc的容器状态转换再对比理解docker client提供的容器操作命令的语义会更容易些. 容器生命周期相关接口 最基本的require

  • Docker 限制容器可用的CPU的方式

    默认情况下容器可以使用的主机 CPU 资源是不受限制的.和内存资源的使用一样,如果不对容器可以使用的 CPU 资源进行限制,一旦发生容器内程序异常使用 CPU 的情况,很可能把整个主机的 CPU 资源耗尽,从而导致更大的灾难.本文将介绍如何限制容器可以使用的 CPU 资源. 本文的 demo 中会继续使用<Docker: 限制容器可用的内存>一文中创建的 docker 镜像 u-stress 进行压力测试,文中就不再过多的解释了. 限制可用的 CPU 个数 在 docker 1.13 及更高的

  • .NETCore Docker实现容器化与私有镜像仓库管理

    一.Docker介绍 Docker是用Go语言编写基于Linux操作系统的一些特性开发的,其提供了操作系统级别的抽象,是一种容器管理技术,它隔离了应用程序对基础架构(操作系统等)的依赖.相较于虚拟机而言,Docker共享的是宿主机的硬件资源,使用容器来提供独立的运行环境来运行应用.虚拟机则是基于Supervisor(虚拟机管理程序)使用虚拟化技术来提供隔离的虚拟机,在虚拟机的操作系统上提供运行环境!虽然两者都提供了很好的资源隔离,但很明显Docker的虚拟化开销更低! Docker涉及了三个核心

  • docker中容器的网络配置常用命令详解

    网络基础配置 虽然Docker可以根据镜像"多开"容器,并而每个容器互不影响,但并不代表容器与容器之间是完全决裂的.Docker在运行镜像的时候提供了映射容器端口到宿主主机.容器端口到另一个容器的网络互联功能,使得容器与宿主主机.容器与容器之间可以相互通信. ### 从外部访问容器应用 在启动容器的时候,如果不指定对应的参数,在容器外是无法通过网络来访问容器内的网络应用和服务的.当容器中运行一些需要被外部访问的网络应用时,可以通过-P或者-p参数来指定端口映射.当使用-P标记时,Doc

  • Docker创建容器时目录权限踩坑

    昨天写项目时需要用到Mysql的衍生版本percona, 就想用Doker来安装.结果踩了一晚上坑, 今早终于解决. 现记录在此. 这个坑原因是我对linux的目录权限问题不敏感导致的. 我的系统是ubuntu16.04, 运行 docker pull percona 拉取镜像时一切正常. 拉取完后,输入 docker images查看所有镜像, 显示正常: 然后我创建容器,命令为(执行时不要有换行): docker create --name percona -v /data/mysql-da

  • IDEA中使用Docker Compose容器编排的实现

    (一)确保idea 中连接到docker (二)打包镜像 我这里测试的是前后分离项目 如果是微服务中呢,由于前文中在pom.xml 中绑定了idea docker 打包插件 在其 父工程中使用 打包命令 即可将其子模块 打成一个个镜像 (三)Compos编排文件编写 docker compose 使用镜像编排 version: '3' #compose 文件版本(1.2.x+ 用3即可) services: #指定服务名 建议还是与项目名一致 虽然其并没有什么实际性联系 lei-server:

  • 详解docker nginx 容器启动挂载到本地

    首先nginx容器内部的结构: 进入容器: docker exec -it b511b6049f57 bash 查看容器的结构目录:其实每一个容器就相当于一个独立的系统. root@b511b6049f57:/# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr nginx的结构目录在容器中: 日志位置:/var/log/nginx/ 配置文件位置:/etc/nginx/

随机推荐