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.pswp.cn/diannao/91153.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/91153.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/91153.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux中的系統日志(Rsyslog)

一、實驗環境主機名系統網絡適配器IP地址serverarhel9NAT模式172.25.254.11/24serverbrhel9NAT模式172.25.254.22/24二、Rsyslog的基本參數&#xff08;1&#xff09;安裝rsyslog&#xff08;2&#xff09;rsyslog的服務名稱&#xff08;3&#xff09;rsyslog的主配置文件rsysl…

Spring Boot + Thymeleaf + RESTful API 前后端整合完整示例

關鍵詞&#xff1a;Spring Boot、Thymeleaf、RESTful API、前后端整合、用戶管理 ? 功能概述 本文將為你提供一個完整的 Spring Boot Thymeleaf RESTful API 的前后端整合項目&#xff0c;實現以下功能&#xff1a; 模塊功能用戶管理查看用戶列表、新增用戶、刪除用戶后端…

從零開始的MySQL學習

MySQL 從零開始的MySQL學習 第一節 數據庫 重點&#xff1a;數據庫通過SQL等標準語言進行動作&#xff0c;數據庫的概念、分類&#xff0c;數據管理系統&#xff08;操縱和管理數據庫的大型軟件&#xff09; 數據庫&#xff08;Database&#xff09; 是按照數據結構來組織、存儲…

Docker 高級管理--Dockerfile鏡像制作

二:Dockerfile 語法基礎 1:基礎指令 (1)FROM 指定基礎鏡像&#xff0c;所有的 Dockerfile 都必須以 FROM 指令開頭&#xff0c;它定義了新鏡像基于哪個基礎鏡像構建。 FRoM ubuntu:20.04 (2)MAINTAINER(已奔用&#xff0c;推薦使用LABEL) 用于指定鏡像的維護者信息。不過在較…

LeetCode 692題解 | 前K個高頻單詞

前K個高頻單詞一、題目鏈接二、題目三、分析四、代碼一、題目鏈接 692.前K個高頻單詞 二、題目 三、分析 本題目我們利用map統計出次數以后&#xff0c;返回的答案應該按單詞出現頻率由高到低排序&#xff0c;有一個特殊要求&#xff0c;如果不同的單詞有相同出現頻率&#…

C++ 中的 std::bind 用法

在現代 C++ 編程中,std::bind 是一個非常強大但常常被誤解的工具。它允許我們將函數(包括成員函數)、參數進行綁定,并生成一個新的可調用對象。這在編寫異步回調、事件處理、適配器模式等場景中非常有用。 ?? 一、std::bind 是什么? std::bind 是定義在 <functiona…

Spring Boot秒級冷啟動方案:阿里云FC落地實戰(含成本對比)

Spring Boot秒級冷啟動方案&#xff1a;阿里云FC落地實戰&#xff08;含成本對比&#xff09;一、冷啟動痛點與FC核心優勢1. 傳統Spring Boot冷啟動瓶頸2. 阿里云FC核心能力二、秒級冷啟動架構設計1. 整體架構2. 關鍵組件選型三、5大核心優化策略1. 應用瘦身&#xff08;JAR包精…

搜索引擎vs向量數據庫:LangChain混合檢索架構實戰解析

本文較長&#xff0c;建議點贊收藏&#xff0c;以免遺失。更多AI大模型應用開發學習視頻及資料&#xff0c;盡在聚客AI學院。一、LangChain搜索工具實戰&#xff1a;集成DuckDuckGo實現實時信息查詢 核心場景&#xff1a;解決大模型知識滯后問題&#xff0c;通過搜索引擎獲取實…

【算法】貪心算法:將數組和減半的最少操作次數C++

文章目錄前言題目解析算法原理代碼示例策略證明前言 題目的鏈接&#xff0c;大家可以先試著去做一下再來看一下思路。2208. 將數組和減半的最少操作次數 - 力扣&#xff08;LeetCode&#xff09; 題目解析 要認真去把題目看一遍&#xff0c;畫出題目中的有用信息。 示例一定是…

git異常退出,應該是內存不足

這次下載代碼&#xff1a; 公司虛擬機到了一定步驟&#xff0c;肯定退出。而家里的虛擬機則完全正常。我把家里的虛擬機復制到公司&#xff0c;還是崩潰。 差異在哪里&#xff1f;公司電腦虛擬機內存設置為10G&#xff0c;家里的16。因為家里電腦64G內存。 后來確認&#xff…

