Docker 资源配额
Docker 资源配额
1、简介
Docker 通过 cgroup 来控制容器使用的资源限制,可以对 docker 限制的资源包括 CPU、内存、磁盘。
2、指定 docker 容器可以使用的 cpu 份额
默认每个 docker 容器的 cpu 份额值都是 1024。在同一个 CPU 核心上,同时运行多个容器时,容器的 cpu 加权的效果才能体现出来。cgroups 只在多个容器同时争抢同一个 cpu 资源时,cpu 配额才会生效。因此,无法单纯根据某个容 器的 cpu 份额来确定有多少 cpu 资源分配给它,资源分配结果取决于同时运行的其他容器的 cpu 分 配和容器中进程运行情况。
使用示例:
docker run -it --cpu-shares 512 centos /bin/bash
可以进入容器查看该容器的配额
[root@df176dd75bd4 /]# cat /sys/fs/cgroup/cpu/cpu.shares #查看结果: 512
通过-c 设置的 cpu share 并不是 CPU 资源的绝对数量,而是一个相对的权重值。某个容器最终能 分配到的 CPU 资源取决于它的 cpu share 占所有容器 cpu share 总和的比例。通过 cpu share 可以设置容器使用 CPU 的优先级。
比如在 host 中启动了两个容器:
- docker run --name "container_A" -c 1024 ubuntu
- docker run --name "container_B" -c 512 ubuntu
container_A 的 cpu share 1024,是 container_B 的两倍。当两个容器都需要 CPU 资源时,
container_A 可以得到的 CPU 是 container_B 的两倍。
需要注意的是,这种按权重分配 CPU 只会发生在 CPU 资源紧张的情况下。如果 container_A 处于空闲状态,为了充分利用 CPU 资源,container_B 也可以分配到全部可用的 CPU。
2.2、CPU core 核心控制
参数:--cpuset 可以绑定 CPU 对多核 CPU 的服务器,docker 还可以控制容器运行限定使用哪些 cpu 内核和内存节点,即使用-- cpuset-cpus 和--cpuset-mems 参数
运行示例:
[root@xianchaomaster1 ~]# docker run -itd --name docker10 --cpuset-cpus 0,1 --cpu-shares 512 centos /bin/bash
指定 docker10 只能在 cpu0 和 cpu1 上运行,而且 docker10 的使用 cpu 的份额 512
3、docker 容器控制内存
Docker 提供参数-m, --memory=""限制容器的内存使用量。
例 1:允许容器使用的内存上限为 128M:
[root@xianchaomaster1 ~]# docker run -it -m 128m centos
查看docker内存限制:
[root@40bf29765691 /]# cat /sys/fs/cgroup/memory/memory.limit_in_bytes
134217728
4、docker 容器控制 IO
--device-write-bps value 限制此设备上的写速度(bytes per second),单位可以是 kb、mb 或者 gb。
--device-read-bps value #限制此设备上的读速度(bytes per second),单位可以是 kb、mb 或 者 gb。
示例:
[root@xianchaomaster1 ~]# docker run -it -v /var/www/html/:/var/www/html --device
/dev/sda:/dev/sda --device-write-bps /dev/sda:2mb centos /bin/bash

浙公网安备 33010602011771号