阶段四:容器化技术之Containerd运行时
Containerd 简介
定义:Containerd 是一个行业标准的容器运行时,由 CNCF 托管,提供容器的完整生命周期管理。
定位:作为中间层,屏蔽容器运行的复杂性,上承 Kubernetes/Docker,下接 runc 等底层运行时。
特点:
- 轻量、专注,只负责“运行”而不是“构建”
- 遵循 OCI 标准,具备强兼容性
- 插件化设计,可扩展网络、存储、镜像分发能力
- 在生产环境中广泛使用(Kubernetes 默认运行时)
Containerd 架构
核心组件说明
1. containerd:核心守护进程,提供 gRPC API,对接上层系统 2. containerd-shim:每个容器对应一个 shim 进程,保持容器与 containerd 进程解耦 3. runc:实际执行容器创建与运行的 OCI runtime 4. ctr:官方 CLI 工具,主要用于调试和实验 5. containerd-plugins:提供存储(snapshotter)、镜像管理(content store)、网络等扩展功能
工作流程分层
- 上层系统 / 调度器:Docker、Kubernetes、CRI-O 等
- Containerd:API、容器生命周期、镜像管理、快照管理
- Shim + runc:Shim 保持容器运行,runc 负责容器启动
- Linux 内核功能:Namespaces、Cgroups、文件系统、网络栈
- 关系链流程图

设计优势:
- 解耦(即使 containerd 崩溃,容器仍然运行)
- 插件化(支持多种 snapshotter 和 runtime)
- 高性能镜像分发与缓存
---
Containerd 与Docker关系
Docker 与 Containerd
- Docker 结构 = CLI + API + buildkit + containerd + runc
- Docker 提供完整的开发体验,包括构建、打包、运行容器;containerd 专注运行时本身
- Docker 通过 containerd 作为底层运行时来运行容器
- 在 Kubernetes 中,Docker shim 已被移除,containerd 成为主流选择
Containerd 与 Docker 对比
<sheet sheet-id="sWylBL" token="VROjsKHRah4LlqtDc74caRNhn9g"></sheet>
Kubernetes 与 Containerd
- Kubernetes 使用 CRI(Container Runtime Interface)与 containerd 对接
- 调用链:kubelet → CRI plugin → containerd → runc
- containerd 是当前 Kubernetes 环境中常用、推荐的 CRI 运行时之一;实际运行时取决于集群安装方式和节点配置
Containerd 安装与使用
在 CentOS Stream 9 上安装
# 安装依赖
sudo dnf install -y yum-utils device-mapper-persistent-data lvm2
# 启用 docker-ce 源(包含 containerd 软件包)
sudo dnf config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装 containerd
sudo dnf install -y containerd.io
# 生成默认配置文件
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
# 设置 systemd cgroup 驱动(建议在 K8s 中使用)
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
# 新增镜像源
sed -i 's/config_path = ""/config_path = "\/etc\/containerd\/certs.d\/"/g' /etc/containerd/config.toml
mkdir -p /etc/containerd/certs.d/docker.io
cat > /etc/containerd/certs.d/docker.io/hosts.toml << 'EOF'
server = "https://docker.io" # 源镜像地址
[host."https://docker.m.daocloud.io"] # 道客-镜像加速地址
capabilities = ["pull","resolve"]
[host."https://dockerproxy.com"] # 镜像加速地址
capabilities = ["pull", "resolve"]
[host."https://docker.mirrors.sjtug.sjtu.edu.cn"] # 上海交大-镜像加速地址
capabilities = ["pull","resolve"]
[host."https://docker.mirrors.ustc.edu.cn"] # 中科大-镜像加速地址
capabilities = ["pull","resolve"]
[host."https://docker.nju.edu.cn"] # 南京大学-镜像加速地址
capabilities = ["pull","resolve"]
[host."https://registry.docker-cn.com"]
capabilities = ["pull","resolve","push"]
[host."https://cf-workers-docker-io-38g.pages.dev"]
capabilities = ["pull","resolve","push"]
EOF
# 重启生效
systemctl enable containerd
systemctl start containerd
# 验证测试
systemctl status containerd注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
配置(常见优化)
- 配置镜像加速器(修改
/etc/containerd/config.toml)
基本命令(ctr)
# 拉取镜像
ctr images pull --all-platforms registry.openanolis.cn/openanolis/nginx:1.14.1-8.6
# 查看镜像
ctr images list
#查看镜像简洁输出
ctr images ls -q
# 运行容器
ctr run -d registry.openanolis.cn/openanolis/nginx:1.14.1-8.6 mynginx
#共享主机网络
ctr run -d --net-host registry.openanolis.cn/openanolis/nginx:1.14.1-8.6 mynginx
# 查看容器
ctr containers list
# 进入容器命令行
ctr tasks exec --tty --exec-id mybash mynginx /bin/bash
# 删除容器
ctr tasks kill mynginx
ctr containers rm mynginx注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
- 镜像地址、版本号和拉取权限要确认,否则 Pod 会进入
ImagePullBackOff。
nerdctl软件的安装和使用
#下载软件包
wget https://github.com/containerd/nerdctl/releases/download/v2.1.3/nerdctl-2.1.3-linux-amd64.tar.gz
#解压缩
tar -xv -f nerdctl-2.1.3-linux-amd64.tar.gz -C /usr/local/bin
nerdctl --version 命令作用:
- 访问
https://github.com/containerd/nerdctl/releases/download/v2.1.3/nerdctl-2.1.3-linux-amd64.tar.gz;curl默认把响应写到终端,wget默认下载到文件。可据 HTTP 状态、响应内容或下载结果判断服务是否可访问。
- 按选项打包或解包归档文件;
-c表示创建归档,-x表示解包,-f后面指定归档文件名。
执行结果:
- 成功后目标文件会下载到当前目录或
-O指定的位置。
- 成功后会生成归档文件或把归档内容解压到目标目录;用
tar -tf 归档文件可查看归档内容。
关键参数:
| 参数 | 说明 | |
|---|---|---|
https://github.com/containerd/nerdctl/releases/download/v2.1.3/nerdctl-2.1.3-linux-amd64.tar.gz | 普通 | 目标 URL https://github.com/containerd/nerdctl/releases/download/v2.1.3/nerdctl-2.1.3-linux-amd64.tar.gz,命令会访问这个地址或从这里下载内容。 |
-f | 必看 | -f 的含义取决于当前命令,常见作用是指定文件或强制执行。 |
注意事项:
---
---
本文由飞书云文档同步生成。涉及命令、SQL、配置示例时,请以飞书源文档和实际环境执行结果为准。