docker 1.6之资源配置

一..docker通过控制cgroup来控制容器使用的资源限制,可以对docker限制的资源CPU  内存   磁盘

1.指定容器使用cpu份额,可以用-c指定,默认每个docker容器的cpu份额都是1024

实验:开两个容器A和B,分别给1000和500的cpu份额

两个情况:(1)两个容器正常运行,占用同一个cpu   ,在cpu时间片分配时候,A容器比B容器多一倍机会获得CPU时间片

(2)分配的结果取决于当时其他容器的运行状态,比方容器A的进程一直是空的,B容器就可以获得比A容器更多的cpu份额

 

2.安装压测工具stress,可以用stress --help查看帮助信息

[root@elk ~]# yum install -y stress
-v        显示版本号
-q       不显示运行信息
-n       显示已完成的指令情况
-t        --timeout  N  指定运行N秒后停止        
           --backoff   N   等待N微妙后开始运行
-c       产生n个进程 :每个进程都反复不停的计算随机数的平方根,测试cpu
-i        产生n个进程 :每个进程反复调用sync(),sync()用于将内存上的内容写到硬盘上,测试磁盘io
-m     --vm n 产生n个进程,每个进程不断调用内存分配malloc()和内存释放free()函数 ,测试内存
          --vm-bytes B  指定malloc时内存的字节数 (默认256MB)
         --vm-hang N   指定在free栈的秒数  
-d    --hadd n  产生n个执行write和unlink函数的进程
         -hadd-bytes B  指定写的字节数
         --hadd-noclean  不unlink        
注:时间单位可以为秒s,分m,小时h,天d,年y,文件大小单位可以为K,M,G
 
案例:例1:产生2个cpu进程,2个io进程,20秒后停止运行
[root@elk ~]# stress -c 2 -i 2  --timeout 20
stress: info: [74928] dispatching hogs: 2 cpu, 2 io, 0 vm, 0 hdd
stress: info: [74928] successful run completed in 20s

运行起来立马开一个终端,用top查看

 

 

案例二:运行两个容器,给容器指定使用哪个cpu

[root@elk ~]# docker run --name t1 -it --cpuset-cpus 0,1 --cpu-shares 512 centos:7 /bin/bash


#--cpuset-cpus 0,1   指定t1容器只能运行在cpu0和cpu1上    
#--cpu-shares 512 给t1分配512的cpu份额
[root@elk ~]# docker run --name t2 -it --cpuset-cpus 0,1 --cpu-shares 1024 centos:7 /bin/bash


创建t2的容器,cpu份额是1024


分别进入两个容器,进行压力测试,可以看到t2比t1分配CPU的份额要多,

 

 二。docker容器控制内存分配

1.Docker提供参数-m, --memory=""限制容器的内存使用量。

案例一:允许容器使用的内存上限为128M:

 
[root@elk ~]# docker run --name t3 -it -m 128M centos:7

 案例二:创建一个docker,只使用2个cpu核心,只能使用128M内存

[root@elk ~]# docker run --name t4 -it -c 2 -m 128m centos:7 /bin/bash

 

 

三.docker容器控制IO

1.  格式:  --device-write-bps value    限制写入的速度,单位可以是kb、mb或者gb

                --device-read-bps  value   限制此设备上的读速度,单位可以是kb、mb或者gb    (场景:防止某个docker容器跑满磁盘的I/O)

# --device参数:将主机设备添加到容器

案例一:限制容器实例对硬盘的最高写入速度设定为 2MB/s

[root@elk ~]# docker run --name t1 -it   -v /var/www/test:/var/t6 --device /dev/sda1:/dev/sda1 --device-write-bps /dev/sda:2mb centos:7 /bin/bash

加红色部分不能是/dev/sda1 不知道为啥

 --device参数:将主机设备添加到容器

[root@elk ~]# mkdir /var/www/test -p    宿主机创建挂载目录
[root@elk ~]# docker run --name t1 -it  -v /var/www/test:/var/t6 --device /dev/sda1:/dev/sda --device-write-bps /dev/sda:2mb centos:7 /bin/bash
#宿主机上创建容器


[root@688e69f718b9 /]# time dd if=/dev/sda of=/var/t6/test.out bs=2M count=50 oflag=direct,nonblock
50+0 records in
50+0 records out
104857600 bytes (105 MB) copied, 50.034 s, 2.1 MB/s

real	0m50.035s
user	0m0.001s
sys	0m0.101s

注:dd 参数:
direct:读写数据采用直接IO方式,不走缓存。直接从内存写硬盘上。
nonblock:读写数据采用非阻塞IO方式,优先写dd命令的数据

  

四。docker容器运行结束释放资源

--rm 参数:当容器命令运行结束后,自动删除容器,自动释放资源 

[root@elk ~]# docker run -it --rm --name t9 centos:7 sleep 5       等5s后看容器被删除了
[root@elk ~]# docker ps|grep t9

posted @ 2022-06-09 23:57  多次拒绝黄宗泽  阅读(235)  评论(0编辑  收藏  举报