docker容器资源限制

1. 限制容器使用的CPU share 

 容器默认CPU share为1024。假设机器有4个CPU核,使用stress进行测试。

# root身份
docker run -it --rm --cpuset-cpus="1,2,3,4" stress --cpu 4

这里 --cpu  4   是stress参数,第二个容器设置share为512 

docker run --rm --it --cpuset-cpus="1,2,3,4" -c 512 stress --cpu 4

运行结果如上,CPU占比不是很明显。

2. 限制容器使用的CPU

使用 --cpus可以限制使用的CPU个数

docker run --it --rm --cpus=3 stress --cpu 4

这里限制使用3个CPU,但是启动了4个进程。

总共300%左右的使用率,如何3个核的设置。

--cpus的参数不能超过机器的核数。

3. 限制容器运行在某些CPU核上

使用 --cpuset-cpus=1,2,3,4 表示限制在1,2,3,4号核

 

4. 限制容器内存使用量

  • -m --memory:容器能使用的最大内存大小,最小值为 4m
  • --memory-swap:容器能够使用的 swap 大小
  • --memory-swappiness:默认情况下,主机可以把容器使用的匿名页(anonymous page)swap 出来,你可以设置一个 0-100 之间的值,代表允许 swap 出来的比例
  • --memory-reservation:设置一个内存使用的 soft limit,如果 docker 发现主机内存不足,会执行 OOM 操作。这个值必须小于 --memory 设置的值
  • --kernel-memory:容器能够使用的 kernel memory 大小,最小值为 4m。
  • --oom-kill-disable:是否运行 OOM 的时候杀死容器。只有设置了 -m,才可以把这个选项设置为 false,否则容器会耗尽主机内存,而且导致主机应用被杀死

关于 --memory-swap 的设置必须解释一下,--memory-swap 必须在 --memory 也配置的情况下才能有用。

  • 如果 --memory-swap 的值大于 --memory,那么容器能使用的总内存(内存 + swap)为 --memory-swap 的值,能使用的 swap 值为 --memory-swap 减去 --memory 的值
  • 如果 --memory-swap 为 0,或者和 --memory 的值相同,那么容器能使用两倍于内存的 swap 大小,如果 --memory 对应的值是 200M,那么容器可以使用 400M swap
  • 如果 --memory-swap 的值为 -1,那么不限制 swap 的使用,也就是说主机有多少 swap,容器都可以使用
docker run --rm -it -m 64m stress 

5. IO资源(磁盘)限制

这个是对IO速度限制,没有对容量限制

  • --device-read-bps:磁盘每秒最多可以读多少比特(bytes)
  • --device-write-bps:磁盘每秒最多可以写多少比特(bytes)
  • --device-read-iops:磁盘每秒最多可以执行多少 IO 读操作
  • --device-write-iops:磁盘每秒最多可以执行多少 IO 写操作
#限制读的速度为1M
docker run -it --device /dev/sda:/dev/sda --device-read-bps /dev/sda:1mb ubuntu:16.04 bash

#限制磁盘每秒最多读100次
docker run -it --device /dev/sda:/dev/sda --device-read-iops /dev/sda;100 ubuntu:16.0 bash

6. 修改docker本地镜像与容器的存储方法

docker的存放位置可以使用docker info查看,默认在/var/lib。

1. 建立软连接。首先停掉docker服务

systemctl stop docker 
mv /var/lib/docker /root/data/docker 
ln -s /root/data/docker /var/lib/docker 

2. 修改镜像和容器的存放路径

指定镜像和容器存放路径的参数是 --graph=/var/lib/docker 

在/etc/sysconfig/docker中修改

OPTIONS=--graph="/root/data/docker" --selinux-enabled -H fd://
#然后重启docker service 
systemctl restart docker 

#如果无效,如下操作
vim /etc/default/docker  
添加配置信息
DOCKER_OPTS="--graph=/home/docker"  
保存退出
service docker restart  
发现配置并没有生效
解决方案:
 mkdir -p /etc/systemd/system/docker.service.d  
 cat /etc/systemd/system/docker.service.d/Using_Environment_File.conf  
如果没有该文件则自行创建,添加以下内容
[Service]  
EnvironmentFile=-/etc/default/docker  
ExecStart=  
ExecStart=/usr/bin/docker daemon -H fd:// $DOCKER_OPTS  
载入配置重启服务
systemctl daemon-reload  
service docker restart  
查看配置是否生效

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值