容器管理工具Containerd

一、Containerd介绍
1、前言
- containerd:拉取镜像、启停容器、管理网络与存储;
- runc:真正负责创建、运行容器进程;
- 支持全部符合OCI规范的容器。

2、 containerd前世今生
- 早期K8s使用Docker时,需要shim垫片,将K8s的CRI(容器运行时接口)翻译为Docker API。
- 随着容器生态发展,K8s取消维护垫片;containerd可直接无缝对接K8s,成为K8s容器运行时的主流选择。
3、 containerd架构
Containerd设计的目的是**为了嵌入到Kubernetes中使用**。已经实现大多数容器管理功能,例如:容器生命周期管理、容器镜像传输和管理、容器存储与网络管理等
3.1 架构图

containerd采用标准**C/S客户端-服务端架构**。
- 服务端使用gRPC协议对外提供稳定API。
- 客户端调用服务端API完成各类容器操作。
解耦设计:将不同的职责划分给不同的组件,每个组件就相当于一个子系统
(subsystem)。连接不同子系统的组件被称为模块。
两大子系统
- Bundle:包含配置、元数据、根文件系统数据,可以理解为容器文件系统;支持从镜像提取、打包Bundle。
- Runtime:执行Bundle,负责创建容器。
Containerd Core 核心部分**由多个子系统构成,==子系统依靠一个或多个模块协同工作**==,各类**模块以插件形式集成进 Containerd。插件相互依赖**。
常见插件:Service Plugin、Metadata Plugin、GC插件、Runtime插件、Snapshot插件、Content插件等。
3.2 常用插件

3.3 架构缩略图
containerd整体划分为三大块:Storage存储、Metadata元数据、Runtime运行时。

- Storage:Content、Snapshot、Diff
- Metadata:Images、Containers、Tasks、Events
- 通过gRPC对外提供接口,Metrics采集监控;底层对接操作系统,Runtime对接runc等底层运行时。
3.4 与其他容器运行时性能对比
测试维度:容器启动、停止、删除耗时。

结论:containerd综合性能优于Docker、crio。
二、Containerd安装
1、 YUM方式安装
实验环境:操作系统为CentOS Stream 8。
安装前置依赖包:yum-utils、device-mapper-persistent-data、lvm2、vim。
[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 vim
配置docker-ce软件源,通过yum下载安装containerd。
验证安装:rpm -qa | grep containerd查看是否存在安装包。
启动与开机自启:systemctl start containerd、systemctl enable containerd,systemctl status containerd查看运行状态。
验证containerd版本:使用ctr命令,ctr是containerd自带客户端,用于容器与镜像管理;ctr version查看客户端、服务端版本信息。
# 1.获取阿里云YUM源
[root@localhost ~]# yum-config-manager –add-repo
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@localhost ~]# yum makecache
# 2.查看YUM源中Containerd软件
[root@localhost ~]# yum list | grep containerd
containerd.io.x86_64 1.6.32-3.1.el8
docker-ce-stable
# 3.安装Containerd.io软件,即可安装Containerd
[root@localhost ~]# yum -y install containerd.io
# 4.使用rpm -qa命令查看是否安装
[root@localhost ~]# rpm -qa | grep containerd
containerd.io-1.6.32-3.1.el8.x86_64
# 5.设置containerd服务启动及开机自启动
[root@localhost ~]# systemctl enable containerd –now
[root@localhost ~]# systemctl status containerd
# 6.验证
# 安装Containerd时ctr命令亦可使用,ctr命令主要用于管理容器及容器镜像等。
# 使用ctr命令查看Containerd客户端及服务端相关信息
[root@localhost ~]# ctr version
Client:
Version: 1.6.32
Revision: 8b3b7ca2e5ce38e8f31a34f35b2b68ceb8470d89
Go version: go1.21.10
Server:
Version: 1.6.32
Revision: 8b3b7ca2e5ce38e8f31a34f35b2b68ceb8470d89
UUID: 979940af-68e0-4681-a560-189eeaefbdfc
2、 二进制方式安装
containerd二进制包分为两种:
- 第一种:containerd-xxx,用于单机测试,不包含runc,需要手动提前安装runc。
- 第二种:cri-containerd-cni-xxx,集成系统所需runc、CNI网络插件,K8s集群部署推荐该包。
2.1 安装步骤:
从github官网下载对应版本的cri-containerd-cni压缩包,上传至服务器。
解压压缩包,解压后目录包含:etc(配置文件)、opt、usr(二进制可执行程序)。
解压后目录结构与作用:
-
**etc目录:**存放containerd服务管理配置文件、cni虚拟网卡配置文件。
- etc/systemd/system/containerd.service:systemd服务单元文件,定义containerd服务启动参数。
- etc/cni/net.d/10-containerd-net.conflist:CNI网络插件配置文件。

