docker 资源限制实验

这里我通过下面三条命令来演示限制实验。这个实验呢我们需要借助 stress 的这么一个镜像,这个镜像一般用来测试比较多。这是一个 java 编写的镜像,可以无限制的去占用我们的内存和我们的 CPU 资源,所以用来做压测还是比较容易。

1、内存限制演示命令:

docker run --name stress -it --rm -m 256m lorel/docker-stress-ng:latest stress -vm 2

docker run:                     #启动镜像为容器
--name stress:                  #容器名为 stress
-it#交互命令
--rm#容器一旦退出就会被删除
-m 256m:                        #设置我们的硬限制大小为 256 mb(硬限制)
lorel/docker-stress-ng:latest:  #使用的镜像名称
stress:                         #在镜像中执行的命令
-vm 2#用两个消耗我们内存的进程去执行,进程越多的话占用我们的内存速度就会越快

2、CPU 的使用个数限制演示命令:

docker run --name stress -it --rm --cpus 2 lorel/docker-stress-ng:latest stress --cpu 8

docker run:                     #启动镜像为容器
--name stress:                  #容器名为 stress
-it#交互命令
--rm#容器一旦退出就会被删除
--cpus 2#能够使用我们的两核 CPU 
lorel/docker-stress-ng:latest:  #使用的镜像名称
stress:                         #在镜像中执行的命令
--cpu8#使用8各不同的 CPU 线程来进行我们的 CPU 压榨

3、使用的第几个 CPU 限制演示命令:

docker run --name stress -it --rm --cpuset-cpus 0 lorel/docker-stress-ng:latest stress --cpu 8

docker run:                     #启动镜像为容器
--name stress:                  #容器名为 stress
-it#交互命令
--rm#容器一旦退出就会被删除
--cpuset-cpus 0#0 是代表第一个CPU, 一直使用的话就是百分之百的CPU使用率
lorel/docker-stress-ng:latest:  #使用的镜像名称
stress:                         #在镜像中执行的命令
--cpu 8#使用8各不同的 CPU 线程来进行我们的 CPU 压榨

4、CPU 权重调度演示命令

docker run --name stress -it --rm --cpu-period=10000 --cpu-quota=20000 lorel/docker-stress-ng:latest stress --cpu 8

docker run:                     #启动镜像为容器
--name stress:                  #容器名为 stress
-it#交互命令
--rm#容器一旦退出就会被删除
--cpu-period=10000#一个 CPU 的调度周期为10000
--cpu-quota=20000#一个 CPU 的调度周期中能够使用的 CPU 时间为20000,也就是 CPU 调度周期的两倍,所以就是能够使用两个 CPU。

lorel/docker-stress-ng:latest:  #使用的镜像名称
stress:                         #在镜像中执行的命令
--cpu 8#使用8各不同的 CPU 线程来进行我们的 CPU 压榨

9.3.1 内存限制实验范例:

内存限制演示命令:

docker run --name stress -it --rm -m 256m lorel/docker-stress-ng:latest stress -vm 2

docker run:                     #启动镜像为容器
--name stress:                  #容器名为 stress
-it#交互命令
--rm#容器一旦退出就会被删除
-m 256m:                        #设置我们的硬限制大小为 256 mb
lorel/docker-stress-ng:latest:  #使用的镜像名称
stress:                         #在镜像中执行的命令
-vm 2#用两个消耗我们内存的进程去执行,进程越多的话占用我们的内存速度就会越快

操作演示过程:

1、删除所有容器,给他一个干净的环境。

[16:30:30 root@docker ~]#docker rm -f $(docker ps -a -q )

2、输入我们的内存限制演示命令。

输入完了这条命令之后就会看见它是在前台执行,就开始压力测试

[16:33:46 root@docker ~]#docker run --name stress -it --rm -m 256m lorel/docker-stress-ng:latest stress -vm 2

3、这时候我们在开启一个新的终端,输入docker stats stress 查看该容器消耗的资源

[16:35:48 root@docker ~]#docker stats stress
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
9c87bcca1ab9        stress              184.21%             255.9MiB / 256MiB   99.95%              656B / 0B           0B / 0B             5

