Docker运维教程(4)docker容器的资源限制

在Docker的默认配置中是没有对容器做资源限制的,在容器发生异常的状况下有可能耗光宿主机所有资源导致OOM,OOM一旦发生任何进程都有可能被系统杀掉。所以在启动Docker容器时最好是指定CPU、内存、硬盘大小等硬件配额。Docker通过cgroup来控制这些资源配额,也就是说下面讲到的命令其实都是在配置cgroup。比如调整了CPU的限制后,在/sys/fs/cgroup/cpu/docker/container_id/可以看到设置的值。cgroup分配的结果取决于当时主机和其他容器的运行状况,如果A容器很空闲,那么即使给它分配了更多份额,也会被其他忙碌的容器抢夺资源,是一种动态分配。设置好配额后可以在容器中用压力工具stress来测试。

一、Docker的资源限制

1、Docker内存限制

-m | --memory:设置容器可用内存大小,支持单位有k、m、g

--memory-swap:设置内存+swap的总大小,配合-m一起使用,该选项不指定的话默认是-m的2倍大小

--oom-kill-disable:不允许容器因为OOM被系统杀掉,建议配合-m选项使用,避免宿主内存被耗光

docker run -itd -m 1024m --memoery-swap=1524m --oom-kill-disable docker.io/centos  #容器使用的内存上限为1G,虚拟内存500M,超过该内存限制就会停止容器

2、Docker硬盘I/O限制,限制后在容器中读写文件都不会超限

--device-read-bps:限制读某个设备的bps

--device-write-bps:限制写某个设备的bps

--device-read-iops:限制读某个设备的iops

--device-write-iops:限制写某个设备的iops

docker run -it --name iotest --device-write-bps /dev/sda1:30M docker centos  #限制最高写速度为30M/S

3、Docker CPU配额设置

-c | --cpu-share:CPU权重设置,Docker会把CPU资源分成1024份,如果对一个容器设置了1024意味它独占所有CPU资源,如果多个容器同时进行了设置,那么每个容器最后会通过各自占有的百分比来分配CPU资源

--cpus:限制CPU核数

--cpuset-cpus:设置CPU亲和,让容器绑定在指定的CPU上  

docker run -it --name test  --cpu-shares 1024 docker.io/centos /bin/bash
docker run -it --name test  --cpu-shares  512 docker.io/centos /bin/bash  

CPU亲和设置,比如物理机有16个核心,创建的容器只能用0、1、2这三个内核 

docker run -itd --name testcpu --cpuset-cpus 0-2 docker.io/centos
cat /sys/fs/cgroup/cpuset/docker/dockerid/cpuset.cpus

二、使用progrium/stress镜像测试Docker配额限制

1、内存压测,如下代表启动一个线程,每个线程分配500M内存。由于超过了容器最大内存会报错退出:

docker run -it -m 200m --memory-swap=300m progium/stress --vm 1 --vm-bytes 400m

2、CPU测试。分配权重为2:1,容器启动后在宿主机执行top命令可以看到占比为66%、33% 

docker run --name "test1" -c 1024 centos

docker run --name "test2" -c 512 centos

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值