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

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.dtcms.com/a/277186.html

相关文章:

  • 从一个想法到一套软件——我的AI质检平台设计蓝图
  • 03.Python 字符串中的空白字符处理
  • 【爬虫】02 - 静态页面的抓取和解析
  • HTTP与HTTPS详解
  • 面试150 填充每个节点的下一个右侧节点指针Ⅱ
  • python函数快捷的传变量地址
  • 2025江苏省信息安全管理与评估赛项二三阶段任务书
  • docker 设置代理以及配置镜像加速
  • 【C++】优先队列简介与模拟实现 + 仿函数
  • Matplotlib(一)- 数据可视化与Matplotlib
  • 关于数据库的慢查询
  • python3的可变参数如何传递元组和字典
  • 一文讲懂填充与步幅
  • 《Google 软件工程》:如何写好文档?
  • 3. 【Blazor全栈开发实战指南】--Blazor是什么?为什么选择Blazor?
  • 在AI应用中Prompt撰写重要却难掌握,‘理解模型与行业知识是关键’:提升迫在眉睫
  • 【读书笔记】《Effective Modern C++》第4章 Smart Pointers
  • Node.js 聊天内容加密解密实战教程(含缓存密钥优化)
  • 4. 关于CEF3 使用的一些记录及仓颉端封装的情况
  • 手写muduo笔记
  • package.json 与 package-lock.json
  • 笔记/sklearn中的数据划分方法
  • 流程控制:从基础结构到跨语言实践与优化
  • 博客项目 laravel vue mysql 第五章 标签功能
  • 前端性能优化利器:懒加载技术原理与最佳实践
  • JAVA JVM虚拟线程
  • 第三章-提示词-解锁Prompt提示词工程核销逻辑,开启高效AI交互(10/36)
  • Vue3 Diff 算法片段解析:新旧节点队列之乱序比对与更新策略
  • 7月13日星期日今日早报简报微语报早读
  • Python PyWhat详解:一款高效的数据类型识别与扫描工具