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