docker的资源控制

docker使用linux自带的功能cgroup

control grouos是linux内核系统提供的一种可以限制,纪录,隔离进程组所使用的物理资源的机制

docker借助这个机制,来实现资源的控制

cgroup本身是提供讲进程进行分组化管理的功能和接口的基础结构,分配控制的机制来实现资源控制

host 容器和宿主机共用一个网络命名空间

container 容器和容器之间共用一个网络命令空间,其他的资源依然是隔离的

如何对CPU资源进行限制

1、设置CPU使用率上限

linux通过CFS(Completely Fair SCheduler 完全公平调度器),来调度各个进程对CPU的使用,CFS的调度100ms ,我们也可以自定义容器的调度周期,已经在这个周期时间之内各个容器能够使用CPU的调度时间

进入容器CPU的配置
cd /sys/fs/cgroup/cpu/docker/686f75b621104e6e2b433aaef2cc106eddf3e2abfa99ae055720c98d1ac2615f

设置容器调度cpu的周期
--cpu-period

设置在每个周期内,容器可以使用CPU的时间
--cpu-quota

CFS调度周期的长度,微秒,在每个周期内,容器可以使用指定比例的cpu时间,默认情况都是100毫秒,CFS调度器,100毫秒就是自定义了 一个周期,在这个周期内,调度任务(容器)的基本时间单位

cat cpu.cfs_period_us
100毫秒
如果配置是-1,那么容器在使用宿主机CPU的时间不做限制
cat cpu.cfs_quota_us
-1

cpu.cfs_quota_us 调度器请求之后,根据配额,内核分配给容器使用CPU的时间
进行CPU压力测试
docker exec -it test1 bash
yum -y install vim
cd /opt
创建一个脚本

vim cpu.sh
#!/bin/bash
i=0
while true
do
let i++
done

赋权
chmod +x cpu.sh
./cpu.sh
top查看
设置50%的比例分配CPU使用时间上限
方式一:

可以创建一个容器,分配CPU使用资源
docker run -itd --name test2 --cpu-quota 50000 centos:7 /bin/bash

方式二:
在原有的容器中,进行修改容器cpu配置分配资源
cd /sys/fs/cgroup/cpu/docker/3ed82355f81151c4568aaa6e7bc60ba6984201c119125360924bf7dfd6eaa42b/
echo 50000 > cpu.cfs_quota_us


进入容器中
写一个脚本并执行
vim /cpu.sh
#!/bin/bash
i=0
while true
do
let i++
done

chmod +x cpu.sh
./cpu.sh

top
2、设置CPU资源占用比(设置多个容器时才有效)
需要多个容器才能生效

--cpu-shares 指定容器占用cpu的份额,模式权重。设置的值只能是1024的倍数

--cpu-shares 是给每个容器使用CPU设置了相对的权重,权重高的,可以使用CPU的资源更多,但是,如果只有一个运行,即便设置了权重,但是没有其他更高的权重的容器来占用资源

docker  run -itd --name test3  --cpu-shares 512 centos:7 /bin/bash

docker exec -it  test3 bash

yum -y install epel-rele
yum -y insatll stress
创建4个终端
stress -c 4
查看容器运行状态(动态更新)
docker stats

docker  run -itd --name test4  --cpu-shares 1024 centos:7 /bin/bash

docker exec -it test4 bash
yum -y install epel-rele
yum -y insatll stress
docker stats

stress -c 4
查看容器运行状态(动态更新)
docker stats
3、设置容器绑定指定的CPU

容器只能使用指定的cpu内核

docker run -itd --name test5 --cpuset-cpus 1 centos:7 /bin/bash

docker exec -it test5 bash

yum -y install epel-release

yum -y install stress 

stress -c 4
退出容器,执行 top 命令再按 1 查看CPU使用情况。
如何限制容器对内存的限制
docker run -itd --name test6 -m 512m centos:7 /bin/bash
docker stats
限制使用swap

想要限制容器使用swap ,必须和限制内存一起使用

docker run -itd --name test7 -m 512m --memory-swap=1g centos:7 /bin/bash
正常情况下,--memory-swap 的值包含容器可用内存和可用 swap。
所以 -m 512m --memory-swap=1g 的含义为:容器可以使用 512M 的物理内存,
并且可以使用 700M(1G - 300)的 swap。

如果 --memory-swap 设置为 0 或者 不设置,则容器可以使用的 swap 大小为 -m 值的两倍。
如果 --memory-swap 的值和 -m 值相同,则容器不能使用 swap。
如果 --memory-swap 值为 -1,它表示容器程序使用的内存受限,
而可以使用的 swap 空间使用不受限制(宿主机有多少 swap 容器就可以使用多少)。
对磁盘IO配额控制(blkio)的限制
读
docker run -itd --name test7 --device-read-bps /dev/sda:1M centos:7 /bin/bash
写
docker run -itd --name test8 --device-write-bps /dev/sda:1mb centos:7 /bin/bash

查看写线程 
docker exec -it test8 bash
cd /opt
dd if=/dev/zero of=123.txt bs=1M count=10

ofag=direct
在使用dd获取空字符集是从问价系统的缓存当中输入,速度是比较快的,禁用文件系统缓存,直接把数据写入磁盘,可以更新,真实的测试设备的性能,模拟直接写入物理设备的情况
dd if=/dev/zero of=123.txt bs=1M count=10 ofag=direct

限制容器读取的次数
docker run -itd --name test10 --device-read-iops /dev/sda:100 centos:7 /bin/bash
限制读取操作,每秒是100次

限制容器写入的次数
docker run -itd --name test11 --device-write-iops /dev/sda:50 centos:7 /bin/bash
限制写入的操作,每秒是50次
清除容器占用磁盘的空间
docker system prune -a
删除已经停止的容器
删除所有未被使用的网桥设备
删除未被使用的镜像
删除创建容器时的缓存,以及无用的数据卷
相关推荐
feng_blog66881 小时前
【docker-1】快速入门docker
java·docker·eureka
贾贾20231 小时前
配电自动化系统“三区四层”数字化架构
运维·科技·架构·自动化·能源·制造·智能硬件
远方 hi3 小时前
linux如何修改密码,要在CentOS 7系统中修改密码
linux·运维·服务器
元气满满的热码式3 小时前
K8S中Service详解(一)
云原生·容器·kubernetes
资讯分享周4 小时前
过年远控家里电脑打游戏,哪款远控软件最好用?
运维·服务器·电脑
chaodaibing4 小时前
记录一次k8s起不来的排查过程
运维·服务器·k8s
mcupro5 小时前
提供一种刷新X410内部EMMC存储器的方法
linux·运维·服务器
不知 不知6 小时前
最新-CentOS 7 基于1 Panel面板安装 JumpServer 堡垒机
linux·运维·服务器·centos
BUG 4046 小时前
Linux--运维
linux·运维·服务器
MXsoft6186 小时前
华为E9000刀箱服务器监控指标解读
大数据·运维