取代Docker!Containerd超全实战教程:安装配置+镜像_容器管理+Harbor集成

取代Docker!Containerd超全实战教程:安装配置+镜像/容器管理+Harbor集成

摘要:随着 Kubernetes 1.20 正式弃用 Docker 容器运行时,Containerd彻底成为云原生场景下的主流容器运行工具。作为 Docker 剥离独立的工业级容器运行时,它更轻量、性能更优、适配 K8s 生态,是云原生运维必备核心技能。本文基于 CentOS Stream 8 环境,从零梳理 Containerd 核心原理、两种安装方式、镜像容器全生命周期管理、私有仓库集成,以及 nerdctlcrictl 两大实用工具实操,全程干货可直接落地!

一、Containerd 核心介绍与发展历程

1.1 什么是 Containerd?

Containerd 是一款开源、工业级的容器运行时,由 Docker 剥离独立迭代,目前归属 CNCF 基金会管理,核心定位是底层容器运行基础设施,不直接面向终端用户,主要集成于 Kubernetes、Swarm 等编排系统。

核心特性:

  • 采用 C/S 架构,通过 gRPC API 提供稳定的容器管理能力

  • 仅专注容器运行时管理,轻量化、稳定性远超 Docker

  • 兼容 OCI 规范,配合 runC 实现容器启动、停止全流程

  • 性能优异,容器启停、删除效率优于 Docker、cri-o

1.2 前世今生:为何取代 Docker?

  • 2016 年:Docker 1.11 内置 Containerd,后续正式剥离为独立项目

  • 2017 年:Docker 放弃编排市场,宣布原生支持 Kubernetes,将 Containerd 捐赠给 CNCF

  • 2020 年:Kubernetes 1.20 移除 Docker 适配垫片(shim),正式将 Containerd 作为默认容器运行时

核心原因:Docker 包含大量冗余功能,而 Containerd 专注底层运行时,更适配 K8s 轻量化、标准化的运行需求。

1.3 核心架构

Containerd 采用模块化插件架构,核心分为三大模块、两大子系统:

三大模块:
  • Storage(存储层):负责镜像二进制内容、文件系统快照管理。包含 Content、Snapshot、Diff 组件。Content 存放镜像原始 blob 数据;Snapshot 管理镜像分层文件系统,就是容器 rootfs 来源;Diff 用于镜像层差分计算。
  • Metadata(元数据层):使用 BoltDB 数据库,保存镜像、静态容器、任务、事件的元数据记录。注意这里不保存镜像真实文件,只保存引用关系container代表静态容器对象;task代表容器正在运行的进程任务。
  • Runtime(运行时层):由containerd‑shim + runc 组成,对接操作系统,创建 namespace、cgroups,真正启动容器进程。因为 shim 独立进程运行,重启 containerd 主守护进程,不会杀死正在运行的业务容器
核心子系统
  • Bundle 子系统:管理容器配置、元数据、根文件系统,支持镜像打包与提取

  • Runtime 子系统:基于 runC 执行容器,完成容器创建、运行等核心操作

核心插件
  • Content Plugin:存储镜像不可变内容,提供镜像内容寻址能力

  • Snapshot Plugin:管理镜像分层快照,对应 Docker graphdriver 功能

  • Metrics Plugin:暴露组件监控指标,支持运维监控

二、Containerd 两种安装方式(CentOS Stream 8)

本文提供 YUM 在线安装(简单快捷)和 二进制安装(生产推荐、功能完整)两种方案,版本统一为稳定版 1.6.32。

2.1 YUM 源安装(新手首选)

基于阿里云 Docker 源安装,自动适配系统依赖,操作简单:

# 安装依赖工具
yum install -y yum-utils device-mapper-persistent-data lvm2 vim

# 添加阿里云 docker-ce 源(包含 containerd)
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache

# 查看可用版本
yum list | grep containerd

# 安装 containerd
yum -y install containerd.io