-
opt目录:存放CNI网络插件二进制程序(bridge、host-local、portmap等),GCE云环境配套配置文件。

-
usr/local目录:核心二进制程序,containerd运行时文件,包含runc。
- bin:containerd主程序、ctr客户端、crictl、containerd-shim容器垫片程序。
- sbin:内置runc,负责底层创建OCI容器。

将解压后的service服务文件复制到/etc/systemd/system/,生成containerd系统服务单元文件。

生成containerd主配置文件/etc/containerd/config.toml,可自定义镜像仓库、存储、运行时等参数。


重载systemd配置,启动containerd服务并设置开机自启。
执行ctr version验证安装是否成功。
查看配置文件config.toml
重点:
- 配置容器默认运行时(runc)、镜像拉取地址、快照器(overlayfs)。
- 包含CNI网络插件配置、容器日志、权限、镜像仓库相关配置。
2.2 安装runC:
- runc负责底层创建OCI容器,由于二进制包中提供的runC默认需要系统中安装seccomp支持,需要单独安装,且不同版本runC对seccomp版本要求一致;
- 需要单独安装对应版本,解压二进制文件放到/usr/bin,执行runc –version校验。
# 使用wget下载runc
[root@localhost ~]# wget https://github.com/opencontainers/runc/releases/download/v1.3.0/runc.amd64
# 安装runc
[root@localhost ~]# mv runc.amd64 /usr/sbin/runc
# 为runc添加可执行权限
[root@localhost ~]# chmod +x /usr/sbin/runc
# 使用runc命令验证是否安装成功
[root@localhost ~]# runc -v
runc version 1.3.0
commit: v1.3.0-0-g4ca628d1
spec: 1.2.1
go: go1.23.8
libseccomp: 2.5.6
3、 两种安装方式对比
三、Containerd容器镜像管理
1、 帮助命令
- Docker:使用docker images管理镜像
- 单机containerd:使用ctr images,是containerd原生CLI客户端
- K8s中的containerd:使用crictl images,K8s社区专用CLI工具
#命令帮助
[root@localhost ~]# ctr –help
# 子命令帮助
[root@localhost ~]# ctr images –help
ctr images支持list、pull、push、export、import、mount、rm、tag等子命令。
2、查看镜像

3、下载镜像
命令:ctr images pull 完整镜像地址

