1)關(guān)于Containerd的基礎(chǔ)知識
從 Docker 1.11 版本開始,Docker 容器運(yùn)行就不是簡單通過 Docker Daemon 來啟動(dòng)了,而是通過集成containerd、runc等多個(gè)組件來完成的。 雖然Docker Daemon守護(hù)進(jìn)程模塊在不停地重構(gòu),但是基本功能和定位沒有太大的變化,一直都是CS架構(gòu),守護(hù)進(jìn)程負(fù)責(zé)和Docker Client端交互,并管理Docker鏡像和容器。 現(xiàn)在的架構(gòu)中組件containerd就會(huì)負(fù)責(zé)集群節(jié)點(diǎn)上容器的生命周期管理,并向上為Docker Daemon提供gRPC接口。
Containerd-shim是Containerd的一個(gè)插件,它用來扮演進(jìn)程管理器的角色,接收來自containerd的命令,并在容器內(nèi)部創(chuàng)建和管理進(jìn)程。它可以與Runc協(xié)同工作,使得容器的創(chuàng)建、啟動(dòng)、停止、暫停和恢復(fù)等操作都能夠得到有效的處理。一句話,創(chuàng)建容器這件事是由Containerd-shim來完成的。
我們都知道,創(chuàng)建容器是需要做一些namespaces和cgroups的配置,以及掛載root文件系統(tǒng)的操作。這些操作其實(shí)已經(jīng)有了標(biāo)準(zhǔn)的規(guī)范,那就是OCI(開放容器標(biāo)準(zhǔn))。
OCI本質(zhì)上就是一個(gè)規(guī)范文檔,主要規(guī)定了容器鏡像的結(jié)構(gòu)標(biāo)準(zhǔn)以及容器接收操作指令的標(biāo)準(zhǔn),比如create、start、stop、delete 等這些命令。而Runc其實(shí)就是按照這個(gè)OCI的各種規(guī)范來實(shí)現(xiàn)管理容器的。
所以真正啟動(dòng)容器是通過containerd-shim去調(diào)用runc來啟動(dòng)容器的,runc 啟動(dòng)完容器后本身會(huì)直接退出,containerd-shim 則會(huì)成為容器進(jìn)程的父進(jìn)程, 負(fù)責(zé)收集容器進(jìn)程的狀態(tài), 上報(bào)給 containerd, 并在容器中 pid 為 1 的進(jìn)程退出后接管容器中的子進(jìn)程進(jìn)行清理, 確保不會(huì)出現(xiàn)僵尸進(jìn)程。
Containerd 是一個(gè)工業(yè)級標(biāo)準(zhǔn)的容器運(yùn)行時(shí),它強(qiáng)調(diào)簡單性、健壯性和可移植性,containerd 可以負(fù)責(zé)干下面這些事情:
管理容器的生命周期(從創(chuàng)建容器到銷毀容器)
拉取/推送容器鏡像
存儲(chǔ)管理(管理鏡像及容器數(shù)據(jù)的存儲(chǔ))
調(diào)用 runc 運(yùn)行容器(與 runc 等容器運(yùn)行時(shí)交互)
管理容器網(wǎng)絡(luò)接口及網(wǎng)絡(luò)
2)containerd安裝
下面步驟為在Rocky8/RHEL8上安裝containerd
先安裝yum-utils工具
yum install -y yum-utils
配置Docker官方的yum倉庫,如果做過,可以跳過
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安裝containerd
yum install containerd.io -y
啟動(dòng)服務(wù)并設(shè)置為開機(jī)自啟
systemctl enable containerd systemctl start containerd
3)containerd命令行工具ctr
Ctr就是containerd的命令行工具,可以用來執(zhí)行和管理containerd中的任務(wù)。ctr主要用于開發(fā)和調(diào)試,而不是在生產(chǎn)環(huán)境中使用。常見用法如下:
查看containerd版本
ctr version
拉取鏡像
ctr images pull docker.io/library/busybox:latest #其中images可以簡寫為i
列出本地鏡像
ctr images list #或者簡寫 ctr i ls
修改tag
ctr i tag docker.io/library/busybox:latest busybox:latest
刪除鏡像
ctr i rm docker.io/library/busybox:latest
運(yùn)行容器
ctr run -d busybox:latest busybox
列出運(yùn)行的容器
ctr containers list #或者簡寫為 ctr c ls
列出任務(wù)
ctr tasks ls #或者簡寫 ctr t ls
容器里執(zhí)行命令
ctr t exec --exec-id 1860 busybox ls #1860為任務(wù)ID
進(jìn)入容器內(nèi)部
ctr t exec -t --exec-id 1860 busybox sh
刪除容器
ctr t kill -s SIGKILL busybox #先殺掉進(jìn)程 ctr c rm busybox #再刪除容器
總之,這個(gè)ctr工具跟docker的命令行工具用起來還是有不少差異的。
審核編輯:湯梓紅
-
接口
+關(guān)注
關(guān)注
33文章
8451瀏覽量
150733 -
容器
+關(guān)注
關(guān)注
0文章
492瀏覽量
22028 -
進(jìn)程
+關(guān)注
關(guān)注
0文章
201瀏覽量
13939 -
鏡像
+關(guān)注
關(guān)注
0文章
162瀏覽量
10689 -
Docker
+關(guān)注
關(guān)注
0文章
453瀏覽量
11792
原文標(biāo)題:Containerd基礎(chǔ)用法
文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論