容器-資源隔離機制

一. 引言:?

??大家都知道,在一臺機器上,可以運行任意(根據系統資源)個容器實例。且各容器間是相互獨立,不做任何關聯的。那么,docker是通過什么方式來實現容器隔離的呢? 接下來我們了解下。

二. 關于容器隔離機制:

? ?容器的隔離機制是實現 “輕量級虛擬化” 的核心,通過Linux 內核原生技術與容器運行時(如 docker、containerd)的封裝,在共享宿主機內核的同時,為每個容器提供獨立的資源、網絡、文件系統等環境,避免容器間相互干擾。其本質是 “在同一內核中為進程組劃定資源與權限邊界”,而非像虛擬機那樣完全隔離操作系統。

? ?主要分為一下三個大方向:?

Namespace ?可實現容器間的隔離
Cgroups ? ?可限制容器的資源使用
Chroot ? ? 文件系統的隔離(掛載到物理根目錄(文件系統)下的子目錄(虛擬文件系統))

?1. 關于namespace:

?? ?Linux 內核從版本 2.4.19 開始陸續引入了 namespace 的概念。其目的是將某個特定的全局系統資源(global system resource)通過抽象方法使得namespace 中的進程看起來擁有它們自己的隔離的全局系統資源實例。Linux 內核中實現了六種 namespace,按照引入的先后順序,列表如下:

namespace

引入的相關內核版本被隔離的全局系統資源在容器語境下的隔離效果
Mount?Linux 2.4.19文件系統掛接點每個容器能看到不同的文件系統層次結構
?UTS?Linux 2.6.19主機名和域名每個容器可以有自己的 hostname 和 domainame
IPC?Linux 2.6.19

System V IPC:消息隊列,信號量,共享內存

每個容器有其自己的?System V IPC 和消息隊列文件系統,因此,只有在同一個 IPC namespace 的進程之間才能互相通信
PID?Linux 2.6.24進程?ID(編號)?每個 PID namespace 中的進程可以有其獨立的 PID; 每個容器可以有其 PID 為 1 的root 進程;也使得容器可以在不同的 host 之間遷移,因為 namespace 中的進程 ID 和 host 無關了。這也使得容器中的每個進程有兩個PID:容器中的 PID 和 host 上的 PID。
Network?始于Linux 2.6.24 完成于 Linux 2.6.29網絡相關的系統資源每個容器用有其獨立的網絡設備,IP 地址,IP 路由表,/proc/net 目錄,端口號等等。這也使得一個 host 上多個容器內的同一個應用都綁定到各自容器的 80 端口上。
User?始于 Linux 2.6.23 完成于 Linux 3.8)用戶和組 ID 空間?在 user namespace 中的進程的用戶和組 ID 可以和在 host 上不同;?每個 container 可以有不同的 user 和 group id;一個 host 上的非特權用戶可以成為 user namespace 中的特權用戶;
?

Linux內核實現namespace的主要目的就是為了實現輕量級虛擬化(容器)服務。在同一個namespace下的進程可以感知彼此的變化,而對外界的進程一無所知。這樣就可以讓容器中的進程產生錯覺,仿佛自己置身于一個獨立的系統環境中,以此達到獨立和隔離的目的。

2.?Cgroups:

? ?容器通過namespace機制實現了環境上的隔離。但只有運行環境隔離還不夠,因為這些進程還是可以不受限制地使用系統資源,比如網絡、磁盤、CPU以及內存 等。一方面,是為了防止它占用了太多的資源而影響到其它進程;另一方面,在系統資源耗盡的時候,linux 內核會觸發 OOM,這會讓一些被殺掉的進程成了無辜的替死鬼。因此,為了讓容器中的進程更加可控,Docker 使用 Linux cgroups 來限制容器中的進程允許使用的系統資源。?