4、镜像挂载
5、镜像导出
6、镜像删除
7、镜像导入
8、修改镜像tag
命令:ctr images tag
ctr images tag 原完整镜像名 新完整镜像名
原理:不是复制镜像文件,只是给同一个镜像新增一个引用标签(和docker tag逻辑一致,底层镜像哈希不变)。
⚠️重点考点:ctr tag同样必须写完整镜像名称,不能简写。
示例:
# 把054b8ac70e8010d90f2ac00ef29e6580.mirror.swr.myhuaweicloud.com/library/nginx:latest 修改为 nginx:latest
[root@localhost ~]# ctr images tag 054b8ac70e8010d90f2ac00ef29e6580.mirror.swr.myhuaweicloud.com/library/nginx:latest nginx:latest
验证:执行ctr images ls,列表里会出现两条 REF,但 DIGEST 摘要完全一样,代表是同一个镜像。
补充:如果不需要旧标签,可以单独ctr images rm 旧镜像引用,只要还有一个 tag 引用存在,镜像本体不会被删除。
简答背诵精简版
管理镜像工具区分:docker用docker images;
-
单机containerd原生ctr images;
-
K8s节点使用crictl images。
-
ctr支持命名空间,默认default,K8s使用k8s.io。
ctr images ls查看本地镜像,显示镜像引用、摘要、大小、架构等信息。
containerd兼容OCI镜像;ctr拉取镜像必须填写完整镜像仓库地址,不能简写。
ctr images mount挂载镜像,无需启动容器查看内部文件;umount卸载。
ctr images export导出镜像为tar包,支持指定平台架构,用于离线迁移。
ctr images rm删除镜像,–sync同步清理关联资源。
ctr images import导入tar镜像包。
四、containerd容器管理
核心概念区分:
container(静态容器) 和 task(动态任务,容器内运行的进程)
ctr container create只是创建静态容器资源,不会启动进程;必须用 ctr task 管理进程启停。
1、获取命令帮助
ctr –help:查看ctr整体帮助,ctr是调试管理客户端,接口不保证向后兼容。
全局参数:-n / –namespace指定命名空间,默认default,K8s用k8s.io。
ctr container –help:容器子命令帮助,create、delete、info、list、label等。
- 使用ctr container create 命令创建容器后,容器并没有处于运行状态,其只是一个静态的容器。
- 这个container 对象只是**包含了运行一个容器所需的资源及配置的数据结构**,例如: namespaces、rootfs 和容器的配置都已经初始化成功了,只是用户进程还没有启动。需要使用ctr tasks命令才能获取一个动态容器。
ctr run –help:run命令帮助,ctr run可以一步创建静态容器并启动task,直接运行容器。
2、查看静态容器
- 命令:ctr container ls,简写 ctr c ls
- 作用:列出静态容器(仅资源配置,不一定正在运行)
3、查看任务task(容器运行进程)
- 命令:ctr task ls,简写 ctr t ls
- 作用:查看容器里正在运行的进程任务;只有启动task之后,容器才真正处于运行状态。
4、创建静态容器
命令:ctr container create 完整镜像名 容器名
执行create之后,只会生成静态容器对象,包含rootfs、namespace、配置等资源,应用进程并未启动。
查看容器详细信息:
ctr container info 容器名
⚠️重点:静态容器只是一套配置,没有运行中的进程,需要task命令启动。
5、静态容器启动为动态容器

