Containerd 容器管理工具
一、Containerd 介绍
1. 核心定位
- 始于 2016 年 Docker 1.11,2017 年捐赠给 CNCF,2020 年成为 Kubernetes 1.20+ 首选容器运行时
- 专注容器运行时管理,非面向终端用户,用于集成到 Kubernetes、Swarm 等上层编排系统
- 轻量级架构,仅负责单节点容器生命周期、镜像管理、网络存储等核心功能,依赖 runC 执行容器
2. 技术优势
- 完全兼容 OCI 标准,支持所有符合规范的容器镜像
- 性能优于 Docker 和 CRI-O(启动/停止/删除容器速度更快)
- 原生支持 Kubernetes CRI 接口,无需额外 shim 层
- 插件化架构,高扩展性和稳定性
二、Containerd 安装(CentOS Stream 8)
1. YUM 方式安装
Bash
复制代码
# 安装依赖工具
yum install -y yum-utils device-mapper-persistent-data lvm2 vim
# 添加阿里云 YUM 源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache
# 安装 containerd.io
yum -y install containerd.io
# 验证安装
rpm -qa | grep containerd
# 启动并设置开机自启
systemctl enable containerd --now
systemctl status containerd
# 验证版本
ctr version
2. 二进制方式安装(推荐 Kubernetes 集群)
Bash
复制代码
# 下载包含 CNI 和 runC 的安装包
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/
cd containerd/
# 复制运行时文件
cp usr/local/bin/* /usr/local/bin
# 配置系统服务
cp etc/systemd/system/containerd.service /usr/lib/systemd/system/
systemctl daemon-reload
# 生成默认配置文件
mkdir /etc/containerd
containerd config default > /etc/containerd/config.toml
# 启动服务
systemctl enable containerd --now
# 安装 runC(单独安装确保 seccomp 支持)
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
三、容器镜像管理(ctr 命令)
1. 基础命令帮助
Bash
复制代码
# 查看所有镜像相关命令
ctr images --help
# 查看镜像列表(多种等价写法)
ctr images list
ctr images ls
ctr image list
ctr i ls
2. 镜像操作核心命令
Bash
复制代码
# 拉取镜像(需指定完整仓库地址)
ctr images pull 054b8ac70e8010d90f2ac00ef29e6580.mirror.swr.myhuaweicloud.com/library/nginx:latest
# 镜像挂载(查看镜像内容)
ctr images mount 054b8ac70e8010d90f2ac00ef29e6580.mirror.swr.myhuaweicloud.com/library/nginx:latest /mnt
ls /mnt
umount /mnt
# 导出镜像(指定平台)
ctr i export --platform linux/amd64 nginx.img 054b8ac70e8010d90f2ac00ef29e6580.mirror.swr.myhuaweicloud.com/library/nginx:latest
# 导入镜像
ctr images import --platform linux/amd64 nginx.img
# 修改镜像标签
ctr images tag 054b8ac70e8010d90f2ac00ef29e6580.mirror.swr.myhuaweicloud.com/library/nginx:latest nginx:latest
# 删除镜像
ctr image rm nginx:latest
四、容器生命周期管理(ctr 命令)
1. 容器操作核心命令
Bash
复制代码
# 查看容器命令帮助
ctr container --help
ctr run --help
# 创建静态容器(未运行)
ctr container create nginx:latest nginx1
# 查看静态容器
ctr container ls
ctr c ls
# 启动容器(变为动态容器)
ctr task start -d nginx1 # -d 后台运行
# 查看运行中的任务(动态容器)
ctr task ls
ctr t ls
# 进入容器
ctr task exec --exec-id $RANDOM -t nginx1 /bin/sh
# 直接运行容器(创建+启动)
ctr run -d --net-host nginx:latest nginx2 # --net-host 使用主机网络
# 暂停/恢复容器
ctr tasks pause nginx2
ctr tasks resume nginx2
# 停止容器
ctr tasks kill nginx2
# 删除容器(需先停止任务)
ctr tasks delete nginx2
ctr container delete nginx2
五、私有仓库集成(Harbor)
Bash
复制代码
# 配置 Harbor 域名解析
echo "192.168.108.30 my.harbor.com" >> /etc/hosts
# 从 Harbor 拉取镜像(http 协议需加 --plain-http)
ctr image pull --plain-http 192.168.108.30/cloud/nginx:latest
# 推送镜像到 Harbor
ctr images tag nginx:latest my.harbor.com/cloud/nginx:latest
ctr image push --platform linux/amd64 --plain-http --user "images_admin:Cloud12#$" my.harbor.com/cloud/nginx:latest
六、命名空间管理
Bash
复制代码
# 查看命名空间
ctr namespace ls
# 创建命名空间
ctr namespace create myns
ctr namespace create testns
# 删除命名空间
ctr namespace rm testns
# 在指定命名空间操作镜像
ctr -n myns images pull 054b8ac70e8010d90f2ac00ef29e6580.mirror.swr.myhuaweicloud.com/library/nginx:latest
ctr -n myns images ls
# 在指定命名空间创建并启动容器
ctr -n myns container create 054b8ac70e8010d90f2ac00ef29e6580.mirror.swr.myhuaweicloud.com/library/nginx:latest mynginx
ctr -n myns task start -d mynginx
ctr -n myns tasks ls
七、nerdctl 工具使用(Docker 兼容)
1. 安装与配置
Bash
复制代码
# 安装 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/
# 配置命令补全
yum install -y bash-completion
nerdctl completion bash > /etc/bash_completion.d/nerdctl
source /etc/bash_completion.d/nerdctl
# 安装 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
# 配置镜像加速
containerd config default > /etc/containerd/config.toml
mkdir -p /etc/containerd/certs.d/docker.io
cat > /etc/containerd/certs.d/docker.io/hosts.toml << EOF
server = "https://054b8ac70e8010d90f2ac00ef29e6580.mirror.swr.myhuaweicloud.com"
[host."https://054b8ac70e8010d90f2ac00ef29e6580.mirror.swr.myhuaweicloud.com"]
capabilities = ["pull", "resolve"]
EOF
systemctl restart containerd
2. 核心操作命令
(1)镜像管理
Bash
复制代码
# 查看镜像
nerdctl images
# 拉取镜像
nerdctl pull busybox
nerdctl pull httpd
# 镜像打标签
nerdctl tag busybox busybox_containerd
# 导出/导入镜像
nerdctl save busybox -o busybox.tar
nerdctl load -i busybox.tar
# 删除镜像
nerdctl rmi httpd
# 查看镜像历史
nerdctl image history busybox
(2)容器管理
Bash
复制代码
# 运行容器
nerdctl run -d --name nginx1 nginx
nerdctl run -it ubuntu /bin/bash
# 查看容器
nerdctl ps
nerdctl ps -a
# 容器操作
nerdctl stop nginx1
nerdctl start nginx1
nerdctl restart nginx1
nerdctl pause nginx1
nerdctl unpause nginx1
nerdctl exec -it nginx1 bash
# 容器日志
nerdctl logs nginx1
# 端口映射
nerdctl run -d -p 8080:80 --name nginx-web nginx
nerdctl port nginx-web
# 删除容器
nerdctl rm nginx1
nerdctl container prune --force # 删除所有停止的容器
(3)网络管理
Bash
复制代码
# 查看网络
nerdctl network ls
nerdctl network inspect bridge
# 容器网络配置
nerdctl run -d --net host busybox sleep infinity # 使用主机网络
(4)存储管理
Bash
复制代码
# 目录挂载
mkdir /data
nerdctl run -d -v /data:/data busybox sleep infinity
# Volume 管理
nerdctl run -d -v data:/data busybox sleep infinity
nerdctl volume ls
八、crictl 工具使用(Kubernetes 环境)
1. 安装与配置
Bash
复制代码
# 配置 Kubernetes YUM 源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[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
EOF
# 安装 crictl
yum install -y cri-tools
# 配置 containerd 为运行时
cat > /etc/crictl.yaml << EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 5
debug: false
EOF
2. 核心命令
Bash
复制代码
# 查看镜像
crictl images
# 拉取镜像
crictl pull httpd
# 查看容器
crictl ps
crictl ps -a
# 容器操作
crictl start <container-id>
crictl stop <container-id>
crictl rm <container-id>
crictl exec -it <container-id> bash
crictl logs <container-id>
# 查看 Pod
crictl pods
crictl runp <pod-config>
九、常用工具命令对比表
| 命令功能 |
Docker |
Podman |
nerdctl |
ctr |
crictl |
| 查看容器状态 |
docker ps |
podman ps |
nerdctl ps |
ctr task ls/ctr c ls |
crictl ps |
| 查看镜像 |
docker images |
podman images |
nerdctl images |
ctr image ls |
crictl images |
| 查看容器日志 |
docker logs |
podman logs |
nerdctl logs |
无 |
crictl logs |
| 查看容器信息 |
docker inspect |
podman inspect |
nerdctl inspect |
ctr container info |
crictl inspect |
| 运行容器 |
docker run |
podman run |
nerdctl run |
ctr run |
无 |
| 创建容器 |
docker create |
podman create |
nerdctl create |
ctr container create |
crictl create |
| 拉取镜像 |
docker pull |
podman pull |
nerdctl pull |
ctr image pull |
crictl pull |
| 推送镜像 |
docker push |
podman push |
nerdctl push |
ctr image push |
无 |
| 导入镜像 |
docker load |
podman load |
nerdctl load |
ctr image import |
无 |
| 导出镜像 |
docker save |
podman save |
nerdctl save |
ctr image export |
无 |
| 删除容器 |
docker rm |
podman rm |
nerdctl rm |
ctr container rm |
crictl rm |
| 删除镜像 |
docker rmi |
podman rmi |
nerdctl rmi |
ctr image rm |
crictl rmi |
十、关键说明
- 工具选择建议 :
- 开发环境:使用
nerdctl(Docker 兼容,功能全面)
- Kubernetes 集群:使用
crictl(CRI 标准,适合调试)
- 底层调试:使用
ctr(containerd 原生 CLI)
- 兼容性 :执行
alias docker=nerdctl 可直接使用 Docker 命令语法
- 配置文件 :containerd 主配置文件为
/etc/containerd/config.toml,支持私有仓库、镜像加速等高级配置
- 命名空间:containerd 的 namespace 用于隔离容器环境,与 Kubernetes namespace 无关