
Containerd
1、Docker、Containerd、runc
containerd 是容器运行时的管理器,runc 是实际启动容器的工具。
+---------------------------+
| Kubernetes (Kubelet) |
+---------------------------+
↓ (via CRI)
+---------------------------+
| containerd | ← 高层容器运行时 (CRI compatible)
+---------------------------+
↓
+---------------------------+
| runc | ← 低层容器运行时 (OCI runtime)
+---------------------------+
↓
+---------------------------+
| Linux 内核功能 | ← 命名空间、cgroups、挂载点、网络
+---------------------------+
🔍 1. Docker 是“全家桶”,containerd 是核心组件
Docker = 容器引擎 + CLI + 守护进程 + 镜像构建 + 网络管理 + 存储 + 其他…
containerd = 一个轻量级、专注运行容器的“运行时”(由 Docker 团队最初创建,现在属于 CNCF)
➡️ 换句话说,Docker 是“套件”,containerd 是“内核”。
🚀 2. Kubernetes 不再支持 Docker 容器运行时(CRI)
从 Kubernetes 1.20 起弃用 Docker 作为运行时(已在 1.24 完全移除),原因是:
Docker 并 不实现 Kubernetes 使用的容器运行时接口(CRI)
Kubernetes 借助 dockershim 适配 Docker,但 dockershim 成本高、复杂度大
所以 Kubernetes 官方建议直接使用:
containerd
CRI-O
✅ containerd
CNCF 毕业项目,由 Docker 捐献
实现了 Kubernetes 所需的 CRI 接口
管理:
镜像(pull、unpack)
容器生命周期(create/start/stop/delete)
网络、存储挂载
容器运行日志和元数据
使用 containerd-shim 和 runc 启动容器
✅ runc
OCI 标准实现(Open Container Initiative)
真正调用 Linux 的底层能力(如 cgroups、namespace)
它只关心:“把一个 bundle(镜像解包后的根文件系统)变成一个隔离的进程”
不做管理、不维护状态、无后台服务
由 containerd 或 Docker 在运行容器时调用
2、nerdctl使用
nerdctl是一个较新的containerd工具,兼容Docker命令行工具,比ctr覆盖更全面,另外还支持docker-compose(不包括swarm)以及一些可选的高级特性
wget https://github.com/containerd/nerdctl/releases/download/v1.7.6/nerdctl-1.7.6-linux-amd64.tar.gz
tar Cxzvvf /usr/local/bin nerdctl-1.7.6-linux-amd64.tar.gz
nerdctl version
nerdctl --help
//查看名字空间
nerdctl ns ls
//查看镜像
nerdctl images
nerdctl -n k8s.io images
//下载镜像
nerdctl pull xxx
//构建镜像,依赖于dockerfile
nerdctl build -t xxx .
//删除镜像
nerdctl rmi xxx
//上传镜像
nerdctl push xxx
//导出镜像
nerdctl save nginx:alpine -o nginx.tar
//导入镜像
nerdctl load -i nginx-alpine-image.tar.gz
//启动容器
nerdctl run -d -p 80:80 --name web nginx:alpine
//停止容器
nerdctl stop nginx
//删除容器
nerdctl rm nginx