Docker运行资源控制

摘要:一个 docker host 上会运行若干容器,每个容器都需要 CPU 、 内存 和 IO 资源 。对于 KVM,VMware 等虚拟化技术,用户可以控制分配多少 CPU、内存资源给每个虚拟机。对于容器

概述

一个 docker host 上会运行若干容器,每个容器都需要 CPU 、 内存 和 IO 资源 。对于 KVM,VMware 等虚拟化技术,用户可以控制分配多少 CPU、内存资源给每个虚拟机。对于容器,Docker 也提供了类似的机制避免某个容器因占用太多资源而影响其他容器乃至整个 host 的性能。


内存限额

与操作系统类似,容器可使用的内存包括两部分: 物理内存和swap

 docker run -m 或 --memory 设置内存的使用限额。 docker run --memory-swap 设置内存和swap的使用限额。例如当运行命令: docker run -m 100M --memory-swap 200M ,该命令表明容器允许使用的最大内存为100M,允许使用的swap最大为100M。默认情况下,上面两组参数为 -1,即对容器内存和 swap 的使用没有限制。


CPU权重

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


Block IO 配置

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

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

默认情况下,所有容器能平等地读写磁盘,可以通过设置 -- blkio -weight 参数来改变容器 block IO 的优先级。 -- blkio -weight 与 -- cpu -shares 类似,设置的是相对权重值,默认为 500。在下面的例子中,container_A 读写磁盘的带宽是 container_B 的两倍。

docker run -it --name container_A -- blkio -weight 600 rhel
docker run -it --name container_B -- blkio -weight 300 rhel


本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://shenqiku.cn/article/FLY_11648