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指令的网络模式
[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
- 指定容器只能用0、1两个内核
[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
[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
--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: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