当前位置: 首页 > ops >正文

Docker 基于 Cgroups 实现资源限制详解【实战+源码】

本文将带你深入理解 Docker 如何借助 Linux Cgroups 实现对内存、CPU 等系统资源的精细化控制,并提供完整演示与图解、Compose 配置模板和资源包下载,适合初学者与工程师深入学习与实战。

文章目录

一、什么是 Cgroups?为什么对容器如此关键?

二、Docker 是如何利用 Cgroups 实现资源控制的?

Docker 资源限制关键参数汇总

三、演示一:内存限制 + OOM 触发实战

四、演示二:限制 CPU 使用率

五、Docker Compose 方式配置 Cgroup 限制

六、查看容器对应的 Cgroup 使用情况

七、Cgroup v1 和 v2 区别(面试常考)

八、加分建议:资源包上传

九、总结

十、下载资源包 + 图文PDF


一、什么是 Cgroups?为什么对容器如此关键?

Cgroups(Control Groups)是 Linux 内核提供的资源限制机制,支持对以下资源进行精细控制:

限制项说明
CPU控制分配的 CPU 核数或使用比例
内存限制容器使用的最大内存和 Swap
I/O限制磁盘读写速率
PID控制进程数量

容器的“轻量级资源隔离”正是依赖它实现。


二、Docker 是如何利用 Cgroups 实现资源控制的?

Docker 启动容器时传入资源限制参数,Docker Daemon 会基于这些参数在 /sys/fs/cgroup/ 下为容器生成资源控制配置。

Docker 资源限制关键参数汇总

类型参数示例
内存--memory--memory=256m
Swap 限制--memory-swap--memory-swap=512m
CPU 数--cpus--cpus=1.5
CPU 权重--cpu-shares--cpu-shares=512
指定 CPU 核心--cpuset-cpus--cpuset-cpus="0,2"

三、演示一:内存限制 + OOM 触发实战

docker run -it --name mem-limit-demo --memory=100m alpine /bin/sh

在容器中运行:

dd if=/dev/zero of=/dev/null bs=1M count=200

观察 OOM 行为:

dmesg | tail
docker logs mem-limit-demo

四、演示二:限制 CPU 使用率

docker run -it --cpus="0.5" --name cpu-limit-demo busybox

容器中运行死循环模拟压力:

while :; do :; done

 在宿主机使用 tophtop 观察容器 CPU 使用率是否接近 50%。


五、Docker Compose 方式配置 Cgroup 限制

version: '3'
services:app:image: myappdeploy:resources:limits:cpus: '1.0'memory: 512M

 deploy.resources 仅在 Swarm 模式下生效。普通 compose 建议用 mem_limit 等老版本字段或 docker run


六、查看容器对应的 Cgroup 使用情况

docker inspect <容器ID> | grep -i cgroup
cat /sys/fs/cgroup/memory/docker/<容器ID>/memory.limit_in_bytes

使用 cadvisorPrometheus + Grafana 可进行可视化监控。


七、Cgroup v1 和 v2 区别(面试常考)

对比项Cgroup v1Cgroup v2
控制器分布分散(cpu/memory 等分开)统一结构,更一致
支持度传统主流Ubuntu 22+/CentOS 8 开始推广
Docker 支持默认支持 v1,v2 需配置兼容性新版支持 v2(需设定内核参数)

八、加分建议:资源包上传

 推荐你上传如下配套内容作为资源,便于读者实践:

文件名内容描述
docker-cgroup-demo.sh一键运行多个限制容器脚本
docker-compose-limit.yamlCompose 限制模板
container_resource_monitoring.pdfCgroup 使用与监控文档
cadvisor-deploy.yaml容器资源可视化组件
cpu_limit_vs_performance.png限制图解对比图

九、总结

通过对 Cgroups 的配置和使用,Docker 实现了对容器资源的精细化控制。它在:

  • 多租户场景下保障隔离性

  • 测试场景中模拟低性能环境

  • 防止单容器资源过载崩溃主机

中都扮演着核心角色。


十、下载资源包 + 图文PDF

【免费】docker关于资源限制资源-CSDN下载


 如果你觉得有帮助,欢迎:

  • 点赞  收藏  评论 

  • 关注我了解更多 Docker、K8s、运维自动化干货!

http://www.xdnf.cn/news/15270.html

相关文章:

  • CAU数据挖掘第四章 分类问题
  • Linux修炼:开发工具
  • 软件开发中的瀑布式开发与敏捷开发
  • 2025湖北省信息安全管理与评估赛项一阶段技能书
  • 在 JetBrains 系列 IDE(如 IntelliJ IDEA、PyCharm 等)中如何新建一个 PlantUML 文件
  • 新手向:使用Python构建高效的日志处理系统
  • Llama系列:Llama1, Llama2,Llama3内容概述
  • Web攻防-PHP反序列化魔术方法触发条件POP链构造变量属性修改黑白盒角度
  • Python爬虫实战:研究xlwings库相关技术
  • Qt 3D模块加载复杂模型
  • CA复习功课
  • 前端进阶之路-从传统前端到VUE-JS(第五期-路由应用)
  • react中为啥使用剪头函数
  • 【Java入门到精通】(三)Java基础语法(下)
  • 博途多重背景、参数实例--(二)
  • 多线程的区别和联系
  • 子数组最大平均数 I
  • Leetcode力扣解题记录--第3题(滑动窗口)
  • WildCard野卡已跑路(包含gpt plus升级方案)
  • 程序改错---字符串
  • 【notes】注意力和KV Cache
  • 检查输入有效性(指针是否为NULL)和检查字符串长度是否为0
  • 阻有形,容无声——STA 签核之RC Corner
  • 加法器学习
  • docker搭建 与镜像加速器
  • scrapy项目开发流程
  • 【数据结构初阶】--单链表(一)
  • C++ Primer(第5版)- Chapter 7. Classes -001
  • AI大模型(七)Langchain核心模块与实战(二)
  • 嵌入式领域编码合集(为什么中文会乱码)