Containerd 容器技术详解
2026/5/14 1:58:23 网站建设 项目流程

一、Containerd 核心概念(扩展版)

1.1 定义与定位

Containerd是 CNCF 托管的开源轻量级容器运行时,专注容器全生命周期管理,遵循OCI 运行时 + 镜像规范,是 Kubernetes 默认底层运行时。

1.2 核心能力(原文 + 扩展)

  • 容器生命周期:创建 / 运行 / 暂停 / 恢复 / 停止 / 删除
  • 镜像管理:拉取 / 推送 / 导出 / 导入 / 校验 / 挂载
  • 标准化接口:兼容 CRI、OCI,对接 K8s、Docker
  • 插件化架构:存储、网络、运行时、监控可扩展
  • 安全隔离:基于 Linux Namespace + Cgroups 强隔离
  • 高可用:Shim 解耦,守护进程重启不影响容器运行

1.3 关键生态关系(必懂知识点)

表格

组件作用与 Containerd 关系
runcOCI 标准运行时,真正创建容器进程Containerd 通过 Shim 调用 runc
containerd-shim-v2容器垫片,解耦 daemon 与容器每个容器独立 shim,daemon 崩溃容器不掉线
CRIK8s 容器运行时接口Containerd 实现 CRI,直接被 kubelet 调用
ctrContainerd 原生 CLI底层调试,不兼容 docker 命令
crictlCRI 客户端K8s 场景专用,管理 Pod / 容器 / 镜像
nerdctl兼容 docker 命令的 CLI生产推荐,替代 ctr

知识点:Containerd ≠ DockerDocker 是完整容器平台(含构建、网络、编排),现代 Docker 底层依然用 Containerd;Containerd 是专注运行时的最小核心,更轻、更稳、更适合 K8s。


二、运行架构(深度解析)

2.1 整体架构

  • C/S 架构:服务端暴露 Unix Socket /gRPC
  • 单节点管理:一个 Containerd 管控一台宿主机
  • 三层核心:存储层、元数据层、运行时层

2.2 核心组件详解

  1. Storage(存储)

    • Content:镜像层数据,内容寻址存储
    • Snapshot:容器读写层,OverlayFS 默认驱动
    • Diff:层差异计算,用于提交与构建
  2. Metadata(元数据)

    • Images:镜像标签、digest、大小、平台
    • Containers:容器配置、命名空间、运行时
  3. Runtime(运行时)

    • Tasks:容器内进程组,对应运行中实例
    • Events:容器事件流,用于监控与告警

2.3 Runtime v2 + Shim 原理(重磅扩展)

  • Containerd 不直接调用 runc,而是启动containerd-shim-runc-v2独立进程
  • Shim 负责:挂接 Namespace、调用 runc、转发标准输入输出、监听退出码
  • 价值:daemon 重启 / 崩溃,容器继续运行,可重连管理,实现高可用隔离

三、安装与配置(含所有命令 + 扩展)

3.1 安装 Containerd(CentOS / EulerOS 24)

bash

运行

# Step1 配置阿里云 Docker 源 curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # Step2 替换变量适配系统 sed -i 's/$releasever/8/g' /etc/yum.repos.d/docker-ce.repo sed -i 's/$basearch/x86_64/g' /etc/yum.repos.d/docker-ce.repo # Step3 查看可用版本 yum list containerd.io --showduplicates # Step4 安装 yum -y install containerd.io

3.2 生成默认配置

bash

运行

mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml

3.3 镜像加速配置(原文完整 + 扩展说明)

bash

运行

# 编辑配置,启用 certs.d 配置目录 vim /etc/containerd/config.toml # 找到 [plugins."io.containerd.grpc.v1.cri".registry] # 添加:config_path = "/etc/containerd/certs.d" # 创建目录 mkdir -p /etc/containerd/certs.d/docker.io mkdir -p /etc/containerd/certs.d/registry.k8s.io # 配置 docker.io 加速 cat <<EOF | sudo tee /etc/containerd/certs.d/docker.io/hosts.toml server = "docker.io" [host."https://docker.m.daocloud.io"] capabilities = ["pull", "resolve"] EOF # 配置 k8s 镜像加速 cat <<EOF | sudo tee /etc/containerd/certs.d/registry.k8s.io/hosts.toml server = "registry.k8s.io" [host."https://registry.aliyuncs.com/google_containers"] capabilities = ["pull", "resolve"] override_path = true EOF

3.4 启动与校验

bash

运行

systemctl daemon-reload systemctl enable --now containerd systemctl status containerd # 查看版本 ctr version

