type
status
date
slug
summary
tags
category
icon
password
1、Containerd是什么
Docker 是一个完整的容器平台,包含用户友好的 CLI(docker 命令)、镜像构建工具、网络/存储管理、API 等高层功能。从 Docker 1.11(2016年)开始,Docker 的架构拆分为多个模块,Containerd 被剥离为独立的组件,成为 Docker 与操作系统内核之间的中间层。Docker 把 Containerd 捐献给 CNCF(云原生计算基金会),作为一个独立的开源项目独立发展。
Containerd 是第一个支持 CRI(Container Runntime Interface)的标准化容器运行时(Container Runtime),负责实际的容器生命周期管理(创建、启动、停止、销毁等)、镜像管理、存储和网络接口等低层操作。Containerd 并不是直接面向最终用户的,而是主要用于集成到更上层的系统里,比如 Swarm、Kubernetes、Mesos 等容器编排系统。从 Kubernetes 1.20 开始,Containerd 成为推荐的容器运行时(替代旧的 dockershim)。
拆分后的 Docker 的架构可以简化为以下层次:
- Docker CLI:用户通过
docker
命令交互。
- Docker Engine (dockerd):解析用户命令,管理高级功能(如镜像构建、REST API)。
- Containerd:接收来自
dockerd
的请求,处理容器核心操作(通过containerd-shim
调用runc
)。
- runc:实际调用 Linux 内核(cgroups/namespaces)创建容器的轻量级工具(遵循 OCI 标准)。
为什么要把 Containerd 从 Docker 里面拆出来?
Docker 将底层运行时(Containerd)与高层功能分离,使得其他工具(如 Kubernetes)可以直接使用 Containerd,无需依赖整个 Docker。生产环境中,Kubernetes 等编排系统通常直接集成 Containerd,减少冗余组件。
如果需要深入底层或搭建 Kubernetes 集群,直接使用 Containerd 更高效;如果是开发或本地测试,Docker 的完整工具链更便捷。
2、Containerd架构

Containerd 采用标准的 C/S 架构,服务端通过 GRPC 协议提供稳定的 API,客户端通过调用服务端的 API 进行高级的操作。
整体架构分为以下层次:
- API 层:
- 提供 gRPC API 接口
- 支持客户端工具与 containerd 交互,常用客户端:
- ctr 工具:containerd 自带的命令行工具
- Docker Engine:通过 containerd 插件与 containerd 交互
- Kubernetes CRI:通过 CRI 插件与 Kubernetes 集成
- 核心服务层:
- Content 服务:管理镜像和容器的内容存储
- Snapshot 服务:管理容器文件系统的快照
- Images 服务:管理镜像的元数据和传输
- Containers 服务:管理容器元数据
- Tasks 服务:管理容器的运行时生命周期
- 运行时层:
- Runtime 接口:支持多种运行时(如 runc、gVisor、Kata Containers 等)
- Shim 进程:管理容器生命周期,确保容器进程独立于 containerd 守护进程
- 存储层:
- 支持多种存储驱动(overlayfs、aufs、btrfs 等)
- 内容可寻址存储(CAS)
3、Containerd安装
通过 Yum 安装(推荐用于 CentOS/RHEL)
验证安装:
二进制方式安装(适用于所有 Linux 发行版)
配置 Containerd
编辑配置文件
/etc/containerd/config.toml
,常见配置项包括:应用配置更改:
4、Containerd基本操作
镜像管理
容器管理
Kubernetes 集成
Containerd 使用命名空间隔离不同环境的容器:
Kubernetes 1.24+ 默认使用 Containerd 作为运行时。相关操作:
- Author:mcbilla
- URL:http://mcbilla.com/article/1fc85c7d-7c1d-80fe-bf89-f610defce0e6
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts