云原生技术与应用-Containerd容器技术详解
目录
一.Containerd概述
1.什么是containerd
2.Containerd的起源与背景
二.Containerd架构
1.Containerd架构概述
2.核心组件解析
三.安装配置Containerd
1.安装Containerd
2.配置Containerd
四.Containerd基本操作
1.镜像类操作
2.容器类操作
3.任务类操作
4.其他操作
一.Containerd概述
1.什么是Containerd
Containerd 是一个开源的容器运行时(container runtime),主要用于管理容器的生命周期,包括容器的创建、启动、停止、删除等核心操作。它最初是 Docker 引擎的一部分,2017 年被分离出来并捐赠给 Cloud Native Computing Foundation(CNCF),成为独立的开源项目,目前已成为云原生生态中容器运行时的重要标准之一。
2.Containerd的起源与背景
Containerd 的起源可以追溯到 Docker 项目。Docker 最初作为一个开源项目推出,旨在简化应用程序的打包、分发和部署过程。Docker 引入了容器的概念,将应用程序和其依赖项打包到一个容器中,使得应用在不同环境中可以一致地运行。
随着 Docker 的发展,其架构逐渐变得复杂,包含了许多功能,如镜像构建、服务编排等。为了更好地组织和管理这些功能,Docker 团队决定将 Docker 引擎拆分成多个组件,其中一个关键的组件就是 Containerd。
Docker 架构拆分:Docker 从单一的大型引擎拆分为一系列小型、可复用的组件。这种拆分的目标 是提高可维护性、模块化和可扩展性。
Containerd 作为核心运行时:在 Docker 架构拆分后,containerd 被定位为 Docker 的核心容器运行时。它负责管理容器的生命周期、镜像操作和基本运行时功能。
贡献给 CNCF(云原生基金会):为了推动 Containerd 的发展,Docker 团队将 containerd 的代码捐赠给了 Cloud Native Computing Foundation(CNCF),使其成为 CNCF 的孵化项目。
容器生态系统的标准化:Containerd 的设计遵循 Open Container Initiative(开放容器倡议 OCI)规范,这是一个关注容器运行时和镜像格式标准化的开放标准组织。这意味着 containerd 可以与符合 OCI 规范的其他容器工具和运行时进行互操作。
独立的容器运行时:containerd 不仅仅局限于 Docker,它可以作为独立的容器运行时,与多个容器编排系统和工具集成,从而为用户提供更多选择。
总体而言,containerd 的起源是为了简化容器运行时的管理,并为容器生态系统提供一个开放、标准化的基础。其发展不仅服务于 Docker 生态系统,还为整个容器领域提供了一个通用的、可扩展的容器运行时。
二.Containerd架构
1.Containerd架构概述
Containerd 的架构是 modularity(模块化)和可扩展性的体现,它被设计为一个轻量级、高度可定制的容器运行时。
2.核心组件解析
┌───────────────────────────────────────────────────────────┐
│ 用户工具层 │
│ (Docker CLI, Kubernetes CRI, 其他自定义客户端) │
└───────────────────────────────────┬───────────────────────┘│ gRPC API
┌───────────────────────────────────▼───────────────────────┐
│ containerd 守护进程 │
│ ┌───────────────────┐ ┌─────────────────┐ ┌───────────┐ │
│ │ 任务管理器 │ │ 内容存储 │ │ 快照服务 │ │
│ └───────────────────┘ └─────────────────┘ └───────────┘ │
└───────────────────────────┬─────────────────────────────────┘│ 插件接口
┌───────────────────────────▼─────────────────────────────────┐
│ 插件层 │
│ ┌────────────┐ ┌───────────┐ ┌───────────┐ ┌──────────┐ │
│ │ CRI 插件 │ │ 镜像插件 │ │ 存储插件 │ │ 事件插件 │ │
│ └────────────┘ └───────────┘ └───────────┘ └──────────┘ │
│ │
│ ┌────────────┐ ┌───────────┐ ┌───────────┐ │
│ │ 日志插件 │ │ 网络插件 │ │ 运行时插件 │ │
│ └────────────┘ └───────────┘ └───────────┘ │
└───────────────────────────┬─────────────────────────────────┘│ 底层接口
┌───────────────────────────▼─────────────────────────────────┐
│ 运行时层 │
│ ┌────────────┐ ┌───────────────────────┐ ┌──────────────┐ │
│ │ runc │ │ 其他 OCI 运行时 (gVisor, kata) │ │ 系统调用 │ │
│ └────────────┘ └───────────────────────┘ └──────────────┘ │
└───────────────────────────┬─────────────────────────────────┘│ Linux 内核
┌───────────────────────────▼─────────────────────────────────┐
│ 操作系统层 │
│ (namespaces, cgroups, seccomp, 内核功能) │
└───────────────────────────────────────────────────────────┘
-
客户端与 API
- 通过 gRPC 接口提供服务,支持多种客户端工具(如 Docker CLI、Kubernetes CRI 客户端)。
- 提供容器、镜像、内容存储等核心资源的管理接口。
-
镜像管理
- 支持从容器 registry 拉取镜像,遵循 OCI 镜像规范。
- 实现镜像内容的存储与校验(Content Addressable Storage)。
-
容器生命周期管理
- 负责容器的创建、启动、停止、删除等操作。
- 通过 shim 进程隔离容器与主守护进程,确保稳定性。
-
存储与快照
- 提供分层存储机制,支持联合挂载(Union Mount)。
- 通过快照服务实现容器文件系统的快速创建与隔离。
-
网络与日志
- 通过 CNI(容器网络接口)插件实现网络配置。
- 支持多种日志驱动,收集容器运行日志。
-
安全机制
- 集成 seccomp、AppArmor 等安全模块,增强容器隔离。
- 支持多种运行时(如 runc、gVisor、Kata Containers),满足不同安全需求。
4. 与其他组件的关系
- 与 Kubernetes 的集成:通过 CRI 插件对接,成为 K8s 默认的容器运行时之一。
- 与 Docker 的关系:Docker 自 1.11 版本起采用 containerd 作为底层运行时,实现架构解耦。
- 与 OCI 标准的结合:基于 runc 实现 OCI 运行时规范,确保容器可移植性。
三.安装配置Containerd
1.安装containerd
2.配置Containerd
(1)生成配置文件
sudo tee /etc/containerd/config.toml:
tee 命令通常用来读取标准输入,并将其内容写入文件和输出到终端。
/etc/containerd/config.toml 是 containerd 的配置文件路径,这里指定了配置文件的具体位置。
使用 containerd config default 命令获取 containerd 的默认配置信息;
通过管道 | 将这些配置信息传递给 tee 命令;
使 用 sudo tee /etc/containerd/config.toml 以 管 理 员 权 限 创 建 或 覆 盖 /etc/containerd/config.toml 文件,并将之前获取的配置信息写入其中。
(2)修改配置文件
vim /etc/containerd/config.toml
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"SystemdCgroup = true
config_path = "/etc/containerd/certs.d"
(3)启动服务
四.Containerd基本操作
1. 镜像类操作
指定平台拉取镜像
(2)查看镜像
(3)查看本地镜像
(4)重新打标签
(5)删除镜像
(6)镜像挂载到主机目录
(7)镜像从主机目录卸载
ctr images unmount /mnt/