Docker 资源限制

30 篇文章 0 订阅
27 篇文章 0 订阅

限制容器对内存的使用:

下载progrium/stress镜像 作为压力测试

[root@localhost ~]# docker pull progrium/stress
docker  run --help
-m, --memory bytes   				内存限制             
--memory-reservation bytes 			内存的软限制   
--memory-swap bytes  				内存+交换分区    
--memory-swappiness int   			优化容器内存交换

进行压力测试

docker run -m 200M --memory-swap=300M progrium/stress  --vm 1 --vm-bytes 290M

 --vm 1:启动一个内存工作线程
 --vm-bytes 280M:每个线程分配280内存

因为280M在可分配的范围(300M)内,所以可以正常工作

一直循环分配,释放280M内存

docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 310M

分配的内存超过限额,stress线程报错,容器退出

注:如果在容器启动时只指定 -m 而不指定–memory-swap
那么默认是-m的二倍,容器可以使用无限制物理内存和swap

限制容器对CPU使用

默认模式下,所有容器是平等使用CPU资源并且没有限制

可以使用-c或- -cpu-shares设置容器使用CPU的权重,默认为1024

通过-c设置的权重并不是CPU资源的绝对数量,而是一个相对的权重值。某个容器最终能分配到的CPU资源取决于它的cpu share所占容器cpu share总和的比例

docker run   --name "con_a"  -it -c 1024 progrium/stress --cpu 1   	
docker run   --name "con_b"  -it -c 512 progrium/stress --cpu 1

con_a的cpu share是1024,con_b的cpu share是512,当都需要cpu资源时,con_a就是con_b的两倍

-c, --cpu-shares int        权重的设定       
--cpus decimal          	设定cpu的数量         
--cpuset-cpus string      	允许执行的cpu       
--cpuset-mems string     	允许执行的MEMs

限制容器的Block IO

Block IO指的是磁盘的读写,docker可通过设置权重,限制bps和iops的方式控制容器读写磁盘的带宽,目前只对 direct IO(不使用文件缓存)有效

block IO权重

默认情况下,所有容器可以平等读写磁盘,可以通过设置 - -blkio-weight参数来改变容器block IO的优先级,默认是500

docker  run -it --name con_a --blkio-weight 600 centos7
docker  run -it --name con_b --blkio-weight 300 centos7

con_a读写磁盘的带宽是con_b的两倍

限制bps和iops bps是byte per second,每秒读写的数据量
iops是io per second,每秒IO的次数

限制容器写/dev/sda的速率为30MB/s

docker run -it --device-write-bps /dev/sda:30MB centos7:latest /bin/bash

实现容器的底层技术

cgroup

cgroup全称Control Group,可以设置进程使用CPU,内存和IO资源的限额

启动一个容器

docker run   --name "con_a"  -it -c 1024 progrium/stress --cpu 1

在/sys/fs/cgroup/cpu/docker/目录里,linux会为每个容器创建一个cgroup目录,以容器长ID命名

目录中包含所有cpu相关的cgroup配置,文件cpu.shares保存的就是 - -cpu-shares的配置
/sys/fs/cgroup/memory/docker/保存的是内存的配置
/sys/fs/cgroup/blkio/docker/保存的是Block IO的配置

Mount namespace

Mount namespace让容器看上去拥有整个文件系统
容器有自己的/目录,可以执行mount,umount命令,不会影响到host

UTS namespace

UTS namespace让容器拥有自己的hostname,可以通过-h或- - hostname设置

IPC namespace

IPC namespace让容器拥有自己的共享内存和信号量来实现进程间通信,不会与host或其他的容器混在一起

PID namespace

PID namespace让容器拥有自己独立的PID

Network namespace

Network namespace让容器拥有自己独立的网卡,IP,路由等

User namespace

User namespace让容器能够管理自己的用户,host不能看到容器中创建的用户

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值