6、进入容器内部操作
命令:ctr task exec –exec-id $RANDOM -t 容器名 /bin/sh
- –exec-id:必须指定一个唯一id,$RANDOM可以自动生成随机id。
- -t:分配终端,实现交互式进入容器。
7、直接运行动态容器(一步到位)
命令:ctr run -d –net-host 完整镜像名 容器名
8、暂停容器
命令:ctr tasks pause 容器名
- 暂停容器内进程,task状态变为PAUSED。
- 验证:ctr task ls查看状态。
9、恢复容器
命令:ctr tasks resume 容器名
- 将PAUSED状态的容器恢复运行,状态变回RUNNING。
10、停止容器
命令:ctr task kill 容器名
-
杀掉容器内运行进程,task状态变为STOPPED。
注意:kill只是停止task,静态容器对象仍然保留,不会被删除。
11、删除容器
简答背诵精简版(考试答题)
ctr –help查看总帮助;ctr container –help容器帮助;ctr run可一步创建并运行容器。
ctr c ls查看静态容器,静态容器只是资源配置,不代表进程运行。
ctr t ls查看task任务,task代表容器内运行的进程。
ctr container create创建静态容器,不会启动进程。
ctr task start -d启动静态容器的task,让容器进程运行。
ctr task exec进入容器,–exec-id必须指定唯一标识。
ctr run -d一步创建并启动容器;–net-host使用主机网络。
ctr task pause暂停容器进程,状态PAUSED。
ctr task resume恢复暂停的容器。
ctr task kill终止容器进程,task状态变为STOPPED,但静态容器还存在。
删除容器需要先删除task,再删除静态容器;ctr c rm删除静态容器。
高频考点一句话
containerd把容器拆成两层:container静态资源,task动态运行进程。docker run是一步封装;ctr需要分开操作,先create,再task start,删除也要先删task,再删container。
五、Containerd使用私有容器镜像仓库Harbor
六、Containerd NameSpace管理
核心作用:namespace用来隔离容器、镜像、任务资源,不同命名空间内的资源互相不可见。
1、列出已有namespace
命令:ctr namespace ls
containerd默认工作在default命名空间
当主机安装docker时,docker底层使用containerd,docker默认命名空间moby。
考点:在docker机器上执行ctr ns ls看到的是moby,不是default。
2、创建namespace
命令:ctr namespace create 命名空间名称
示例:
[root@localhost ~]# ctr namespace create myns
[root@localhost ~]# ctr namespace create testns
执行创建后,再ctr namespace ls就能看到新增的命名空间。
3、删除namespace
命令:ctr namespace rm 命名空间名称
⚠️重要前提:命名空间内部所有镜像、容器、task任务必须全部清理干净,否则无法删除。
4、查看指定namespace中的镜像
-n 参数用来指定命名空间
命令:ctr -n 命名空间名称 images ls
不加-n默认操作default命名空间。
5、查看指定namespace中运行的进程任务
命令:ctr -n 命名空间名称 tasks ls
查看该命名空间下task(容器运行进程),输出TASK名称、PID、状态。
6、在指定namespace下载容器镜像
命令:ctr -n 命名空间名称 images pull 镜像完整地址
镜像只会下载到myns命名空间,default命名空间看不到这个镜像。
7、在指定namespace创建静态容器
命令:ctr -n 命名空间名称 create 完整镜像名 新容器名
在myns命名空间创建静态容器,此时容器进程还未启动。
8、在指定namespace启动容器、查看容器与任务
背诵精简考点
-
ctr namespace ls列出命名空间;原生containerd默认default;docker使用moby命名空间。
-
ctr namespace create xxx新建命名空间。
-
ctr namespace rm xxx删除命名空间,命名空间内资源清空才能删除。
-
-n全局参数,用来切换命名空间。
-
所有镜像、容器、task操作,带上-n 命名空间名,就会在对应的命名空间执行。
-
资源隔离:A命名空间的镜像/容器,在B命名空间无法直接看到。
七、nerdctl 实践–管理containerd
nerdctl:兼容Docker语法的containerd客户端,管理containerd,命令风格几乎和docker一致;nerdctl默认使用moby命名空间。
1、nerdctl安装

下载nerdctl二进制包,解压放到/usr/bin,赋予执行权限。
配套nerdctl需要containerd环境。
可选:安装bash命令补全脚本,实现命令自动提示。
常见报错:bash: nerdctl: command not found
解决:检查解压路径、环境变量,或者重新source补全脚本。