?Linux Cgroup 可為系統中所運行任務(進程)的用戶定義組群分配資源 — 比如 CPU 時間、系統內存、網絡帶寬或者這些資源的組合。可以監控您配置的 cgroup,拒絕 cgroup 訪問某些資源,甚至在運行的系統中動態配置您的 cgroup。它以一組進程為目標進行系統資源分配和控制。

它主要提供了以下功能:

Resource limitation: 限制資源使用,比如內存使用上限以及文件系統的緩存限制。
Prioritization: 優先級控制,比如:CPU利用和磁盤IO吞吐。
Accounting: 資源統計,一些審計或一些統計,主要目的是為了計費。
Control: 進程控制,掛起進程,恢復執行進程。
使用 cgroup,系統管理員可更具體地控制對系統資源的分配、優先順序、拒絕、管理和監控。可更好地根據任務和用戶分配硬件資源,提高總體效率。在實際中,系統管理員一般會利用CGroup做下面這些事:
隔離一個進程集合(比如:nginx的所有進程),并限制他們所消費的資源,比如綁定CPU的核。
為這組進程分配其足夠使用的內存
為這組進程分配相應的網絡帶寬和磁盤存儲限制
限制訪問某些設備(通過設置設備的白名單)

? 3.?Chroot:?

? ??是容器的 “獨立文件系統根目錄”,通過分層掛載(UnionFS)?實現,核心作用是:

1. 隔離性:容器內的/目錄與宿主機完全獨立,修改容器內文件(如/etc/passwd)不會影響宿主機。
2. 輕量性:采用 “基礎鏡像層 + 容器層” 的分層結構,多個容器可共享基礎鏡像層。
3. 一致性:每個容器啟動時都基于相同的基礎鏡像,確保運行環境一致(避免 “本地能跑,線上跑不了”)。

? 關鍵技術:?UnionFS(聯合文件系統)

??常用的 UnionFS 實現包括overlay2(Docker 默認)、aufs、btrfs等,以overlay2為例,其分層結構如下:

lowerdir:基礎鏡像層(可多層,如 “操作系統層 + Nginx 層”),僅可讀;
upperdir:容器層,容器運行時的所有寫操作(如創建 / 修改文件)都在這一層;
merged:容器內看到的 “根目錄”,是lowerdir和upperdir的聯合掛載結果;
workdir:臨時工作目錄,用于 UnionFS 的內部操作(用戶不可見)。

三. 容器隔離 vs 虛擬機隔離:?

對比維度容器虛擬機
隔離核心共享宿主機內核,通過 namespace/cgroup 隔離進程完全隔離操作系統(含內核),通過 hypervisor 虛擬化硬件
資源開銷輕量(MB 級內存,秒級啟動),共享宿主機資源重量級(GB 級內存,分鐘級啟動),每個 vm 需獨立分配資源
安全性較弱(共享內核,存在 “內核漏洞突破隔離” 風險)較強(完全隔離內核,VM 內攻擊難以影響宿主機)
兼容性依賴宿主機內核版本(如容器內無法運行與宿主機內核不兼容的程序)兼容性強(VM 內可運行任意操作系統,與宿主機內核無關)

四. 無法隔離的資源:?

  1. 內核版本:容器內的內核版本與宿主機完全一致,無法在容器內升級內核;
  2. 內核模塊:容器無法加載 / 卸載宿主機內核模塊(需宿主機提前加載);
  3. 系統時間:默認情況下,容器內修改系統時間會同步修改宿主機時間。
  4. 硬件資源:部分硬件資源(如 CPU 緩存、NUMA 節點)無法精細隔離,可能存在 “緩存側信道攻擊” 風險;
  5. 內核漏洞:若宿主機內核存在漏洞(如 Dirty COW),容器內的惡意進程可能利用漏洞突破隔離,獲取宿主機權限。

- ?--------------------------------------------------------------------------------------------------------------------------

? ? ? ? ? ? ? ? ? ? ? ? ?深耕運維行業多年,擅長運維體系建設,方案落地。歡迎交流!

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?“V-x”: ywjw996

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?《 運維經緯 》