# 配置开机自启并启动服务
systemctl enable containerd --now

# 验证安装
systemctl status containerd
ctr version

2.2 二进制安装(生产环境推荐)

二进制包包含 runC、CNI 网络插件,适配 K8s 集群环境,功能更完整:

步骤1:安装 Containerd 主程序
# 下载官方二进制包
wget https://github.com/containerd/containerd/releases/download/v1.6.32/cri-containerd-cni-1.6.32-linux-amd64.tar.gz

# 解压部署
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/

# 生成默认配置文件
mkdir /etc/containerd
containerd config default > /etc/containerd/config.toml

# 启动并自启
systemctl enable containerd --now
systemctl status containerd
步骤2:安装 runC 运行时

二进制包内置 runC 依赖系统 seccomp,建议单独安装完整版:

# 下载 runc 1.3.0
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

三、Containerd 镜像全生命周期管理

Containerd 原生使用 ctr 命令管理镜像,区别于 Docker,核心支持镜像拉取、挂载、导出、导入、打标签、删除等操作。

3.1 核心命令说明

# 查看镜像管理帮助
ctr images --help

# 常用简写
ctr i ls    # 查看镜像列表
ctr i pull  # 拉取镜像
ctr i tag   # 打标签
ctr i rm    # 删除镜像

3.2 实操命令大全

# 1. 查看本地镜像
ctr images list

# 2. 拉取镜像(支持华为云镜像加速)
ctr images pull 054b8ac70e8010d90f2ac00ef29e6580.mirror.swr.myhuaweicloud.com/library/nginx:latest

# 3. 镜像挂载(查看镜像内部文件)
ctr images pull 镜像地址 /mnt
ls /mnt
umount /mnt

# 4. 导出镜像为 tar 包
ctr i export --platform linux/amd64 nginx.tar 镜像地址

# 5. 导入本地镜像
ctr images import --platform linux/amd64 nginx.tar

# 6. 镜像打标签(简化镜像名)
ctr images pull 原镜像地址 nginx:latest

# 7. 删除镜像
ctr image rm nginx:latest

四、Containerd 容器管理实操

Containerd 区分静态容器(container)动态容器(task):静态容器仅初始化资源,未运行进程;task 启动后容器才真正运行。

4.1 核心操作命令

# 1. 创建静态容器
ctr container create nginx:latest nginx1

# 2. 查看静态容器
ctr container ls

# 3. 启动容器进程(转为动态容器)
ctr task start -d nginx1
ctr task ls

# 4. 进入容器终端
ctr task exec --exec-id $RANDOM -t nginx1 /bin/sh

# 5. 直接创建并运行容器(一步到位)
ctr run -d --net-host nginx:latest nginx2

# 6. 暂停/恢复容器
ctr tasks pause nginx2
ctr tasks resume nginx2

# 7. 停止/删除容器
ctr tasks kill nginx2
ctr tasks delete nginx2
ctr container delete nginx2

五、私有仓库 Harbor 集成

支持通过 http/https 协议对接私有 Harbor 仓库,实现镜像上传、拉取:

# 1. 配置域名解析
vim /etc/hosts
192.168.108.30 my.harbor.com

# 2. 拉取私有仓库镜像(--plain-http 适配 http 协议)
ctr image pull --plain-http 192.168.108.30/cloud/nginx:latest

# 3. 本地镜像打私有仓库标签
ctr images tag nginx:latest my.harbor.com/cloud/nginx:latest

# 4. 推送镜像到 Harbor
ctr image push --platform linux/amd64 --plain-http --user "images_admin:Cloud12#$" my.harbor.com/cloud/nginx:latest

六、命名空间(Namespace)隔离管理

Containerd 命名空间用于隔离不同环境的容器、镜像,实现多环境隔离,默认使用 default 命名空间。

# 查看命名空间
ctr namespace ls

# 创建自定义命名空间
ctr namespace create myns