2、nerdctl管理镜像
nerdctl images=nerdctl image ls:查看本地镜像。
nerdctl image pull :拉取镜像,从镜像仓库下载镜像到本地。
[root@localhost ~]# nerdctl image pull busybox
nerdctl image rm 镜像名:删除本地无用镜像。
nerdctl tag 源镜像名[:标签] 新镜像名[:标签]:给镜像打标签。
nerdctl image save -o 镜像名 压缩包名 :将本地镜像导出为tar压缩包。——image可省略
**nerdctl image load -i tar包名 ** :把tar镜像包导入本地镜像库。
nerdctl image history 镜像名 :查看镜像构建时的历史命令层次结构。
**nerdctl image inspect 镜像名 **:查看镜像详细信息(json格式,包含架构、环境变量、分层信息等)。
nerdctl image prune –all –force:删除所有未使用镜像,–force不弹窗确认。
注意:
–all(简写 -a):不仅清理悬空镜像,所有不再被任何容器使用的镜像全部删除
- 不加 –all:只删悬空镜像(标签,构建镜像剩下的垃圾碎片)
- 加上 –all:范围扩大!所有没被容器使用的镜像全都删掉,包括你自己 pull 下来、有名字有标签,只是现在没有容器在用的镜像。
–force(简写 -f):跳过交互式确认提示,直接删除,不用手动输入 y 确认
3、nerdctl管理容器
3.1 ls 查看容器
nerdctl container ls(简写 nerdctl ps ):只查看正在运行的容器
nerdctl container ls -a(简写 nerdctl ps -a ):查看全部容器(运行+停止Exited)
参数 -a = all。
常用选项:
- -a, –all:显示所有容器,默认仅展示正在运行的容器
- -f, –filter strings:根据指定条件过滤匹配容器
- –format string:使用 Go 模板格式化输出内容,示例:'{{json .}}'、wide
3.2 run 创建并运行容器
语法:nerdctl run [参数] 镜像名 [命令] [参数]
等价简写:nerdctl container run
示例:
[root@localhost ~]# nerdctl run -it ubuntu
- -i:保持标准输入打开;-t分配伪终端;组合==-it用于交互式进入容器==。
- 不加-it启动ubuntu/bash镜像:bash无终端,启动立刻退出,容器状态Exited(0)。
- 常用参数:
- –cpu-shares uint:CPU 份额(相对权重,用于 CPU 资源分配)
- –cpus float:设置可用 CPU 核心数量
- -d, –detach:后台运行容器,并打印容器 ID
- –dns strings:自定义 DNS 服务器
- -e, –env stringArray:设置环境变量
- -h, –hostname string:设置容器主机名
- -i, –interactive:保持标准输入打开,即使没有附着终端
- –ip string:为容器分配 IPv4 地址
- –mac-address string:为容器指定 MAC 地址
- -m, –memory string:设置内存资源限制
- –name string:给容器指定名称
- –net / –network strings:将容器接入网络,可选模式 bridge / host / none / container:,默认为 bridge 网桥模式
- –privileged:给容器扩展高级权限
- –pull string:运行容器前拉取镜像,可选always/missing/never,默认missing(本地没有镜像才拉)
- –restart string:容器退出时的重启策略,可选no/always/on-failure:n/unless-stopped;默认no
- –rm:容器退出后自动删除容器
- –runtime string:为此容器指定运行时
- –stop-signal string:停止容器使用的信号,默认 SIGTERM
- –stop-timeout:停止容器的超时时间(单位秒)
- -t, –tty:分配一个伪终端
- -v, –volume:挂载数据卷 / 绑定宿主机目录
3.3 rm 删除容器
nerdctl container rm 容器ID/容器名
只能删除停止状态Exited容器;正在运行容器需要加 -f 强制删除:nerdctl rm -f
3.4 prune 批量清理未运行的容器
nerdctl container prune –force
删除所有Exited停止状态容器,–force跳过确认。
3.5 rename 修改容器名称
nerdctl container rename 旧名字 新名字
3.6 stop / start / restart 容器启停
- nerdctl container stop 容器名:优雅停止运行中的容器
- nerdctl container start 容器名:启动已经创建、处于停止状态的容器
- nerdctl container restart 容器名:重启容器(先stop再start)
3.7 pause / unpause 暂停/恢复容器
- nerdctl container pause 容器名:暂停容器内所有进程,容器不会停止,只是冻结进程
- nerdctl container unpause 容器名:解除暂停,恢复容器进程运行
3.8 kill 强制杀死容器
nerdctl container kill 容器名 :直接发送SIGKILL信号强制终止容器进程,立刻停止容器。
3.9 exec 在运行容器内执行命令
nerdctl container exec -it 容器名 bash
只能对正在Up运行的容器使用,用来进入容器终端。
3.10 cp 容器与宿主机之间拷贝文件
#宿主机文件传到容器
nerdctl container cp 宿主机路径 容器名:容器内路径
#容器文件拷贝到宿主机
nerdctl container cp 容器名:容器内路径 宿主机路径
3.11 inspect 查看容器详细信息
nerdctl container inspect 容器名/ID
输出json,包含容器IP、端口、挂载、状态、命名空间等完整信息。
3.12 logs 查看容器日志
nerdctl container logs 容器名
查看容器控制台输出日志。
3.13 查看宿主机和容器之间端口映射关系
nerdctl container port 容器名/ID
考点:如果容器名称前缀匹配多个容器,会报错multiple IDs found with provided prefix,解决:使用完整容器ID。
3.14 commit 将容器提交为镜像
nerdctl container commit 容器ID 新镜像名
把当前容器的修改,打包生成新镜像。
考试对比重点(ctr vs nerdctl)
命名空间隔离:不同命名空间资源互相不可见,操作跨命名空间资源,需要用 -n 指定命名空间。
4、nerdctl 管理网络
4.1 网络基础原理
4.2 实操案例:查看容器网卡信息