?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/96216.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/96216.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/96216.shtml

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

相關文章

Agentic RL Survey: 從被動生成到自主決策

Agentic RL Survey: 從被動生成到自主決策 本文將系統解讀《The Landscape of Agentic Reinforcement Learning for LLMs: A Survey》這篇綜述。該綜述首次將智能體強化學習(Agentic RL)與傳統LLM-RL范式正式區分,通過MDP/POMDP理論框架梳理…

徹底禁用 CentOS 7.9 中 vi/vim 的滴滴聲

在 VMware 虛擬機中安裝的 CentOS 7.9 系統,即使通過修改 /etc/inputrc 禁用了終端鈴聲(set bell-style none),vi 或 vim 編輯時仍可能發出滴滴聲。這是因為 vi/vim 有自己獨立的鈴聲控制機制。以下是解決方法:方法 1&…

基于A2A和ADK的內容規劃代理

項目概述 Content Planner Agent 是一個基于 Google Agent Development Kit (ADK) 和 Python A2A SDK 構建的智能內容規劃代理。該代理能夠根據高層次的內容描述,創建詳細的內容大綱。 什么是A2A Protocol A2A Protocol(Agent2Agent 協議)…

Linux-條件變量

文章目錄條件變量概述條件變量的優缺點條件變量相關函數pthread_cond_init函數pthread_cond_destroy函數pthread_cond_wait函數pthread_cond_signal函數測試生產者和消費者模型條件變量 概述 與互斥鎖不同,條件變量是用來等待而不是用來上鎖的,條件變量…

[硬件電路-166]:Multisim - SPICE與Verilog語言的區別

SPICE與Verilog語言在電子設計領域中扮演不同角色,SPICE是電路仿真語言,用于精確模擬電路行為;Verilog是硬件描述語言,用于描述數字電路的結構和行為。以下是兩者的詳細區別:一、核心定位與用途SPICE:電路仿…

玩轉Docker | 使用Docker部署Umbrel操作系統

玩轉Docker | 使用Docker部署Umbrel操作系統 前言 一、 Umbrel 介紹 Umbrel簡介 Umbrel主要特點 二、系統要求 環境要求 環境檢查 Docker版本檢查 檢查操作系統版本 三、部署Umbrel服務 下載Umbrel鏡像 編輯部署文件 創建容器 檢查容器狀態 檢查服務端口 安全設置 四、訪問Umbr…

Flink Task線程處理模型:Mailbox

Task的線程 和 MailboxProcessor 的綁定executingThread 是 Task 類(StreamTask 的父類)在構造時創建的物理線程。MailboxProcessor 是 StreamTask 用來處理異步事件和驅動其主要處理邏輯(processInput)的核心組件。它們之間的綁定…

OpenCV 銀行卡號識別

目錄 一、項目原理與核心技術 二、環境準備與工具包導入 1. 環境依賴 2. 工具包導入 三、自定義工具類 myutils.py 實現 四、主程序核心流程(銀行卡識別.py) 1. 命令行參數設置 2. 銀行卡類型映射 3. 輔助函數:圖像展示 五、步驟 1…

計算機二級Python

一.靜態語言和腳本語言高級語言根據計算機執行機制的不同分為兩類:靜態語言和腳本語言靜態語言的核心特征:變量的類型在編譯時(寫代碼時)就必須確定并固定下來,即在使用一個變量前必須顯式地聲明它地類型一旦聲明&…

Mybatis Log Plugin打印日志,會導致CPU升高卡死

原因 大量日志輸出:MyBatis Log Plugin 會打印大量的 SQL 日志,包括 SQL 語句及其參數。如果項目中 SQL 查詢頻繁且復雜,日志量會非常大,導致 CPU 使用率升高,甚至卡死。 日志級別設置不當:如果將日志級別設置為 DEBUG 或 TRACE,MyBatis 會輸出非常詳細的日志信息,這會…

