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  
查看配置是否生效

 

 

 

Docker中,可以通过设置容器资源限制来控制容器资源使用情况。以下是一些常见的方法来调整Docker容器资源限制: 1. CPU限制:可以使用`--cpus`选项来设置容器可以使用的CPU核心数。例如,`docker run --cpus 2`将限制容器使用的CPU核心数为2个。 2. 内存限制:可以使用`--memory`选项来设置容器可以使用的内存限制。例如,`docker run --memory 1g`将限制容器可使用的内存为1GB。 3. 网络带宽限制:可以使用网络驱动程序的功能来限制容器的网络带宽。不同的网络驱动程序可能有不同的配置选项,可以根据具体的网络驱动程序文档进行设置。 4. IO限制:可以使用`--device-read-bps`和`--device-write-bps`选项来设置容器的设备IO读写速率的限制。例如,`docker run --device-read-bps /dev/sda:1mb --device-write-bps /dev/sda:1mb`将限制容器对设备的读写速率为1MB/s。 5. 进程数限制:可以使用`--pids-limit`选项来设置容器可以创建的进程数量的限制。例如,`docker run --pids-limit 100`将限制容器创建的进程数量为100个。 需要注意的是,不同的Docker版本和环境可能会有不同的限制方式和选项。建议查阅官方文档或相关资源来获取更详细的信息和适用于特定版本的调整方法。 通过调整这些资源限制,可以有效地控制容器资源使用情况,提高应用程序的性能和稳定性,并避免容器之间的资源争用问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值