一、Containerd 概述

  • 定位:工业级容器运行时,专注于容器生命周期管理,不直接面向最终用户,而是集成到 Kubernetes、Swarm、Mesos 等编排系统。
  • 背景:从 Docker Engine 剥离独立发展,2017 年捐给 CNCF。Kubernetes 1.20+ 逐步弃用 Docker 而原生支持 Containerd。
  • 角色:负责拉取镜像、管理容器、存储、网络等,底层调用 runC(符合 OCI 规范)。
  • 架构:C/S 架构,通过 gRPC 提供 API;分为 Storage、Metadata、Runtime 三大块,插件化设计(Service、Metadata、GC、Runtime 等插件)。

二、安装方式

1. YUM 安装(CentOS Stream 8)

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache
yum -y install containerd.io
systemctl enable containerd --now
ctr version   # 验证

2. 二进制安装

  • 两种包:containerd-xxx(不含 runC) 和 cri-containerd-cni-xxx(含 runC、CNI 插件,推荐 K8s 使用)。
  • 步骤:解压 → 复制二进制至 /usr/local/bin → 复制 containerd.service → 生成配置文件 /etc/containerd/config.toml → 启动。
  • runC 可单独下载安装(解决 seccomp 依赖)。

三、镜像管理(ctr images 子命令)

操作 命令示例
查看镜像 ctr image ls
拉取镜像 ctr image pull <镜像名>(需完整地址或配置镜像加速)
挂载镜像 ctr image mount <镜像> /mnt
导出镜像 ctr image export --platform linux/amd64 nginx.tar <镜像>
删除镜像 ctr image rm <镜像>
导入镜像 ctr image import nginx.tar
打标签 ctr image tag <源镜像> <新标签>

注意:ctr pull 不能直接写 nginx:alpine,需完整路径或配置 hosts.toml 加速。

四、容器管理(静态容器 + 任务)

  • 静态容器ctr container create(只创建不运行)
  • 动态容器(任务)ctr task start 启动进程
  • 一步到位ctr run -d --net-host nginx:latest nginx2
操作 命令
查看容器 ctr container ls
查看任务 ctr task ls
启动任务 ctr task start -d <容器ID>
进入容器 ctr task exec --exec-id $RANDOM -t <容器> /bin/sh
暂停/恢复 ctr task pause / resume <容器>
停止任务 ctr task kill <容器>
删除任务 ctr task delete <容器>
删除容器 ctr container rm <容器>

五、私有镜像仓库(Harbor)

  • 配置 hosts 解析域名
  • 拉取 HTTP 仓库:ctr image pull --plain-http <地址>
  • 推送镜像:ctr image tag nginx:latest my.harbor.com/cloud/nginx:latest
    ctr image push --plain-http --user "用户名:密码" my.harbor.com/cloud/nginx:latest

六、命名空间(Namespace)

  • 作用:隔离容器、镜像等资源。

  • 默认命名空间:default(Docker 使用 moby

  • 命令:

    ctr namespace ls                    # 查看
    ctr namespace create <名称>        # 创建
    ctr namespace rm <名称>             # 删除
    ctr -n <命名空间> images ls        # 指定命名空间操作
    

七、nerdctl(推荐 CLI,兼容 Docker 语法)

  • 安装:下载 nerdctl 二进制,配置自动补全,安装 CNI 插件。
  • 镜像加速:修改 /etc/containerd/config.toml 中的 config_path,创建 hosts.toml 配置镜像仓库。
  • 常用命令(与 Docker 高度一致):
Docker 命令 nerdctl 命令
docker images nerdctl images
docker pull nerdctl pull
docker run nerdctl run
docker ps nerdctl ps
docker exec nerdctl exec
docker stop/start/restart 相同
docker commit nerdctl commit
docker save/load nerdctl save / load
docker network nerdctl network
docker volume nerdctl volume
  • 网络:默认创建 nerdctl0 网桥(10.4.0.1/24),容器自动连接。
  • 存储:支持绑定挂载(-v)和卷(volume)。

八、crictl(Kubernetes CRI 调试工具)

  • 配置/etc/crictl.yaml 指定 runtime-endpoint: unix:///run/containerd/containerd.sock
  • 用途:与 CRI 兼容的运行时交互,用于调试 K8s 节点上的容器、Pod 和镜像。
  • 常用命令crictl imagescrictl pscrictl podscrictl pullcrictl exec 等。

九、三大 CLI 对比

功能 docker nerdctl ctr crictl
查看容器 docker ps nerdctl ps ctr task ls / ctr container ls crictl ps
查看镜像 docker images nerdctl images ctr image ls crictl images
运行容器 docker run nerdctl run ctr run crictl runp + crictl create
日志 docker logs nerdctl logs crictl logs
进入容器 docker exec nerdctl exec ctr task exec crictl exec

建议:日常管理使用 nerdctl(兼容 Docker 习惯);K8s 环境调试用 crictl;底层开发调试用 ctr

十、性能特点

  • 对比 Docker 和 CRI-O,Containerd 在容器启动、停止、删除等操作上性能更优(测试工具 bucketbench)。

更多推荐