MEM USAGE:#当前内存使用率
LIMIT:#内存总量为我们限制的256
MEM %:#使用了百分百

从而实现了我们的内存资源限制,这个就是我们 -m 选项带来的含义,可以使用的最大内存资源率

9.3.2 CPU 的使用个数限制实验范例:

CPU 的使用数限制演示命令

注意:在使用前记得将虚拟机的 CPU 调制到 8 核

docker run --name stress -it --rm --cpus 2 lorel/docker-stress-ng:latest --cpu 8

docker run:                     #启动镜像为容器
--name stress:                  #容器名为 stress
-it#交互命令
--rm#容器一旦退出就会被删除
--cpus 2#能够使用我们的两核 CPU 
lorel/docker-stress-ng:latest:  #使用的镜像名称
stress:                         #在镜像中执行的命令
--cpu8#使用8各不同的 CPU 线程来进行我们的 CPU 压榨

操作演示过程:

1、输入我们的 CPU 使用数限制命令进行演示。

[16:55:31 root@docker ~]#docker run --name stress -it --rm --cpus 2 lorel/docker-stress-ng:latest stress --cpu 8

2、这时候我们在开启一个新的终端,输入docker stats stress 查看该容器消耗的资源

[16:51:48 root@docker ~]#docker stats stress

CPU %: #CPU 使用率百分之两百,因为我们在运行这个容器的时候就告诉他了只能使用两个 CPU ,所以两个 CPU 就是百分之两百,但是有时候 CPU 使用会超过 200这是因为 CPU 是一个动态调度过程。

9.3.3 使用第几个 CPU 限制范例:

使用的第几个 CPU 限制演示命令:

docker run --name stress -it --rm --cpuset-cpus 0 lorel/docker-stress-ng:latest stress --cpu 8

docker run:                     #启动镜像为容器
--name stress:                  #容器名为 stress
-it#交互命令
--rm#容器一旦退出就会被删除
--cpuset-cpus 0#0 是代表第一个CPU, 一直使用的话就是百分之百的CPU使用率
lorel/docker-stress-ng:latest:  #使用的镜像名称
stress:                         #在镜像中执行的命令
--cpu 8#使用8各不同的 CPU 线程来进行我们的 CPU 压榨

操作演示过程:

1、输入我们的使用第几个 CPU 演示命令

[17:13:14 root@docker ~]#docker run --name stress -it --rm --cpuset-cpus 0 lorel/docker-stress-ng:latest stress --cpu 8

2、这时候我们在开启一个新的终端,输入docker stats stress 查看该容器消耗的资源

[17:15:11 root@docker ~]#docker stats stress

CPU % :     #使用率为百分之百,因为 CPU 是一个动态浮动调度过程所以一直保持在百分之百左右不会超过太多

9.3.4 CPU 权重调度范例:

CPU 权重调度演示命令

docker run --name stress -it --rm --cpu-period=10000 --cpu-quota=20000 lorel/docker-stress-ng:latest stress --cpu 8

docker run:                     #启动镜像为容器
--name stress:                  #容器名为 stress
-it#交互命令
--rm#容器一旦退出就会被删除
--cpu-period=10000#一个 CPU 的调度周期为10000
--cpu-quota=20000#一个 CPU 的调度周期中能够使用的 CPU 时间为20000,也就是 CPU 调度周期的两倍,所以就是能够使用两个 CPU。

lorel/docker-stress-ng:latest:  #使用的镜像名称
stress:                         #在镜像中执行的命令
--cpu 8#使用8各不同的 CPU 线程来进行我们的 CPU 压榨

操作演示过程:

1、输入我们的 CPU 权重调度命令。结果是 CPU应该是使用百分之两百的结果

[17:19:56 root@docker ~]#docker run --name stress -it --rm --cpu-period=10000 --cpu-quota=20000 lorel/docker-stress-ng:latest stress --cpu 8

2、这时候我们在开启一个新的终端,输入docker stats stress 查看该容器消耗的资源。

[17:15:11 root@docker ~]#docker stats stress

CPU %:          #百分之两百

以上就是我们资源限制做的几个小实验。所以这些资源限制的参数怎么使用是需要大家去理解以及相互配合的。

点赞