從 Docker 到 runC

 從 Docker 到 runC:容器底層原理詳解

 

目錄

1. Docker 與 runC 的關系

2. Docker 的核心組件

3. runC 的核心功能

4. 實戰示例:從 Docker 到 runC

4.1 示例場景:運行一個簡單容器

4.2 Docker 底層調用 runC 的流程

4.3 查看 runC 的調用

4.4 直接調用 runC 創建容器

4.5 驗證容器的隔離性

5. runC 的核心代碼解析

5.1 創建命名空間

5.2 設置 Cgroups

5.3 掛載文件系統

6. Docker 與 runC 的協作流程圖

7. 總結

 

1. Docker 與 runC 的關系

Docker 是一個容器化平臺,其核心功能是通過容器運行時(Container Runtime)來創建和管理容器。runC 是 Docker 默認使用的底層容器運行時,它實現了 Open Container Initiative (OCI) 標準,負責與 Linux 內核交互,完成容器的創建、啟動和銷毀。

Docker 與 runC 的協作流程

  1. Docker 客戶端(CLI)向 Docker 守護進程dockerd)發送指令(如 docker run)。
  2. dockerd 將指令轉化為容器配置(JSON 格式),并調用 containerd(Docker 的容器管理服務)。
  3. containerd 通過 containerd-shim 調用 runC,由 runC 負責創建容器的命名空間(Namespaces)、控制組(Cgroups)和文件系統掛載。
  4. 容器啟動后,containerd-shim 與容器保持通信,確保容器生命周期的管理。
2. Docker 的核心組件

Docker 的架構由多個組件組成,以下是關鍵部分:

組件作用
Docker CLI用戶交互接口,用于執行 docker run 等命令。
DockerdDocker 守護進程,處理 Docker CLI 的請求,管理容器生命周期。
Containerd容器管理服務,負責與 runC 交互,管理容器的創建、運行和銷毀。
runC容器運行時,負責與 Linux 內核交互,實現容器的隔離和資源限制。
libcontainerDocker 自研的容器管理庫(已逐步被 containerd 替代)。
3. runC 的核心功能

runC 是一個輕量級的容器運行時,支持以下核心功能:

  • Namespaces 隔離:通過 Linux 的命名空間(PID、Mount、UTS、IPC、Network、User)實現容器的隔離。
  • Cgroups 資源限制:通過 Linux 的控制組(CPU、內存、磁盤 I/O)限制容器資源使用。
  • 文件系統掛載:掛載容器的根文件系統(RootFS),通常基于 UnionFS(如 AUFS、OverlayFS)。
4. 實戰示例:從 Docker 到 runC

以下是一個完整的示例,演示如何通過 Docker 創建一個容器,并分析 runC 的底層行為。

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

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

相關文章

使用Python在PowerPoint中插入形狀(Shape)

在進行演示文稿設計時,形狀(Shape)不僅可以增強視覺效果,還可以用于展示流程圖、標注、數據圖示等。借助Python,我們可以通過代碼快速批量地在PPT中添加各種形狀,提升設計效率。本文將介紹如何使用Python向…

Windows系統下MySQL 8.4.5壓縮包安裝詳細教程

一、MySQL 8.4.5新特性概覽 相較于舊版本,MySQL 8.4.5在性能與功能上實現了顯著提升: 性能優化:官方測試顯示,在高并發場景下,其讀寫性能較5.7版本提升近2倍,尤其在處理熱點數據競爭問題時表現更為出色。…

深度解析Vue項目Webpack打包分包策略 從基礎配置到高級優化,全面掌握性能優化核心技巧

深度解析Vue項目Webpack打包分包策略 從基礎配置到高級優化,全面掌握性能優化核心技巧 一、分包核心價值與基本原理 1.1 為什么需要分包 首屏加載優化:減少主包體積,提升TTI(Time to Interactive)緩存利用率提升&am…

【昇騰開發者訓練營:Dify大模型部署實戰】MindIE + Dify + DeepSeek + Embedding模型 + Rerank模型

文章目錄 部署 Dify1. Dify 適配 ARM2. 安裝 docker3. 啟動 Dify MindIEDify 實操手冊1. 基礎環境搭建1.1 環境檢查1.2 下載模型權重1.3 獲取MindIE鏡像 2. 啟動容器3. 純模型推理測試3.1 純模型對話測試3.2 性能測試 4. 服務化部署4.1 MindIE 配置4.2 MindIE 服務化4.3 發起測…

塔能高溫冰蓄冷技術:工廠能耗精準節能的創新之路

在工廠的能耗構成中,制冷系統是重要的耗能環節。傳統的水蓄冷和冰蓄冷技術在實際應用中存在一些局限性,難以滿足工廠對節能和成本控制的更高要求。塔能科技的高溫冰蓄冷技術,憑借其獨特的優勢,為工廠能耗精準節能提供了創新的解決…

通過現代數學語言重構《道德經》核心概念體系,形成一個兼具形式化與啟發性的理論框架

