文章目录
- [Containerd 从入门到实战](#Containerd 从入门到实战)
-
- 引言
- [一、Containerd 核心亮点](#一、Containerd 核心亮点)
- [二、环境部署(CentOS Stream 8 实操)](#二、环境部署(CentOS Stream 8 实操))
-
- [1. 两种安装方式(优先 YUM 安装)](#1. 两种安装方式(优先 YUM 安装))
-
- [(1)YUM 安装(推荐,简单高效)](#(1)YUM 安装(推荐,简单高效))
- [(2)二进制安装(K8s 集群推荐)](#(2)二进制安装(K8s 集群推荐))
- [2. 关键配置(镜像加速 + CRI 适配 K8s)](#2. 关键配置(镜像加速 + CRI 适配 K8s))
-
- (1)配置镜像加速(国内必配)
- [(2)适配 K8s 配置(可选)](#(2)适配 K8s 配置(可选))
- 三、核心概念速通
-
- [1. 架构概览](#1. 架构概览)
- [2. 关键术语](#2. 关键术语)
- [四、核心操作实战(ctr 命令)](#四、核心操作实战(ctr 命令))
-
- [1. 镜像管理](#1. 镜像管理)
- [2. 容器管理](#2. 容器管理)
- [3. 命名空间管理](#3. 命名空间管理)
- [4. 私有仓库集成(Harbor 为例)](#4. 私有仓库集成(Harbor 为例))
- [五、实用工具:nerdctl(Docker 兼容客户端)](#五、实用工具:nerdctl(Docker 兼容客户端))
-
- [1. 安装 nerdctl](#1. 安装 nerdctl)
- [2. 常用命令(与 Docker 无缝衔接)](#2. 常用命令(与 Docker 无缝衔接))
- 六、调试工具:crictl
-
- [1. 安装与配置](#1. 安装与配置)
- [2. 常用调试命令](#2. 常用调试命令)
- [七、核心命令对比表(Docker -> Containerd 迁移参考)](#七、核心命令对比表(Docker -> Containerd 迁移参考))
- 八、总结
Containerd 从入门到实战
引言
随着 Kubernetes 逐步弃用 Docker 作为默认容器运行时,Containerd 凭借其轻量、稳定、原生兼容 K8s 的特性,成为云原生生态的核心组件。它脱胎于 Docker,专注于容器运行时核心功能,剥离了 Docker 多余的构建、编排功能,性能更优、资源占用更低。~
一、Containerd 核心亮点
- 轻量高效:仅保留容器运行时核心功能(镜像管理、容器生命周期、网络 / 存储),剔除冗余模块,资源占用仅为 Docker 的 1/3。
- OCI 兼容:遵循 Open Container Initiative(OCI)规范,支持所有 Docker 构建的镜像,无缝迁移。
- K8s 原生集成:无需中间垫片(shim),直接实现 K8s 的 CRI(Container Runtime Interface)接口,部署更简单、稳定性更高。
- 架构解耦:采用 C/S 架构 + 插件化设计,核心功能模块化(镜像、容器、快照、GC 等),易于扩展和维护。
- 高性能:相比 Docker 和 CRI-O,在容器启动、停止、删除等操作上性能更优,适合大规模容器集群场景。
二、环境部署(CentOS Stream 8 实操)
1. 两种安装方式(优先 YUM 安装)
(1)YUM 安装(推荐,简单高效)
bash
# 1. 安装基础依赖
yum install -y yum-utils device-mapper-persistent-data lvm2 vim
# 2. 配置阿里云 Docker 源(包含 Containerd 包)
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
# 3. 安装 Containerd(默认包含 runc)
yum install -y containerd.io
# 4. 启动并设置开机自启
systemctl enable containerd --now
# 5. 验证安装(显示客户端/服务端版本即成功)
ctr version
(2)二进制安装(K8s 集群推荐)
适用于需要定制配置的场景,核心步骤:
bash
# 1. 下载包含 CNI 和 runc 的安装包
wget https://github.com/containerd/containerd/releases/download/v1.6.32/cri-containerd-cni-1.6.32-linux-amd64.tar.gz
# 2. 解压并部署二进制文件
mkdir -p /opt/containerd
tar xf cri-containerd-cni-1.6.32-linux-amd64.tar.gz -C /opt/containerd
# 3. 复制运行时文件和系统服务
cp /opt/containerd/usr/local/bin/* /usr/local/bin/
cp /opt/containerd/etc/systemd/system/containerd.service /usr/lib/systemd/system/
# 4. 生成默认配置并启动
containerd config default > /etc/containerd/config.toml
systemctl daemon-reload && systemctl enable containerd --now
2. 关键配置(镜像加速 + CRI 适配 K8s)
(1)配置镜像加速(国内必配)
bash
# 编辑配置文件
vim /etc/containerd/config.toml
# 找到 [plugins."io.containerd.grpc.v1.cri".registry.mirrors] 节点,添加阿里云加速
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://xxxx.mirror.aliyuncs.com"] # 替换为自己的加速地址
# 重启 Containerd 生效
systemctl restart containerd
(2)适配 K8s 配置(可选)
若用于 K8s 集群,需修改运行时参数:
bash
# 在 config.toml 中设置 SystemdCgroup = true(适配 K8s 容器组管理)
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
systemctl restart containerd
三、核心概念速通
1. 架构概览
Containerd 采用 C/S 架构,核心分为三层:
- 客户端:通过 gRPC 与服务端通信(常用客户端:ctr、nerdctl、crictl)。
- 核心服务:包含镜像管理、容器生命周期、快照、命名空间等模块,均以插件形式集成。
- 运行时:依赖 runc(默认)、kata 等 OCI 兼容运行时,负责容器实际运行。
2. 关键术语
- 命名空间(Namespace) :实现容器 / 镜像的隔离(类似 Docker 的命名空间),默认有
default命名空间。 - 镜像(Image):遵循 OCI 规范的只读模板,与 Docker 镜像完全兼容。
- 容器(Container):镜像的可运行实例,包含静态配置(Container)和动态进程(Task)。
- 快照(Snapshot):管理镜像分层存储,类似 Docker 的 storage driver(默认使用 overlayfs)。
四、核心操作实战(ctr 命令)
ctr 是 Containerd 自带的调试客户端,适合直接操作 Containerd,常用命令如下:
1. 镜像管理
bash
# 1. 拉取镜像(需指定完整仓库地址,支持 HTTP 私有仓库加 --plain-http)
ctr images pull 054b8ac70e8010d90f2ac00ef29e6580.mirror.swr.myhuaweicloud.com/library/nginx:latest
# 2. 查看本地镜像
ctr images ls 或 ctr i ls
# 3. 镜像打标签
ctr images tag 镜像完整地址 nginx:latest
# 4. 导出镜像
ctr images export --platform linux/amd64 nginx.tar nginx:latest
# 5. 导入镜像
ctr images import nginx.tar
# 6. 删除镜像
ctr images rm nginx:latest
2. 容器管理
Containerd 中容器分为「静态容器(Container)」和「动态任务(Task)」,需先创建容器再启动任务:
bash
# 1. 创建静态容器(基于 nginx 镜像,命名为 nginx1)
ctr container create nginx:latest nginx1
# 2. 查看静态容器
ctr container ls 或 ctr c ls
# 3. 启动容器(后台运行加 -d)
ctr task start -d nginx1
# 4. 查看运行中的任务(容器进程)
ctr task ls 或 ctr t ls
# 5. 进入容器(--exec-id 指定唯一 ID,$RANDOM 自动生成)
ctr task exec --exec-id $RANDOM -t nginx1 /bin/sh
# 6. 暂停/恢复容器
ctr task pause nginx1
ctr task resume nginx1
# 7. 停止并删除容器(需先停任务,再删容器)
ctr task kill nginx1
ctr task delete nginx1
ctr container delete nginx1
# 8. 一键运行容器(创建+启动合并)
ctr run -d --net-host nginx:latest nginx2 # --net-host 共享宿主机网络
3. 命名空间管理
命名空间用于隔离资源,适合多环境隔离场景:
bash
# 1. 查看所有命名空间
ctr namespace ls 或 ctr ns ls
# 2. 创建命名空间
ctr namespace create myns
# 3. 在指定命名空间操作(加 -n 参数)
ctr -n myns images pull nginx:latest
ctr -n myns container create nginx:latest mynginx
ctr -n myns task start -d mynginx
# 4. 删除命名空间(会删除命名空间内所有资源)
ctr namespace rm myns
4. 私有仓库集成(Harbor 为例)
bash
# 1. 拉取私有仓库镜像(--plain-http 用于 HTTP 仓库,--user 指定账号密码)
ctr images pull --plain-http --user "用户名:密码" 192.168.108.30/cloud/nginx:latest
# 2. 推送镜像到私有仓库
ctr images tag nginx:latest 192.168.108.30/cloud/nginx:v1
ctr images push --plain-http --user "用户名:密码" 192.168.108.30/cloud/nginx:v1
五、实用工具:nerdctl(Docker 兼容客户端)
nerdctl 是 Containerd 的高级客户端,完全兼容 Docker CLI 命令,上手成本极低,推荐日常使用:
1. 安装 nerdctl
bash
# 1. 下载并安装 nerdctl
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. 安装 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
# 3. 配置命令自动补全(可选)
yum install -y bash-completion
nerdctl completion bash > /etc/bash_completion.d/nerdctl
source /etc/bash_completion.d/nerdctl
2. 常用命令(与 Docker 无缝衔接)
| Docker 命令 | nerdctl 命令 | 功能描述 |
|---|---|---|
| docker images | nerdctl images | 查看本地镜像 |
| docker pull | nerdctl pull | 拉取镜像 |
| docker run -d -p | nerdctl run -d -p | 后台运行容器并端口映射 |
| docker exec -it | nerdctl exec -it | 进入容器 |
| docker ps | nerdctl ps | 查看运行中容器 |
| docker stop/start | nerdctl stop/start | 停止 / 启动容器 |
| docker rm | nerdctl rm | 删除容器 |
| docker save/load | nerdctl save/load | 导出 / 导入镜像 |
实操示例:
bash
# 1. 拉取镜像(与 Docker 命令完全一致)
nerdctl pull nginx:latest
# 2. 运行容器(端口映射 8080->80,命名为 nginx-nerdctl)
nerdctl run -d -p 8080:80 --name nginx-nerdctl nginx:latest
# 3. 查看容器和日志
nerdctl ps
nerdctl logs -f nginx-nerdctl
# 4. 数据卷挂载(持久化数据)
mkdir -p /data/nginx/html
echo "Hello Nerdctl" > /data/nginx/html/index.html
nerdctl run -d -p 8081:80 -v /data/nginx/html:/usr/share/nginx/html nginx:latest
# 5. 网络管理(创建自定义网络)
nerdctl network create mynet
nerdctl run -d --net mynet --name nginx-net nginx:latest
六、调试工具:crictl
crictl 是 K8s 社区提供的 CRI 兼容客户端,专门用于调试 K8s 节点上的容器运行时:
1. 安装与配置
bash
# 1. 配置 K8s YUM 源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[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
EOF
# 2. 安装 crictl
yum install -y cri-tools
# 3. 配置连接 Containerd
cat > /etc/crictl.yaml << EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 5
debug: false
EOF
2. 常用调试命令
bash
# 1. 查看镜像(K8s 节点上的所有镜像)
crictl images
# 2. 查看容器(包含 K8s 管理的容器)
crictl ps
crictl ps -a # 查看所有容器
# 3. 查看容器日志(K8s Pod 对应的容器日志)
crictl logs 容器ID
# 4. 进入容器(调试 K8s 容器)
crictl exec -it 容器ID /bin/sh
# 5. 查看 Pod 信息(K8s Pod 对应的沙箱容器)
crictl pods
七、核心命令对比表(Docker -> Containerd 迁移参考)
| 功能场景 | Docker 命令 | nerdctl 命令 | ctr 命令 | crictl 命令 |
|---|---|---|---|---|
| 查看镜像 | docker images | nerdctl images | ctr images ls | crictl images |
| 拉取镜像 | docker pull | nerdctl pull | ctr images pull | crictl pull |
| 运行容器 | docker run -d | nerdctl run -d | ctr run -d | 无(需通过 Pod) |
| 查看运行容器 | docker ps | nerdctl ps | ctr task ls | crictl ps |
| 进入容器 | docker exec -it | nerdctl exec -it | ctr task exec | crictl exec -it |
| 查看日志 | docker logs -f | nerdctl logs -f | 无 | crictl logs |
| 删除容器 | docker rm | nerdctl rm | ctr container delete | crictl rm |
| 删除镜像 | docker rmi | nerdctl rmi | ctr images rm | crictl rmi |
| 导出镜像 | docker save | nerdctl save | ctr images export | 无 |
| 导入镜像 | docker load | nerdctl load | ctr images import | 无 |
八、总结
Containerd 作为轻量、稳定、原生兼容 K8s 的容器运行时,已成为云原生场景的首选。核心优势在于剥离冗余功能、聚焦运行时核心,同时兼容 Docker 生态,迁移成本极低。
- 适合场景:K8s 集群容器运行时、追求轻量高效的容器部署、多环境隔离的生产环境。
- 工具选择:日常操作优先用
nerdctl(Docker 兼容),Containerd 调试用ctr,K8s 节点调试用crictl。