containerd簡述


containerd是容器虛擬化技術,從docker中剝離出來,形成開放容器接口(OCI)標准的一部分。

 

docker對容器的管理和操作基本都是通過containerd完成的。Containerd 是一個工業級標准的容器運行時,它強調簡單性、健壯性和可移植性。Containerd 可以在宿主機中管理完整的容器生命周期:容器鏡像的傳輸和存儲、容器的執行和管理、存儲和網絡等。詳細點說,Containerd 負責干下面這些事情:

•管理容器的生命周期(從創建容器到銷毀容器)

•拉取/推送容器鏡像

•存儲管理(管理鏡像及容器數據的存儲)

•調用 runC 運行容器(與 runC 等容器運行時交互)

•管理容器網絡接口及網絡

注意:Containerd 被設計成嵌入到一個更大的系統中,而不是直接由開發人員或終端用戶使用。

我們可以從下面幾點來理解為什么需要獨立的 containerd:

•繼續從整體 docker 引擎中分離出的項目(開源項目的思路)

•可以被 Kubernets CRI 等項目使用(通用化)

•為廣泛的行業合作打下基礎(就像 runC 一樣)

docker安裝后containerd默認已安裝,containerd包含如下命令組件:

•containerd:高性能容器運行時。

•ctr:containerd的命令行客戶端。

•runc:運行容器的命令行工具。

docker、containerd、docker-shim、runC關系:

docker:docker本身而言,包括了docker client和dockerd,dockerd實屬是對容器相關操作的api的最上層封裝,直接面向操作用戶。

containerd:dockerd實際真實調用的還是containerd的api接口(rpc方式實現),containerd是dockerd和runC之間的一個中間交流組件。

docker-shim:一個真實運行容器的載體,每啟動一個容器都會起一個新的docker-shim的進程。它通過指定三個參數:容器ID、boundle目錄(containerd對應某個容器生成目錄)、運行時二進制(默認是runC)來調用runC的api創建一個容器。

runC:一個命令行工具端,根據OCI的標准來創建和運行容器。

containerd應用

docker鏡像和containerd鏡像通用,但組織方式和存放目錄不同,導致docker與ctr命令不通用,各自管理自己的鏡像和容器。

此外k8s還有客戶端命令crictl,用法與docker基本相同,可crictl -h查看用法。

containerd的默認配置文件為/etc/containerd/config.toml,可通過命令:

containerd config default

輸出默認配置,可參考文檔https://github.com/containerd/containerd/blob/master/docs/ops.md

root = "/var/lib/containerd"
state = "/run/containerd"
oom_score = 0
……

root鍵值用於存儲containerd持久化數據。

state鍵值用於存儲containerd臨時性數據,設備重啟后數據丟失。

顯示containerd鏡像

sudo ctr images ls

拉取hello-world鏡像

sudo ctr images pull docker.io/library/hello-world:latest

注:必須全路徑,從dockerhub上下載默認hello-world鏡像。

運行容器

sudo ctr run docker.io/library/hello-world:latestmy_hello-world
sudo ctr run -t docker.io/library/busybox:latestmybusybox_demosh

 

參考:

1.https://github.com/containerd/containerd

2.https://containerd.io/docs/getting-started/

3.Containerd 簡介

4.Docker組件介紹(一):runc和containerd


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM