Docker的cgroup资源配置

cgroup

  • 啥玩意是cgroup
  • 咋配置

啥玩意是cgroup

cgroup是Control Groups的缩写,是Linux内核提供的一直可以限制、记录、隔离进程组所使用的物理资源,dokcer通过cgroup来控制容器使用的资源配额,包括CPU、内存、磁盘三大方面

咋配置

--build-arg=[] :
设置镜像创建时的变量;
--cpu-shares :
设置cpu使用权重;
--cpu-period :
限制CPU CFS周期;
--cpu-quota :
限制cPU CFS配额;
--cpuset-cpus :
指定使用的CPU id;
--cpuset-mems :
指定使用的内存id;
--disable-content-trust :忽略校验,默认开启;-f :
指定要使用的Dockerfile路径;
--force-rm :
设置镜像过程中册删除中间容器;
--isolation :
使用容器隔离技术;
--label=[ ] :
设置镜像使用的元数据;
-m :
设置内存最大值;
--memory-swap :
设置Swap的最大值为内存+swap, "-1"表示个/限swap;
--no-cache :
创建镜像的过程不使用缓存;
--pull :
尝试去更新镜像的新版本;
--quiet, -q :
安静模式,成功后只输出镜像工D;
--rm :
设置镜像成功后删除中间容器;
--shm-size :
设置/dev/ shm的大小,默认值是64M;
--ulimit :
Ulimit配置。
--squash :
将Dockerfile中所有的操作压缩为一层。
--tag, -t:
镜像的名字及标签,通常name: tag或者name
格式;可以在一次构建中为一个镜像设置多个标签。
--network :
默认default。在构建期间设置RUN指令的网络模式

  • CPU周期:ls为一个周期的定律,参数值一般为100000(秒)
    用stress压力测试工具测试CPU和内存使用情况
[root@docker ~]# mkdir /opt/stress
[root@docker stress]# vim Dockerfile
FROM centos:7
RUN yum install -y wget
RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
RUN yum install -y stress
[root@docker stress]# docker build -t centos:stress .


- 设置--cpu-period为0.1秒,--cpu-quota为0.2
[root@localhost ~]# docker run -itd --name cpu1023 --cpu-shares 1024 centos:stress stress -c 10
cb0d5cc5544d065965afeb0a1da254bb1b91b09bef47314df6dacba016e0114b
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS                      PORTS                                         NAMES
cb0d5cc5544d   centos:stress   "stress -c 10"           6 seconds ago    Up 5 seconds                                                              cpu1023
f0c631ca25b5   centos:stress   "stress -c 10"           22 seconds ago   Up 22 seconds                                                             cpu512

[root@localhost stress]# docker run -itd --name cpu512 --cpu-shares 512 centos:stress stress -c 10
f0c631ca25b59d6b4f8f67c0d36c75058ac2cb5776d449915d3789763548dc4a
[root@localhost stress]# docker stats

在这里插入图片描述

Docker提供了--cpu-period、--cpu-quota两个参数控制容器分配到的CPU时钟周期,单位为微秒
--cpu-period是用来指定容器对CPU的使用要在多长时间内做一次重新分配
--cpu-quota是用来指定在这个周期内,最多可以用多少时间来跑这个容器
[root@localhost stress]# docker rm -f `docker ps -aq`
cb0d5cc5544d
f0c631ca25b5
618ce8fc249e
04d9a4656392
ce3b9cc6ce37
[root@localhost stress]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost stress]# docker run -itd --name cpu01 --cpu-period 100000 --cpu-quota 200000 centos:stress 
400e9b2fda64f5f29bbc77daf161e94f20785e070cf40a6776e6acb59e521a1a
[root@localhost stress]# docker ps -a
CONTAINER ID   IMAGE           COMMAND       CREATED         STATUS         PORTS     NAMES
400e9b2fda64   centos:stress   "/bin/bash"   6 seconds ago   Up 5 seconds             cpu01
[root@localhost stress]# docker exec -it 400e9b2fda64 /bin/bash
[root@400e9b2fda64 /]# cat /sys/fs/cgroup/cpu/cpu.cfs_period_us
100000
[root@400e9b2fda64 /]# cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us
200000

