Containerd 容器管理工具

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

十、关键说明

  1. 工具选择建议
    1. 开发环境:使用 nerdctl(Docker 兼容,功能全面)
    2. Kubernetes 集群:使用 crictl(CRI 标准,适合调试)
    3. 底层调试:使用 ctr(containerd 原生 CLI)
  2. 兼容性 :执行 alias docker=nerdctl 可直接使用 Docker 命令语法
  3. 配置文件 :containerd 主配置文件为 /etc/containerd/config.toml,支持私有仓库、镜像加速等高级配置
  4. 命名空间:containerd 的 namespace 用于隔离容器环境,与 Kubernetes namespace 无关
相关推荐
阿方索2 小时前
Docker
运维·docker·容器
番茄撒旦在上2 小时前
Docker部署springboot项目
服务器·spring boot·docker·容器
不想画图3 小时前
Docker 容器核心配置实战:资源管控、数据卷与容器互联
运维·docker·容器
记得记得就1513 小时前
Docker核心功能全解析:网络、资源控制、数据卷
网络·docker·容器
木童6623 小时前
Docker 容器操作(资源限制、数据卷容器、端口映射、容器互联)
运维·docker·容器
原神启动14 小时前
Docker(三)——Docker资源控制+Docker数据卷容器 +Docker容器互联
运维·docker·容器
2501_939909054 小时前
Docker(2)资源限制及数据卷容器以及容器互联
运维·docker·容器
HaSaKing_7214 小时前
【实战记录】Docker Compose 单机部署 EMQX 3 节点集群(5.8.8 社区版)完整踩坑与解决方案
docker·容器·eureka
l1t4 小时前
docker 启动 oracle容器报1521: bind: address already in use错误的解决
docker·oracle·容器