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

删除已经停止的容器

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

删除所有未被使用的镜像

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

相关推荐
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工2 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn862 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
酣大智2 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_2 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉2 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦2 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw
2601_961875242 天前
决战申论100题2026|最新|范文
linux·容器·centos·debian·ssh·fabric·vagrant