docker的资源控制

docker的资源控制

对容器使用宿主机的资源进行限制。(cpu,内存,磁盘I/O)

docker使用linux自带的功能cgroup

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

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

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

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

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

  1. CPU资源控制

Linux通过CFS(Completely Fair Scheduler 完全公平调度器),来调度各个进程对CPU的使用。CFS的调度100ms。

我们也可以自定义容器的调度周期。已经在这个周期时间之内各个容器能够使用CPU的调度时间。

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

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

可以配置使用

CFS周期的有效范围:1m-1s,--cpu-period 1000-1000000

cat cpu.cfs_quota_us

-1

如果配置是-1,那么容器在使用宿主机cpu的时间不做任何限制

cat cpu.cfs_period_us

100000

CFS调度周期的长度,微秒,在每个周期内,容器可以使用指定比例的cpu时间,默认情况都是100毫秒。

CFS调度器,100毫秒就是定义了一个周期,在这个周期内,调度任务(容器)的基本时间单位。

100毫秒一次调度容器请求cpu的资源,然后内核把cpu资源分配给容器。

cpu.cfs_quota_us:调度请求之后,根据配额,内核分配给容器使用cpu的时间

docker stats test1/id 可以容器的运行占用宿主机资源的情况

docker top test1/id查看容器内PID和宿主机pid的映射关系。

容器占用cpu的时间

修改配置文件进行cpu限制

docker exec -it test1 bash

yum -y install vim

vim cpu.sh

#!/bin/bash

i=0

while true

do

let i++

done

chmod 777 cpu.sh

./cpu.sh

docker stats test1/id

#可以查看容器的运行占用宿主机资源的情况

docker top test1

#查看容器内的进程pid和容器外的进程pid映射关系

修改配置文件进行cpu限制:

docker ps -a

cd /sys/fs/cgroup/cpu/docker/d62c444a5e4118a078e84be01de30f18372b28dfe7358caee183f4da986fa40a

echo 50000 > cpu.cfs_quota_us

在容器中查看是否生效

cd /opt/

Top

创建容器时进行cpu限制

docker run -itd --name test2 --cpu-quota 40000 centos:7 /bin/bash

docker exec -it test2 bash

vim cpu.sh

#!/bin/bash

i=0

while true

do

let i++

done

chmod 777 cpu.sh

./cpu.sh

设置容器占用cpu的权重比:需要多个容器才能生效

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

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

--cpu-shares

#指定容器占用cpu的份额

#默认权重是1024,设置的值只能是1024的倍数

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

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

docker exec -it test3 bash

yum -y install epel-release

yum -y install stress

#下载模拟系统负载的工具

stress -c 4

在宿主机查看

top

docker exec -it test4 bash

yum -y install epel-release

yum -y install stress

stress -c 4

在宿主机查看

docker stats

#不加容器名就是显示所有容器占用情况

设置容器绑定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

容器占用cpu的时间

容器占用cpu的权重比(多个容器时,才有效)

容器占用cpu的内核数,绑定指定cpu内核给容器使用

内存:限制容器堆内存的使用

限制使用swap:想要限制容器使用swap。必须和限制内存一块使用。

如果限制了内存是512,swap是1.G,那么容器实际上能够使用swap空间,1g-512m

docker run -itd --name test6 -m 512m centos:7 /bin/bash

docker stats

如果不设置: -m 512m但是使用swap的空间是-m的两倍

如果设置--memory-swap的值,和内存限制一样,容器就不能使用swap。

-m 512m --memory-swapl-1,内存受限还是512M,但是容器使用swap空间不再限制。

docker run -itd --name test7 -m 512m --memory-swap=1g centos:7 /bin/bash

docker stats

磁盘I/O配置:

限制容器在磁盘上的读速度:

doker run -itd --name test8 --device-read-bps /dev/sda:1M centos:7 /bin/bash

限制容器在磁盘上的写限制

doker run -itd --name test9 --device-write-bps /dev/sda:1mb centos:7 /bin/bash

docker exec -it test9 bash

dd if=/cev/zero of=123.txt bs=1 count=10 oflag=direct

oflag=direct

在使用dd获取空字符集是从文件系统的缓存当中输入,速度是比较快的,禁用文件系统缓存,直接把数据写入磁盘,可以更真实的测试设备的性能,模拟直接写入物理设备的情况。

限制容器读取的次数

docker run -itd --name test10 --device-read-iops /dev/sda:100 centos:7/bin/bash

限制读取操作,每秒是100次

限制容器写入的次数

docker run -itd --name test10 --device-write-iops /dev/sda:50 centos:7/bin/bash

限制写入的操作,每秒是50次

清理docker占用的磁盘空间

docker system prune -a

删除已经停止的容器

删除所有未被使用的网桥设备

删除所有未被使用的镜像

删除创建容器时的缓存,以及无用的数据卷

相关推荐
2301_780789667 分钟前
云服务器被黑能恢复吗?云服务器被黑的解决办法
运维·服务器·网络·安全·web安全
淘小白_TXB219610 分钟前
头条百家采集改写发布软件用户使用手册
运维·服务器·头条采集·头条号采集·文章采集·头条采集软件
极客先躯1 小时前
高级java每日一道面试题-2025年12月07日-实战篇[Dockerj]-Docker daemon 的配置文件在哪里?常用的配置项有哪些?
java·docker·配置文件的实际位置·配置文件的格式规则·常用配置项全景与分类·配置如何生效·daemon 配置折射架构思维
渣渣灰95872 小时前
解决VMware上终端窗口太小问题
运维·服务器·经验分享
Tim风声(网络工程师)2 小时前
QoS (服务质量)和TE(流量工程)的区别
运维·网络
OpsEye2 小时前
企业监控避坑:别再把工具当体系!
运维·运维开发
线束线缆组件品替网3 小时前
Amphenol ICC RJE1Y33610162401解析:工业网络线束为何越来越重要?
运维·服务器·网络·数码相机·智能路由器·电脑·智能音箱
NOCSAH4 小时前
统好AI:采购发票与付款管理的自动化协同实践
运维·人工智能·自动化·统好ai
颯沓如流星4 小时前
【 Docker Desktop】基于Windows + WSL2 的环境配置, 快速部署一套Kubernetes Cluster
windows·docker·kubernetes
蜀道山老天师4 小时前
云原生监控入门:监控基础概念 + SLI/SLO/SLA 详解 + Prometheus 从零安装配置
linux·运维·云原生·prometheus