ctr 容器工具详解:原理、用法与实战

作者:一缘(zhuty.com)

一、ctr 工具简介

ctr 是 containerd 的原生命令行工具,用于直接操作和管理容器、镜像、快照、命名空间等底层资源。相比 Docker CLI,ctr 更加轻量、贴近底层,常用于容器运行时调试、Kubernetes 集成、CI/CD 自动化等场景。

  • containerd 是 CNCF 毕业项目,Docker 的核心容器运行时。
  • ctr 是 containerd 自带的 CLI,适合开发者和运维人员做底层容器管理。

二、ctr 与 Docker 的关系

  • Docker 早期架构 = Docker CLI + Docker Daemon + containerd + runc
  • 现代云原生体系下,Kubernetes、CRI-O、containerd 等直接调用 containerd 作为容器运行时
  • ctr 只操作 containerd,不负责镜像构建、网络、编排等高级功能
  • 适合底层调试、自动化脚本、K8s 集成等

三、ctr 安装与环境准备

containerd 安装后自带 ctr 工具。常见安装方式:

# Ubuntu
sudo apt-get install containerd
# 或用二进制包
wget https://github.com/containerd/containerd/releases

查看 ctr 版本:

ctr version

四、ctr 常见命令与用法

1. 镜像管理

# 拉取镜像
sudo ctr image pull docker.io/library/nginx:latest
# 查看本地镜像
sudo ctr images ls
# 删除镜像
sudo ctr images rm docker.io/library/nginx:latest

2. 容器生命周期管理

# 创建容器(不会自动启动)
sudo ctr container create docker.io/library/nginx:latest mynginx
# 启动容器
sudo ctr task start -d mynginx
# 查看运行中的容器
sudo ctr task ls
# 停止容器
sudo ctr task kill mynginx
# 删除容器
sudo ctr container rm mynginx

3. 进入容器/执行命令

# 进入容器交互终端
sudo ctr task exec --exec-id 1 -t mynginx /bin/sh

4. 命名空间操作

containerd 支持多命名空间隔离,默认 namespace 为 default

# 查看所有命名空间
sudo ctr namespaces ls
# 指定命名空间操作
sudo ctr --namespace k8s.io images ls

五、实战案例:用 ctr 管理 Nginx 容器

  1. 拉取镜像
sudo ctr image pull docker.io/library/nginx:latest
  1. 创建并启动容器
sudo ctr container create docker.io/library/nginx:latest mynginx
sudo ctr task start -d mynginx
  1. 查看容器状态
sudo ctr task ls
  1. 进入容器
sudo ctr task exec --exec-id 1 -t mynginx /bin/sh
  1. 停止并删除容器
sudo ctr task kill mynginx
sudo ctr container rm mynginx

六、适用场景与最佳实践

  • K8s/云原生环境下底层容器调试
  • 自动化脚本批量管理容器
  • 镜像分发、命名空间隔离
  • 生产环境建议用 containerd API 或 K8s 管理,ctr 适合调试和特殊场景
  • 注意 ctr 不负责网络、存储等高级功能

七、总结

ctr 是 containerd 的底层利器,适合有容器底层管理需求的开发者和运维人员。建议日常用 Docker/K8s 管理容器,遇到底层问题或需自动化时用 ctr 直连 containerd,效率极高。


如需更多 ctr 实战案例或遇到问题,欢迎留言交流!