– sleep infinity:容器内执行命令,无限睡眠,让容器保持持续运行不退出。
nerdctl container ls:查看正在运行的容器。
nerdctl exec 容器名 – ip a:进入容器查看网卡。—-中间一定要空格
- 容器内网卡格式:eth0@if5,if5代表宿主机端对应的是5号网卡。
宿主机执行ip a查看宿主机网卡。
- 宿主机veth网卡格式:veth790d9140@if2,if2代表容器内对应的是2号网卡。
宿主机上的nerdctl0网桥就是容器的网关,查看网桥命令:ip addr show nerdctl0
4.3 网络查询相关命令
nerdctl network ls:列出所有网络,默认自带bridge、host、none三种网络。
nerdctl network inspect bridge:查看bridge网络详细信息,可查看子网subnet、网关gateway。
brctl show:查看Linux网桥nerdctl0以及网桥接入的veth端口信息。
brctl使用前需要安装:

4.4 nerdctl network子命令
5、nerdctl管理存储
5.1 nerdctl volume 子命令
create:创建数据卷
inspect:查看一个或多个数据卷的详细信息
ls:列出所有数据卷
prune:删除所有未使用的本地数据卷
rm:删除一个或多个数据卷
-h, –help:查看volume模块帮助文档
补充:可以使用nerdctl –help查看全局参数,例如–namespace、–snapshotter、–cgroup-manager
5.2 数据持久化:-v挂载选项
nerdctl 创建容器时,使用-v选项,可以**将宿主机本地目录挂载到容器内,实现容器数据持久化**。
示例1:宿主机已有目录挂载
- mkdir /data 创建宿主机目录
- nerdctl run -d -v /data:/data busybox — sleep infinity 把宿主机/data挂载到容器/data
- 在宿主机touch /data/f1,容器内可以查看到f1文件,实现文件共享。
示例2:只写容器内目录,nerdctl自动创建宿主机数据卷

- 数据实际存放路径:/var/lib/nerdctl/xx/volumes/default/xx/_data
示例3:自定义命名的数据卷(推荐写法 卷名:容器内路径)

- 自动创建名为data的数据卷
- 在容器内touch /data/f3,文件会保存在data卷对应的宿主机目录。

5.3 查看数据卷
6、nerdctl管理命名空间
6.1 基础说明

