目錄
一.Containerd概述
? 1.什么是containerd
? 2.Containerd的起源與背景
二.Containerd架構
? 1.Containerd架構概述
? 2.核心組件解析
三.安裝配置Containerd
? 1.安裝Containerd
? 2.配置Containerd
四.Containerd基本操作
? 1.鏡像類操作
? 2.容器類操作
? 3.任務類操作
? 4.其他操作
一.Containerd概述
1.什么是Containerd
? ??Containerd 是一個開源的容器運行時(container runtime),主要用于管理容器的生命周期,包括容器的創建、啟動、停止、刪除等核心操作。它最初是 Docker 引擎的一部分,2017 年被分離出來并捐贈給 Cloud Native Computing Foundation(CNCF),成為獨立的開源項目,目前已成為云原生生態中容器運行時的重要標準之一。
2.Containerd的起源與背景
??Containerd 的起源可以追溯到 Docker 項目。Docker 最初作為一個開源項目推出,旨在簡化應用程序的打包、分發和部署過程。Docker 引入了容器的概念,將應用程序和其依賴項打包到一個容器中,使得應用在不同環境中可以一致地運行。
? ?隨著 Docker 的發展,其架構逐漸變得復雜,包含了許多功能,如鏡像構建、服務編排等。為了更好地組織和管理這些功能,Docker 團隊決定將 Docker 引擎拆分成多個組件,其中一個關鍵的組件就是 Containerd。
? ?Docker 架構拆分:Docker 從單一的大型引擎拆分為一系列小型、可復用的組件。這種拆分的目標 是提高可維護性、模塊化和可擴展性。
? ?Containerd 作為核心運行時:在 Docker 架構拆分后,containerd 被定位為 Docker 的核心容器運行時。它負責管理容器的生命周期、鏡像操作和基本運行時功能。
? ?貢獻給 CNCF(云原生基金會):為了推動 Containerd 的發展,Docker 團隊將 containerd 的代碼捐贈給了 Cloud Native Computing Foundation(CNCF),使其成為 CNCF 的孵化項目。
? ?容器生態系統的標準化:Containerd 的設計遵循 Open Container Initiative(開放容器倡議 OCI)規范,這是一個關注容器運行時和鏡像格式標準化的開放標準組織。這意味著 containerd 可以與符合 OCI 規范的其他容器工具和運行時進行互操作。
? 獨立的容器運行時:containerd 不僅僅局限于 Docker,它可以作為獨立的容器運行時,與多個容器編排系統和工具集成,從而為用戶提供更多選擇。
? ?總體而言,containerd 的起源是為了簡化容器運行時的管理,并為容器生態系統提供一個開放、標準化的基礎。其發展不僅服務于 Docker 生態系統,還為整個容器領域提供了一個通用的、可擴展的容器運行時。
二.Containerd架構
1.Containerd架構概述
? ?Containerd 的架構是 modularity(模塊化)和可擴展性的體現,它被設計為一個輕量級、高度可定制的容器運行時。
2.核心組件解析
┌───────────────────────────────────────────────────────────┐
│ 用戶工具層 │
│ (Docker CLI, Kubernetes CRI, 其他自定義客戶端) │
└───────────────────────────────────┬───────────────────────┘│ gRPC API
┌───────────────────────────────────▼───────────────────────┐
│ containerd 守護進程 │
│ ┌───────────────────┐ ┌─────────────────┐ ┌───────────┐ │
│ │ 任務管理器 │ │ 內容存儲 │ │ 快照服務 │ │
│ └───────────────────┘ └─────────────────┘ └───────────┘ │
└───────────────────────────┬─────────────────────────────────┘│ 插件接口
┌───────────────────────────▼─────────────────────────────────┐
│ 插件層 │
│ ┌────────────┐ ┌───────────┐ ┌───────────┐ ┌──────────┐ │
│ │ CRI 插件 │ │ 鏡像插件 │ │ 存儲插件 │ │ 事件插件 │ │
│ └────────────┘ └───────────┘ └───────────┘ └──────────┘ │
│ │
│ ┌────────────┐ ┌───────────┐ ┌───────────┐ │
│ │ 日志插件 │ │ 網絡插件 │ │ 運行時插件 │ │
│ └────────────┘ └───────────┘ └───────────┘ │
└───────────────────────────┬─────────────────────────────────┘│ 底層接口
┌───────────────────────────▼─────────────────────────────────┐
│ 運行時層 │
│ ┌────────────┐ ┌───────────────────────┐ ┌──────────────┐ │
│ │ runc │ │ 其他 OCI 運行時 (gVisor, kata) │ │ 系統調用 │ │
│ └────────────┘ └───────────────────────┘ └──────────────┘ │
└───────────────────────────┬─────────────────────────────────┘│ Linux 內核
┌───────────────────────────▼─────────────────────────────────┐
│ 操作系統層 │
│ (namespaces, cgroups, seccomp, 內核功能) │
└───────────────────────────────────────────────────────────┘
-
客戶端與 API
- 通過 gRPC 接口提供服務,支持多種客戶端工具(如 Docker CLI、Kubernetes CRI 客戶端)。
- 提供容器、鏡像、內容存儲等核心資源的管理接口。
-
鏡像管理
- 支持從容器 registry 拉取鏡像,遵循 OCI 鏡像規范。
- 實現鏡像內容的存儲與校驗(Content Addressable Storage)。
-
容器生命周期管理
- 負責容器的創建、啟動、停止、刪除等操作。
- 通過 shim 進程隔離容器與主守護進程,確保穩定性。
-
存儲與快照
- 提供分層存儲機制,支持聯合掛載(Union Mount)。
- 通過快照服務實現容器文件系統的快速創建與隔離。
-
網絡與日志
- 通過 CNI(容器網絡接口)插件實現網絡配置。
- 支持多種日志驅動,收集容器運行日志。
-
安全機制
- 集成 seccomp、AppArmor 等安全模塊,增強容器隔離。
- 支持多種運行時(如 runc、gVisor、Kata Containers),滿足不同安全需求。
4. 與其他組件的關系
- 與 Kubernetes 的集成:通過 CRI 插件對接,成為 K8s 默認的容器運行時之一。
- 與 Docker 的關系:Docker 自 1.11 版本起采用 containerd 作為底層運行時,實現架構解耦。
- 與 OCI 標準的結合:基于 runc 實現 OCI 運行時規范,確保容器可移植性。
三.安裝配置Containerd
1.安裝containerd
?
2.配置Containerd
(1)生成配置文件
sudo tee /etc/containerd/config.toml:
tee 命令通常用來讀取標準輸入,并將其內容寫入文件和輸出到終端。
/etc/containerd/config.toml 是 containerd 的配置文件路徑,這里指定了配置文件的具體位置。
使用 containerd config default 命令獲取 containerd 的默認配置信息;
通過管道 | 將這些配置信息傳遞給 tee 命令;
使 用 sudo tee /etc/containerd/config.toml 以 管 理 員 權 限 創 建 或 覆 蓋 /etc/containerd/config.toml 文件,并將之前獲取的配置信息寫入其中。
?(2)修改配置文件
vim /etc/containerd/config.toml
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"? SystemdCgroup = true
?config_path = "/etc/containerd/certs.d"
?
?(3)啟動服務
四.Containerd基本操作
1. 鏡像類操作
指定平臺拉取鏡像
?(2)查看鏡像
(3)查看本地鏡像
?(4)重新打標簽
?(5)刪除鏡像
(6)鏡像掛載到主機目錄
?(7)鏡像從主機目錄卸載
ctr images unmount /mnt/