本文將帶你深入理解 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
?在宿主機使用 top
或 htop
觀察容器 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
使用 cadvisor
或 Prometheus + 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、運維自動化干貨!