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架构

notion image
Containerd 采用标准的 C/S 架构,服务端通过 GRPC 协议提供稳定的 API,客户端通过调用服务端的 API 进行高级的操作。
整体架构分为以下层次:
  1. API 层
      • 提供 gRPC API 接口
      • 支持客户端工具与 containerd 交互,常用客户端:
        • ctr 工具:containerd 自带的命令行工具
        • Docker Engine:通过 containerd 插件与 containerd 交互
        • Kubernetes CRI:通过 CRI 插件与 Kubernetes 集成
  1. 核心服务层
      • Content 服务:管理镜像和容器的内容存储
      • Snapshot 服务:管理容器文件系统的快照
      • Images 服务:管理镜像的元数据和传输
      • Containers 服务:管理容器元数据
      • Tasks 服务:管理容器的运行时生命周期
  1. 运行时层
      • Runtime 接口:支持多种运行时(如 runc、gVisor、Kata Containers 等)
      • Shim 进程:管理容器生命周期,确保容器进程独立于 containerd 守护进程
  1. 存储层
      • 支持多种存储驱动(overlayfs、aufs、btrfs 等)
      • 内容可寻址存储(CAS)

3、Containerd安装

通过 Yum 安装(推荐用于 CentOS/RHEL)

验证安装:

二进制方式安装(适用于所有 Linux 发行版)

配置 Containerd

编辑配置文件 /etc/containerd/config.toml,常见配置项包括:
应用配置更改:

4、Containerd基本操作

镜像管理

容器管理

Kubernetes 集成

Containerd 使用命名空间隔离不同环境的容器:
Kubernetes 1.24+ 默认使用 Containerd 作为运行时。相关操作:
Hexo+GitHub搭建个人博客教程Kubernetes系列:容器网络(Service、Ingress)
Loading...