機器學習13——支持向量機下

支持向量機下 非線性支持向量機&#xff08;Non-linear SVMs&#xff09;詳解 核心思想 當數據在原始空間線性不可分時&#xff0c;通過**核技巧&#xff08;Kernel Trick&#xff09;**將數據映射到高維特征空間&#xff0c;使其在該空間中線性可分。 比如以下的樣本在一維空間…

GPT-4和Claude哪個好

選擇GPT-4還是Claude?這就像在問“蘋果還是橙子哪個更好”——?答案完全取決于你的具體需求?。兩者都是頂尖大語言模型,但各有特色。 我為你做了詳細對比,幫你快速定位哪個更適合你: ?? 核心能力對比 特性GPT-4 (OpenAI)Claude (Anthropic)?語言理解/推理?頂尖水平,…

RHCE考試 ——筆記

RHCE模擬測試exam_start ehcerht-vmctl start all考前說明? 請勿更改 IP 地址。DNS 解析完整主機名&#xff0c;同時也解析短名稱。? 所有系統的 root 密碼都是 redhat? Ansible 控制節點上已創建用戶賬戶 devops。可以使用 ssh 訪問? 所需的所有鏡像保存在鏡像倉庫 utilit…

信創 CDC 實戰 | TiDB 實時入倉難點與解決方案解析(以 ClickHouse 為例)

國產數據庫加速進入核心系統&#xff0c;傳統同步工具卻頻頻“掉鏈子”。本系列文章聚焦 OceanBase、GaussDB、TDSQL、達夢等主流信創數據庫&#xff0c;逐一拆解其日志機制與同步難點&#xff0c;結合 TapData 的實踐經驗&#xff0c;系統講解從 CDC 捕獲到實時入倉&#xff0…

Linux修煉:自動化構建make/Makefile

Hello大家好&#xff01;很高興我們又見面啦&#xff01;給生活添點passion&#xff0c;開始今天的編程之路&#xff01; 我的博客&#xff1a;<但凡. 我的專欄&#xff1a;《編程之路》、《數據結構與算法之美》、《C修煉之路》、《Linux修煉&#xff1a;終端之內 洞悉真理…

GaussDB 分布式部署下創建表方法

1、問題現象 分布式集群采用水平分表的方式,將業務數據表的元組/行打散存儲到各個節點內。 2、技術背景 通過全并行數據處理技術和快速定位到數據存儲位置等手段可極大提升數據庫性能,GaussDB分布式部署下可以創建倆種類型表,在做實際業務系統開發時根據業務場景創建不同表。…

Padavan路由器設置DNSmasq的DHCP Option

是下文的拓展&#xff1a;由于更換路由器為Padavan&#xff0c;需要配置DHCP option才能使得AC能夠納管AP 愛快路由器下水星&#xff08;Mercury&#xff09;無線管理器AC跨三層發現AP_愛快管理第三方ap-CSDN博客 DNSmasq全部配置請參考&#xff1a;Man page of DNSMASQ dhcp-…

Ubuntu 22.04 Server 虛擬機初始化配置與優化指南

? Ubuntu 22.04 本地/通用服務器初始化配置清單 1. 設置時區 sudo timedatectl set-timezone Asia/Shanghai2. 防火墻配置&#xff08;UFW&#xff09; sudo ufw enable sudo ufw default deny # 可選放通SSH或其他端口 sudo ufw allow 22/tcp # 查看狀態 sudo ufw status # 禁…

如何在服務器上運行一個github項目

一、事情的緣起 今天一個朋友向我推薦了小紅書上的一個視頻&#xff0c;我看了一下這是一個在演示TypeWords項目的視頻。這個項目是Github上采用vue來編寫的一個開源項目。我進入該項目后看到了給出的樣例網址2study.top&#xff0c;然后到上面看了一下。我發現這是一個通過打…

7.14 Java基礎|String 和StringBuilder

補充注意&#xff1a;1、StringBuilder 的 append 方法可以接收整數類型的參數&#xff0c;并將其自動轉換為字符串后添加到 StringBuilder 中2、該方法適用于所有基本數據類型&#xff08;如 long、double 等&#xff09;和對象&#xff08;通過調用其 toString() 方法&#x…