命令别名:namespace 可以简写为 ns。
基础语法:nerdctl namespace [flags]
6.2 namespace子命令
6.4 实操示例
八、crictl 实践
8.1 crictl命令介绍
8.2 crictl命令安装
8.3 crictl命令配置
使用crictl前,需要先配置/etc/crictl.yaml文件。


也可以使用命令行直接设置endpoint
- crictl config runtime-endpoint unix:///run/containerd/containerd.sock
- crictl config image-endpoint unix:///run/containerd/containerd.sock
查看config帮助:crictl config –help,可以查看/修改crictl客户端配置项,例如debug、timeout等。
8.4 crictl命令总览(帮助信息)
8.5 常用命令分类
- images / image / img:列出镜像
- pull:从镜像仓库拉取镜像
- inspecti:查看镜像详细信息
- imagefsinfo:查看镜像文件系统信息
- rmi:删除镜像
- ps:列出容器
- create:新建容器
- run:在sandbox内运行新容器
- inspect:查看容器详细状态
- info:查看容器运行时信息
- attach:接入正在运行的容器
- exec:在运行容器内执行命令
- logs:获取容器日志
- update:更新运行中容器配置
- stats:查看容器资源使用统计
- checkpoint:容器快照
- start:启动已创建的容器
- stop:停止运行的容器
- rm:删除容器
- pods:列出pod
- runp:运行新pod
- inspectp:查看pod详情
- statsp:查看pod资源统计
- port-forward:端口转发到pod
- stopp:停止pod
- rmp:删除pod
- version:查看运行时版本信息
- config:获取/修改crictl客户端配置
- completion:生成shell补全代码
- help / h:查看帮助
8.6 实操案例
8.7 命令行对照表(docker/podman/nerdctl/ctr/crictl)

8.8 nerdctl与crictl对比
nerdctl 和 crictl 都是用于管理和操作容器的命令行工具,但是它们在开发者、设计目的和功能上有所不同。
- 开发者:Akihiro Suda(docker创始人之一,containerd核心贡献者)
- 设计目标:兼容Docker CLI的containerd CLI,绝大多数docker命令可以直接使用nerdctl执行。
- 功能:容器生命周期管理、镜像、网络、存储管理。
- 开发者:Kubernetes社区开发
- 设计目标:是一个命令行接口,CRI客户端,和所有实现CRI规范的容器运行时交互
- 功能:主要用于调试,对接CRI接口,管理pod沙箱、容器、镜像,专门适配K8s场景。
补充:可以设置别名alias docker=nerdctl,直接像docker一样使用nerdctl命令。
rward`:端口转发到pod
- stopp:停止pod
- rmp:删除pod
- version:查看运行时版本信息
- config:获取/修改crictl客户端配置
- completion:生成shell补全代码
- help / h:查看帮助
8.6 实操案例
8.7 命令行对照表(docker/podman/nerdctl/ctr/crictl)
[外链图片转存中…(img-yI3D04tK-1789722888467)]
8.8 nerdctl与crictl对比
nerdctl 和 crictl 都是用于管理和操作容器的命令行工具,但是它们在开发者、设计目的和功能上有所不同。
- 开发者:Akihiro Suda(docker创始人之一,containerd核心贡献者)
- 设计目标:兼容Docker CLI的containerd CLI,绝大多数docker命令可以直接使用nerdctl执行。
- 功能:容器生命周期管理、镜像、网络、存储管理。
- 开发者:Kubernetes社区开发
- 设计目标:是一个命令行接口,CRI客户端,和所有实现CRI规范的容器运行时交互
- 功能:主要用于调试,对接CRI接口,管理pod沙箱、容器、镜像,专门适配K8s场景。
补充:可以设置别名alias docker=nerdctl,直接像docker一样使用nerdctl命令。
网硕互联帮助中心






评论前必须登录!
注册