以下是對《道德經》的數學轉述嘗試,通過現代數學語言重構其核心概念,形成一個兼具形式化與啟發性的理論框架: 0. 基礎公理體系 定義: 《道德經》是一個動態宇宙模型 U(D,V,Φ),其中: D 為“道”的無限維…

SQLMesh Typed Macros:讓SQL宏更強大、更安全、更易維護

在SQL開發中,宏(Macros)是一種強大的工具,可以封裝重復邏輯,提高代碼復用性。然而,傳統的SQL宏往往缺乏類型安全,容易導致運行時錯誤,且難以維護。SQLMesh 引入了 Typed Macros&…

5月23日day34打卡

GPU訓練及類的call方法 知識點回歸: CPU性能的查看:看架構代際、核心數、線程數GPU性能的查看:看顯存、看級別、看架構代際GPU訓練的方法:數據和模型移動到GPU device上類的call方法:為什么定義前向傳播時可以直接寫作…

集群、容器云與裸金屬服務器的全面對比分析

文章目錄 引言 集群 2.1 定義 2.2 特點 2.3 應用場景 容器云 3.1 定義 3.2 核心功能 3.3 應用場景 裸金屬 4.1 定義 4.2 特點 4.3 應用場景 三者的區別 5.1 架構與性能 5.2 管理與運維 5.3 成本與靈活性 總結 1. 引言 在云計算和數據中心領域,50…

Vscode +Keil Assistant編譯報錯處理

Vscode Keil Assistant編譯報錯處理 1.報錯圖片內容 所在位置 行:1 字符: 25 chcp.com 65001 -Command & c:\Users\92170.vscode\extensions\cl.keil-a … ~ 不允許使用與號(&)。& 運算符是為將來使用而保留的;請用雙引號將與號引起來(“&”)&…

Java實現中文金額轉換

概述 話不多說,直接上代碼 代碼 /*** Author: hweiyu* Description: TODO* Date: 2025/5/23 11:33*/ import java.math.BigDecimal; import java.util.Scanner;public class AmountToChinese {// 中文數字字符private static final String[] NUMBERS {"零&…

Oracle 的 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH 命令

Oracle 的ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH 命令 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH 是 Oracle Data Guard 環境中用于停止恢復過程并準備備用數據庫切換為主庫的關鍵命令。 命令用途 該命令主要用于以下場景: 故…

Java 依賴管理工具:使用 Sonatype Nexus 管理項目依賴

Java 依賴管理工具:使用 Sonatype Nexus 管理項目依賴 在 Java 開發領域,依賴管理是項目構建和維護過程中的關鍵環節。Sonatype Nexus 作為一個功能強大的依賴管理工具,能夠有效地幫助我們管理項目的各種依賴,提高開發效率并降低…

編譯原理 期末速成

一、基本概念 1. 翻譯程序 vs 編譯程序 翻譯程序的三種方式 編譯:將高級語言編寫的源程序翻譯成等價的機器語言或匯編語言。(生成文件,等價)解釋:將高級語言編寫的源程序翻譯一句執行一句,不生成目標文件…

Pysnmp使用指南

1. 簡介 pysnmp 是一個純 Python 實現的 SNMP(Simple Network Management Protocol)庫,支持 SNMPv1、SNMPv2c 和 SNMPv3 協議。用于: 查詢(GET)和修改(SET)網絡設備的管理信息。遍…

SHELL編程簡介

1.腳本格式: 聲明位于shell腳本的行首,通常形式如下: #!/bin/sh#!/bin/bash 其中#表示注釋,!聲明所使用的shell,后面為所使用shell的絕對路徑。 2.常用函數 echo:shell輸出語句,可不接參數…

Django 中的 ORM 基礎語法

深入剖析 Django 中的 ORM 語法:從基礎到實戰進階 在 Django 開發領域,ORM(對象關系映射)是開發者高效操作數據庫的得力工具。它以簡潔直觀的 Python 代碼,替代繁瑣的 SQL 語句,極大提升了開發效率。本文將…

A10服務器使用vllm推理框架成功運行Qwen3大模型

1.下載Qwen3大模型: git clone https://www.modelscope.cn/Qwen/Qwen3-1.7B.git放在服務器的/mnt/workspace/Qwen3-1.7B目錄下。 2.創建python虛擬環境: python3 -m venv venv1 source venv1/bin/activate3.安裝vllm推理框架 pip install vllm 4.啟動…

Disruptor—1.原理和使用簡介

大綱 1.Disruptor簡介 2.Disruptor和BlockingQueue的壓測對比 3.Disruptor的編程模型 4.Disruptor的數據結構與生產消費模型 5.RingBuffer Disruptor Sequence相關類 6.Disruptor的WaitStrategy消費者等待策略 7.EventProcessor EventHandler等類 8.Disruptor的運行…

谷歌瀏覽器調試python pygui程序

谷歌瀏覽器地址:chrome://inspect/#devices 前端vue為8080, 配置如下 pychat 需要配置環境變量 PYTHONUNBUFFERED1;QTWEBENGINE_REMOTE_DEBUGGING9012