鴻蒙:深色模式適配和淺色模式的切換

前言: 有些時候我們需要對應用進行深色模式的適配處理,并且在不需要的時候切換到淺色狀態,下面和大家一起照著官方文檔來學習。 下面是官方文檔的鏈接: https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-dark-…

Coze源碼分析-資源庫-刪除插件-后端源碼-數據訪問和基礎設施層

5. 數據訪問層 5.1 倉儲接口定義 插件倉儲接口 文件位置:backend/domain/plugin/repository/plugin.go type PluginRepository interface {// DeleteDraftPlugin 刪除插件草稿DeleteDraftPlugin(ctx context.Context, pluginID int64) error// DeleteAPPAllPlugins …

案例一: 對基礎選擇器的使用【網頁盒子】

【1】樣例&#xff1a;首先&#xff0c;觀察到&#xff0c;幾個元素豎著排列的&#xff0c;所以使用塊級元素&#xff0c;而不是行內元素。【2】代碼演示<head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,…

爬蟲項目優化:如何用 Redis 實現 “斷點續爬”?避免重復采集電商數據

在電商數據采集場景中&#xff0c;爬蟲常因網絡波動、服務器重啟、IP 封禁等問題中斷。若缺乏斷點續爬機制&#xff0c;重啟后需從頭開始&#xff0c;不僅浪費帶寬與時間&#xff0c;還可能因重復采集導致數據冗余。Redis 憑借其高性能、原子操作、多樣數據結構的特性&#xff…

決策樹概念與原理

決策樹簡介決策樹是一種樹形結構樹中每個內部節點表示一個特征上的判斷&#xff0c;每個分支代表一個判斷結果的輸出&#xff0c;每個葉子節點代表一種分類結果(僅舉例無其他意義或隱喻)就像一個女孩去相親&#xff0c;那么首先詢問是否大于30&#xff0c;大于則不見&#xff0…

SQL面試題及詳細答案150道(116-135) --- 高級查詢與函數篇

《前后端面試題》專欄集合了前后端各個知識模塊的面試題,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,MySQL,Linux… 。 前后端面試題-專欄總目錄 文章目錄 一、本文面試題目錄 116. 如何使用CASE語句實…

VeRL:強化學習與大模型訓練的高效融合框架

本文由「大千AI助手」原創發布&#xff0c;專注用真話講AI&#xff0c;回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我&#xff0c;一起撕掉過度包裝&#xff0c;學習真實的AI技術&#xff01; 1 概述&#xff1a;VeRL的起源與核心價值 VeRL&#xff08;Versatile…

2. 計算機系統基礎知識

1 計算機系統概述 計算機系統 (Computer System) 是指用于數據管理的計算機硬件、軟件及網絡組成的系統。 計算機系統可劃分為硬件(子系統)和軟件(子系統)兩部分。硬件由機械、電子元器件、磁介質和光介質等物理實體構成&#xff0c;例如處理器(含運算單元和控制單元)、存儲器、…

國產EtherCAT從站芯片FCE1353與N32G435 MCU功能板測試流程

上期推薦&#xff0c;我們在前期介紹了FCE1353與國民N32G435 MCU開發板的基本情況&#xff0c;本期主要介紹此開發板的測試流程&#xff0c;以便用戶拿到此板做功能驗證、兼容性測試、可靠性測試時更加便捷地提高開發驗證效率。01概述FCE1353_N32G435RBL7_GPIO_V1 開發板主要通…

向日葵亮點16功能解析:被控端“快速解鎖”

向日葵16重磅上線&#xff0c;本次更新新增了諸多實用功能&#xff0c;提升遠控效率&#xff0c;實現應用融合突破設備邊界&#xff0c;同時全面提升遠控性能&#xff0c;操作更順滑、畫質更清晰&#xff01;無論遠程辦公、設計、IT運維、開發還是游戲娛樂&#xff0c;向日葵16…