# 在指定命名空间操作镜像/容器
ctr -n myns images ls
ctr -n myns images pull 镜像地址
ctr -n myns container create 镜像名 容器名

# 删除命名空间
ctr namespace rm testns

七、神器推荐:nerdctl(Docker 兼容命令)

nerdctl 是 Containerd 适配 Docker CLI 的工具,命令与 Docker 完全一致,解决 ctr 命令繁琐的问题,新手零门槛上手。

7.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/

# 安装 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

# 配置命令补全
yum install -y bash-completion
nerdctl completion bash > /etc/bash_completion.d/nerdctl
source /etc/bash_completion.d/nerdctl

7.2 镜像加速配置

# 手动生成默认配置文件
containerd config default > /etc/containerd/config.toml
# 编辑 containerd 配置
vim /etc/containerd/config.toml
# 找到 registry 模块,添加镜像加速
# 147行修改 config_path = "/etc/containerd/certs.d"

# 创建加速配置目录
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

7.3 常用 Docker 风格命令

# 镜像管理
nerdctl images          # 查看镜像
nerdctl pull busybox    # 拉取镜像
nerdctl rmi 镜像名      # 删除镜像
nerdctl save/load       # 镜像导入导出

# 容器管理
nerdctl ps              # 查看容器
nerdctl run -d nginx    # 运行容器
nerdctl exec -it 容器id bash # 进入容器
nerdctl stop/rm 容器id  # 停止/删除容器

# 网络/存储管理
nerdctl network ls      # 查看网络
nerdctl volume ls       # 查看数据卷

八、K8s 专用工具:crictl 实操

crictl 是 K8s 官方 CRI 接口工具,专门用于集群内容器、镜像排查,是 K8s 运维必备工具。

8.1 安装与配置

# 添加 K8s 阿里云源
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

# 安装工具
yum install -y cri-tools

# 配置对接 containerd
vim /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 5
debug: false

8.2 核心常用命令

crictl images   # 查看集群镜像
crictl ps       # 查看运行容器
crictl pull     # 拉取镜像
crictl logs     # 查看容器日志
crictl exec     # 进入容器
crictl rm/rmi   # 删除容器/镜像

九、主流容器命令对照表

汇总 Docker / nerdctl / ctr / crictl 核心命令,一键查阅,告别命令混淆:

命令功能dockerpodmannerdctlctrcrictl
查看容器状态docker pspodman psnerdctl psctr task ls / ctr container lscrictl ps
查看镜像docker imagespodman imagesnerdctl imagesctr image lscrictl images
查看容器日志docker logspodman logsnerdctl logscrictl logs
查看容器信息docker inspectpodman inspectnerdctl inspectctr container infocrictl inspect
查看容器资源docker statspodman statsnerdctl statscrictl stats
运行新容器docker runpodman runnerdctl runctr run
修改镜像标签docker tagpodman tagnerdctl tagctr image tag
创建新容器docker createpodman createnerdctl createctr container createcrictl create
导入镜像docker loadpodman loadnerdctl loadctr image import
导出镜像docker savepodman savenerdctl savectr image export
删除容器docker rmpodman rmnerdctl rmctr container rmcrictl rm
删除镜像docker rmipodman rminerdctl rmictr image rmcrictl rmi
拉取镜像docker pullpodman pullnerdctl pullctr image pullcrictl pull
推送镜像docker pushpodman pushnerdctl pushctr image push
在容器内执行命令docker execpodman execnerdctl execcrictl exec

十、总结

1. Containerd 是云原生时代的标准容器运行时,替代 Docker 已成必然趋势,轻量化、高性能、适配 K8s 是核心优势;

2. 生产环境优先选择二进制安装,自带完整网络、运行时依赖,适配集群环境;

3. 日常运维推荐使用 nerdctl(兼容 Docker 命令),K8s 集群排查使用 crictl,原生 ctr 适合底层精细化操作;

4. 支持私有仓库、镜像加速、命名空间隔离,完全满足企业级容器运维需求。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值