[root@localhost stress]# top       //1
top - 01:41:54 up  2:18,  5 users,  load average: 0.43, 5.63, 4.09
Tasks: 242 total,   1 running, 241 sleeping,   0 stopped,   0 zombie
%Cpu0  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st


- 指定容器只能用01两个内核
[root@localhost stress]# docker run -itd --name cpu1 --cpuset-cpus 0-1 centos:stress
8d6665c24da91dfb87e35be26fc33a0debb7487d31e3795140d1f27c0e2a6d50
[root@localhost stress]# docker ps -a
CONTAINER ID   IMAGE           COMMAND       CREATED         STATUS         PORTS     NAMES
8d6665c24da9   centos:stress   "/bin/bash"   8 seconds ago   Up 7 seconds             cpu1
400e9b2fda64   centos:stress   "/bin/bash"   4 minutes ago   Up 4 minutes             cpu01
[root@localhost stress]# docker exec -it 8d6665c24da9 bash
[root@8d6665c24da9 /]# cat /sys/fs/cgroup/cpuset/cpuset.cpus
0-1

  • 创建两个容器,分别指定不同的内核,和cpu权限,对比
[root@localhost stress]# docker run -itd --name cpu2 --cpu-shares 512 --cpuset-cpus 1 centos:stress stress -c 1
aa1c15d185fa2230eb5489da086c382e6130dbebd0d12980b25c485306fbb396
[root@localhost stress]# docker run -itd --name cpu3 --cpu-shares 1023 --cpuset-cpus 3 centos:stress stress -c 1
cee8b9ff2f8f89cffb6afcca5d65d12151b83e3304cb7cf10ccc09bcffcc17f0
[root@localhost stress]#  docker ps -a
CONTAINER ID   IMAGE           COMMAND         CREATED          STATUS          PORTS     NAMES
cee8b9ff2f8f   centos:stress   "stress -c 1"   4 seconds ago    Up 3 seconds              cpu3
aa1c15d185fa   centos:stress   "stress -c 1"   11 seconds ago   Up 11 seconds             cpu2
[root@localhost stress]#  docker stats

在这里插入图片描述

  • 内存限额
docker -m或者--memory 设置内存使用限额
docker --memeory-swap 设置swap使用限额
[root@localhost stress]# docker run -itd -m 200M --memory-swap=300M centos:stress
a67ac2577a144b33cbd390631c47cf6d4591ebfd123b4fae755a00c4a11fc8ad
[root@localhost stress]#  docker stats
CONTAINER ID   NAME               CPU %     MEM USAGE / LIMIT   MEM %     NET I/O     BLOCK I/O   PIDS
a67ac2577a14   confident_merkle   0.00%     424KiB / 200MiB     0.21%     656B / 0B   0B / 0B     1

  • block IO 优先级
--blkio-weight 参数可以改变容器block IO的优先级,默认为500
[root@localhost stress]# docker run -it --name container_a --blkio-weight 600 centos:stress
[root@8f3dfdbfce5b /]# cat /sys/fs/cgroup/blkio/blkio.weight
600

  • bps和iops限制
bps:byte per second :每秒读写的数据量
iops:io per second :每秒IO的次数
--device-read-bps		#限制读某个设备的bps
--device-write-bps		#限制写莫格设备的bps
--device-read-iops		#限制读某个设备的iops
--device-write-iops		#限制写某个设备的iops
[root@localhost stress]# 
[root@localhost stress]# docker run -it --device-write-bps /dev/sda:5MB centos:stress
[root@27b1655c725d /]# dd if=/dev/zero of=test bs=1M count=1024 oflag=direct    //ctrl+c中断查看
^C22+0 records in
22+0 records out
23068672 bytes (23 MB) copied, 4.40123 s, 5.2 MB/s

[root@27b1655c725d /]# exit
exit
[root@localhost stress]# docker run -it centos:stress 
[root@c1d7405fece0 /]# dd if=/dev/zero of=test bs=1M count=1024 oflag=direct           //不中断查看
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.895697 s, 1.2 GB/s

你可能感兴趣的:(docker)