文章目录
- Containerd
-
- [一、Containerd 基础介绍](#一、Containerd 基础介绍)
-
- [1. 核心定位与目标](#1. 核心定位与目标)
- [2. 性能优势](#2. 性能优势)
- [二、Containerd 架构](#二、Containerd 架构)
-
- [1. 核心架构设计](#1. 核心架构设计)
- [2. 常用核心插件](#2. 常用核心插件)
- [三、Containerd 安装(CentOS Stream 8)](#三、Containerd 安装(CentOS Stream 8))
-
- [1. YUM 方式安装(推荐,简单高效)](#1. YUM 方式安装(推荐,简单高效))
- [2. 二进制方式安装(适合 K8s 集群场景)](#2. 二进制方式安装(适合 K8s 集群场景))
-
- [四、Containerd 核心操作(ctr 命令)](#四、Containerd 核心操作(ctr 命令))
-
- [1. 镜像管理](#1. 镜像管理)
- [2. 容器管理(区分静态容器与动态任务)](#2. 容器管理(区分静态容器与动态任务))
- [3. 命名空间管理(隔离容器资源)](#3. 命名空间管理(隔离容器资源))
- [4. 私有仓库 Harbor 对接](#4. 私有仓库 Harbor 对接)
- [五、nerdctl 实践(Docker 兼容 CLI)](#五、nerdctl 实践(Docker 兼容 CLI))
-
- [1. 安装与配置](#1. 安装与配置)
- [2. 核心操作(与 Docker 命令高度兼容)](#2. 核心操作(与 Docker 命令高度兼容))
-
- [六、crictl 实践(K8s CRI 专用工具)](#六、crictl 实践(K8s CRI 专用工具))
-
- [1. 安装与配置](#1. 安装与配置)
- [2. 核心操作(面向 K8s 调试)](#2. 核心操作(面向 K8s 调试))
-
- 七、常用工具命令对照表
-
Containerd
一、Containerd 基础介绍
1. 核心定位与目标
- 独立开源的容器运行时基础设施,脱胎于 Docker Engine,2017 年捐给 CNCF,2020 年后成为 Kubernetes 主流容器运行时(K8s 1.20+ 取消对 Docker shim 维护,Containerd 无缝对接 CRI)。
- 非面向最终用户,专注集成到上层编排系统(Swarm、Kubernetes、Mesos 等),提供稳定的容器运行时能力。
- 核心功能:容器生命周期管理、镜像传输与管理、存储与网络管理,支持所有 OCI 标准容器。
2. 性能优势
- 对比 Docker、CRIO,Containerd 在容器启动、停止、删除等操作上性能更优(基于 bucketbench 测试),架构更轻量、易管理。
二、Containerd 架构
1. 核心架构设计
- 采用 C/S 架构:服务端通过 gRPC 提供 API,客户端(如 ctr、nerdctl)调用 API 实现操作。
- 两大子系统:
- Bundle 子系统:处理容器文件系统(配置、元数据、根文件系统数据)的提取与打包。
- Runtime 子系统:执行 Bundle,负责容器创建等运行时操作。
- 核心模块划分:Storage(存储)、Metadata(元数据)、Runtime(运行时),通过插件化集成,插件间相互依赖。
2. 常用核心插件
- Content Plugin:存储镜像的不可变可寻址内容。
- Snapshot Plugin:管理镜像文件系统快照(类似 Docker 的 graphdriver)。
- Metrics Plugin:暴露组件监控指标。
- Runtime Plugin:对接 runC、kata 等运行时工具。
- GC Plugin:负责垃圾回收,清理无用资源。
三、Containerd 安装(CentOS Stream 8)
1. YUM 方式安装(推荐,简单高效)
bash
复制代码
# 1. 安装依赖工具
yum install -y yum-utils device-mapper-persistent-data lvm2 vim
# 2. 添加阿里云 Docker YUM 源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache
# 3. 安装 containerd.io(含 Containerd 核心)
yum -y install containerd.io
# 4. 验证安装
rpm -qa | grep containerd
# 5. 启动并设置开机自启
systemctl enable containerd --now
systemctl status containerd
# 6. 验证命令可用性(ctr 为内置 CLI)
ctr version
2. 二进制方式安装(适合 K8s 集群场景)
(1)安装包选择
- 基础包(containerd-xxx):无 runC,需单独安装。
- 完整包(cri-containerd-cni-xxx):含 runC、K8s 所需文件,依赖系统 seccomp。
(2)安装步骤
bash
复制代码
# 1. 下载完整安装包(以 v1.6.32 为例)
wget https://github.com/containerd/containerd/releases/download/v1.6.32/cri-containerd-cni-1.6.32-linux-amd64.tar.gz
# 2. 解压并部署
mkdir containerd
tar xf cri-containerd-cni-1.6.32-linux-amd64.tar.gz -C containerd/
cp containerd/usr/local/bin/* /usr/local/bin
cp containerd/etc/systemd/system/containerd.service /usr/lib/systemd/system/
# 3. 生成默认配置文件
mkdir /etc/containerd
containerd config default > /etc/containerd/config.toml
# 4. 安装 runC(二进制包含 runC,但需 seccomp 支持)
wget https://github.com/opencontainers/runc/releases/download/v1.3.0/runc.amd64
mv runc.amd64 /usr/sbin/runc
chmod +x /usr/sbin/runc
runc -v # 验证
# 5. 启动服务
systemctl daemon-reload
systemctl enable containerd --now
四、Containerd 核心操作(ctr 命令)
1. 镜像管理
| 操作 |
命令示例 |
| 查看镜像 |
ctr images list / ctr i ls |
| 拉取镜像 |
ctr images pull 054b8ac70e8010d90f2ac00ef29e6580.mirror.swr.myhuaweicloud.com/library/nginx:latest |
| 挂载镜像(查看内容) |
ctr images mount 镜像REF /mnt |
| 卸载镜像 |
umount /mnt |
| 导出镜像 |
ctr i export --platform linux/amd64 nginx.img 镜像REF |
| 导入镜像 |
ctr images import --platform linux/amd64 nginx.img |
| 删除镜像 |
ctr image rm 镜像REF |
| 镜像打标签 |
ctr images tag 原镜像REF 新镜像REF(如 ctr images tag nginx:latest mynginx:v1) |
2. 容器管理(区分静态容器与动态任务)
3. 命名空间管理(隔离容器资源)
| 操作 |
命令示例 |
| 查看命名空间 |
ctr namespace ls / ctr ns ls |
| 创建命名空间 |
ctr namespace create myns |
| 删除命名空间 |
ctr namespace rm myns |
| 在指定命名空间操作 |
ctr -n myns images pull 镜像REF(拉取镜像)、ctr -n myns container create 镜像REF 容器ID |
4. 私有仓库 Harbor 对接
bash
复制代码
# 1. 配置 Harbor 域名解析(如 Harbor 地址 192.168.108.30)
echo "192.168.108.30 my.harbor.com" >> /etc/hosts
# 2. 拉取 Harbor 镜像(非 HTTPS 需加 --plain-http)
ctr image pull --plain-http 192.168.108.30/cloud/nginx:latest
# 3. 推送镜像到 Harbor
ctr images tag nginx:latest my.harbor.com/cloud/nginx:latest
ctr image push --platform linux/amd64 --plain-http --user "images_admin:Cloud12#$" my.harbor.com/cloud/nginx:latest
五、nerdctl 实践(Docker 兼容 CLI)
1. 安装与配置
bash
复制代码
# 1. 下载并安装 nerdctl(v1.4.0 为例)
wget https://github.com/containerd/nerdctl/releases/download/v1.4.0/nerdctl-1.4.0-linux-amd64.tar.gz
tar -xf nerdctl-1.4.0-linux-amd64.tar.gz -C /usr/bin/
# 2. 配置命令自动补全
yum install -y bash-completion
nerdctl completion bash > /etc/bash_completion.d/nerdctl
source /etc/bash_completion.d/nerdctl
# 3. 安装 CNI 插件(网络支持)
wget https://github.com/containernetworking/plugins/releases/download/v1.3.0/cni-plugins-linux-amd64-v1.3.0.tgz
mkdir -p /opt/cni/bin
tar -xf cni-plugins-linux-amd64-v1.3.0.tgz -C /opt/cni/bin
# 4. 配置镜像加速(修改 containerd 配置)
containerd config default > /etc/containerd/config.toml
vim /etc/containerd/config.toml # 找到 [plugins."io.containerd.grpc.v1.cri".registry]
mkdir -p /etc/containerd/certs.d/docker.io
vim /etc/containerd/certs.d/docker.io/hosts.toml
# 添加:server = "https://054b8ac70e8010d90f2ac00ef29e6580.mirror.swr.myhuaweicloud.com"
# [host."https://054b8ac70e8010d90f2ac00ef29e6580.mirror.swr.myhuaweicloud.com"]
# capabilities = ["pull", "resolve"]
systemctl restart containerd
2. 核心操作(与 Docker 命令高度兼容)
(1)镜像管理
bash
复制代码
nerdctl images # 查看镜像(同 docker images)
nerdctl pull nginx # 拉取镜像(同 docker pull)
nerdctl tag nginx nginx:v1 # 打标签(同 docker tag)
nerdctl save nginx -o nginx.tar # 导出镜像(同 docker save)
nerdctl load -i nginx.tar # 导入镜像(同 docker load)
nerdctl rmi nginx:v1 # 删除镜像(同 docker rmi)
nerdctl image prune --all --force # 清理无用镜像
(2)容器管理
bash
复制代码
nerdctl run -d --name nginx1 -p 8080:80 nginx # 运行容器(同 docker run)
nerdctl ps # 查看运行容器(同 docker ps)
nerdctl ps -a # 查看所有容器(同 docker ps -a)
nerdctl exec -it nginx1 bash # 进入容器(同 docker exec)
nerdctl logs nginx1 # 查看日志(同 docker logs)
nerdctl stop nginx1 # 停止容器(同 docker stop)
nerdctl start nginx1 # 启动容器(同 docker start)
nerdctl rm nginx1 # 删除容器(同 docker rm)
nerdctl container prune --force # 清理停止容器
nerdctl commit nginx1 nginx:custom # 提交容器为镜像(同 docker commit)
(3)网络管理
bash
复制代码
nerdctl network ls # 查看网络(同 docker network ls)
nerdctl network inspect bridge # 查看网络详情
nerdctl run -d --net host busybox sleep infinity # 使用主机网络
(4)存储管理
bash
复制代码
nerdctl volume ls # 查看卷(同 docker volume ls)
nerdctl run -d -v /host/data:/container/data busybox sleep infinity # 绑定挂载
nerdctl run -d -v myvol:/data busybox sleep infinity # 使用命名卷
(5)命名空间管理
bash
复制代码
nerdctl namespace ls # 查看命名空间
nerdctl namespace create testns # 创建命名空间
nerdctl -n testns run -d nginx # 在指定命名空间运行容器
六、crictl 实践(K8s CRI 专用工具)
1. 安装与配置
bash
复制代码
# 1. 配置 K8s YUM 源
vim /etc/yum.repos.d/kubernetes.repo
# 添加:
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/repodata/repomd.xml.key
# 2. 安装 cri-tools(含 crictl)
yum install -y cri-tools
# 3. 配置对接 Containerd
vim /etc/crictl.yaml
# 添加:
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 5
debug: false
# 或通过命令配置
crictl config runtime-endpoint unix:///run/containerd/containerd.sock
crictl config image-endpoint unix:///run/containerd/containerd.sock
2. 核心操作(面向 K8s 调试)
(1)镜像操作
bash
复制代码
crictl images # 查看镜像
crictl pull httpd # 拉取镜像
crictl rmi 镜像ID # 删除镜像
crictl inspecti 镜像ID # 查看镜像详情
(2)容器操作
bash
复制代码
crictl ps # 查看运行容器
crictl ps -a # 查看所有容器
crictl exec -it 容器ID sh # 进入容器
crictl logs 容器ID # 查看容器日志
crictl stop 容器ID # 停止容器
crictl rm 容器ID # 删除容器
crictl stats # 查看容器资源占用
(3)Pod 操作(K8s 特有)
bash
复制代码
crictl pods # 查看 Pod
crictl runp pod配置.json # 运行 Pod
crictl inspectp PodID # 查看 Pod 详情
crictl stopp PodID # 停止 Pod
crictl rmp PodID # 删除 Pod
七、常用工具命令对照表
| 功能 |
Docker |
nerdctl |
ctr |
crictl |
| 查看容器状态 |
docker ps |
nerdctl ps |
ctr task ls / ctr c ls |
crictl ps |
| 查看镜像 |
docker images |
nerdctl images |
ctr i ls |
crictl images |
| 查看容器日志 |
docker logs |
nerdctl logs |
无 |
crictl logs |
| 查看容器详情 |
docker inspect |
nerdctl inspect |
ctr container info |
crictl inspect |
| 运行容器 |
docker run |
nerdctl run |
ctr run |
无 |
| 创建静态容器 |
docker create |
nerdctl create |
ctr container create |
crictl create |
| 拉取镜像 |
docker pull |
nerdctl pull |
ctr image pull |
crictl pull |
| 推送镜像 |
docker push |
nerdctl push |
ctr image push |
无 |
| 删除容器 |
docker rm |
nerdctl rm |
ctr container rm |
crictl rm |
| 删除镜像 |
docker rmi |
nerdctl rmi |
ctr image rm |
crictl rmi |
| 进入容器执行命令 |
docker exec |
nerdctl exec |
ctr task exec |
crictl exec |
| 镜像打标签 |
docker tag |
nerdctl tag |
ctr image tag |
无 |
| 导入镜像 |
docker load |
nerdctl load |
ctr image import |
无 |
| 导出镜像 |
docker save |
nerdctl save |
ctr image export |
无 |
工具差异说明
- nerdctl:Docker CLI 兼容,功能全面(支持网络、存储、命名空间),适合日常容器管理。
- ctr:Containerd 内置调试工具,无兼容性封装,适合底层操作与问题排查。
- crictl:K8s CRI 标准工具,专注 K8s 集群中容器运行时调试,支持 Pod 相关操作。