3.5 配置扩展知识点(生产必备)

  • root = "/var/lib/containerd":镜像 / 层数据存储路径
  • state = "/run/containerd":运行时状态、socket 路径
  • version = 3:最新配置版本,v1 已废弃
  • SystemdCgroup = true:K8s 必须开启,适配 systemd 驱动
  • snapshotter = "overlayfs":生产推荐,性能最优

四、镜像管理(原文所有命令 + 扩展)

4.1 拉取镜像

bash

运行

# 全平台 ctr images pull docker.io/library/nginx:latest \ --all-platforms \ --hosts-dir=/etc/containerd/certs.d/ # 指定架构 ctr images pull docker.io/library/nginx:latest \ --platform linux/amd64 \ --hosts-dir=/etc/containerd/certs.d/

4.2 查看 / 检查镜像

bash

运行

# 查看 default 命名空间 ctr images ls # 查看 k8s.io 命名空间(K8s 镜像) ctr -n k8s.io images ls # 检查完整性 ctr images check

4.3 标签 / 删除 / 挂载 / 导出 / 导入

bash

运行

# 打标签 ctr images tag docker.io/library/nginx:latest nginx:v1 # 删除镜像 ctr images rm nginx:v1 # 挂载镜像到主机 ctr images mount nginx:v1 /mnt # 卸载 ctr images unmount /mnt # 导出(全平台) ctr images export --all-platforms nginx_latest.tar docker.io/library/nginx:latest # 导入 ctr images import nginx_latest.tar

镜像知识点扩展

  • ctr必须写完整镜像路径(docker.io/library/xxx),不能省略
  • 镜像导出导入可用于离线环境分发
  • 镜像挂载可直接查看文件系统,用于调试与审计

五、容器与任务管理(原文全命令 + 原理)

5.1 核心概念

  • Container:静态配置(资源、镜像、命令)
  • Task:运行中的进程实例,真正承载业务

5.2 完整操作流程

bash

运行

# 1 创建容器(静态) ctr containers create nginx:v1 nginx # 2 启动任务(运行) ctr task start -d nginx # 3 查看运行中任务 ctr task ls # 4 进入容器 ctr task exec --exec-id 0 -t nginx sh # 5 暂停/恢复 ctr task pause nginx ctr task resume nginx # 6 停止(kill) ctr task kill nginx # 7 删除任务 ctr task rm nginx # 8 删除容器 ctr containers rm nginx # 9 查看资源 metrics ctr task metrics nginx # 10 查看容器内进程宿主机 PID ctr task ps nginx

关键知识点

  • ctr 没有stop,只有kill,优雅停止需在容器内处理
  • --exec-id必须唯一,用于区分多个 exec 会话
  • metrics 输出内存 / CPU/PID 限额与实时用量,可做监控

六、插件与命名空间(扩展原理)

6.1 插件体系

bash

运行

# 列出所有插件 ctr plugins ls

常见插件类型:

  • Snapshotter:overlayfs/devmapper/btrfs
  • Runtime:runc v2、kata、gVisor
  • Content:内容存储
  • CRI:对接 Kubernetes

插件化让 Containerd 成为统一运行时骨架,可替换底层实现。

6.2 命名空间(资源隔离)

bash

运行

# 查看 ctr ns ls # 创建 ctr ns create test # 删除 ctr ns rm test # 指定命名空间操作 ctr -n test images pull ... ctr -n test containers create ...

知识点:K8s 固定使用 k8s.io 命名空间,与 default 完全隔离,不可混用。


七、安全与生产最佳实践(补充)

  1. 禁用非 HTTPS 镜像仓库

    toml

    [plugins."io.containerd.grpc.v1.cri".registry.configs."docker.io".tls] insecure_skip_verify = false
  2. 使用 SystemdCgroup,防止资源逃逸
  3. OverlayFS 快照驱动,性能与稳定性最优
  4. 限制镜像并发拉取数,避免带宽打满
  5. 定期清理闲置镜像、快照,释放磁盘

八、常见问题速查(扩展)

  1. 拉取镜像超时检查 certs.d 配置、加速地址、网络连通性
  2. task start 失败确认容器已 create、无重名、镜像完整
  3. K8s 看不到镜像ctr -n k8s.io images ls查看,必须在 k8s.io 命名空间
  4. daemon 重启后容器消失未使用 Runtime v2,或 shim 异常,重装新版 containerd

本章总结

本文完整覆盖原文安装、配置、镜像、容器、任务、插件、命名空间所有代码,并补充:

  • OCI/CRI 生态关系
  • Runtime v2 + Shim 高可用原理
  • 生产配置与安全基线
  • 常见问题排障
  • ctr/crictl/nerdctl 定位区别

Containerd 是云原生底层基石,掌握它可彻底理解容器运行机制,为 K8s 运维、性能调优、安全加固打下坚实基础。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询