Containerd 容器管理工具
·
一、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:latestctr 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 images、crictl ps、crictl pods、crictl pull、crictl 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)。
更多推荐
所有评论(0)