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

发布于:2025-07-15 ⋅ 阅读:(19) ⋅ 点赞:(0)

本文将带你深入理解 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: myapp
    deploy:
      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 v1 Cgroup v2
控制器分布 分散(cpu/memory 等分开) 统一结构,更一致
支持度 传统主流 Ubuntu 22+/CentOS 8 开始推广
Docker 支持 默认支持 v1,v2 需配置兼容性 新版支持 v2(需设定内核参数)

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

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

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

九、总结

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

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

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

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

中都扮演着核心角色。


十、下载资源包 + 图文PDF

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


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

  • 点赞  收藏  评论 

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


网站公告

今日签到

点亮在社区的每一天
去签到