containerd 是一个行业标准的容器运行时,专注于简单性、健壮性和可移植性。nerdctl 是一个与 Docker 兼容的 containerd 命令行客户端。

一、安装 containerd

1.1 配置 containerd 仓库

Rocky Linux 9 基于 RHEL 9,可以使用官方仓库安装 containerd:

# 安装必要的工具
sudo dnf install -y yum-utils

# 添加 Docker 仓库(包含 containerd)
sudo dnf config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

sudo sed -i 's/\$releasever/9/g' /etc/yum.repos.d/docker-ce.repo

dnf clean all
dnf makecache

1.2 安装 containerd

# 安装 containerd
sudo dnf install -y containerd.io

1.3 配置 containerd

# 生成默认配置文件
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

# 启用 systemd cgroup 驱动(推荐)
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml

1.4 启动并启用 containerd 服务

# 启动 containerd 服务
sudo systemctl start containerd

# 设置开机自启
sudo systemctl enable containerd

# 检查服务状态
sudo systemctl status containerd

1.5 验证安装

# 查看 containerd 版本
containerd --version

# 查看 containerd 信息
ctr version

二、安装 nerdctl

2.1 下载 nerdctl

nerdctl 可以从 GitHub 官方仓库下载:

# 创建下载目录
mkdir -p ~/downloads
cd ~/downloads

# 下载最新版本的 nerdctl(请根据实际版本号调整)
# 访问 https://github.com/containerd/nerdctl/releases 查看最新版本
NERDCTL_VERSION="1.3.1"
wget https://github.com/containerd/nerdctl/releases/download/v${NERDCTL_VERSION}/nerdctl-${NERDCTL_VERSION}-linux-amd64.tar.gz

# 解压
sudo tar -C /usr/local -xzf  nerdctl-full-1.3.1-linux-amd64.tar.gz

#
sudo systemctl enable --now buildkit

sudo dnf install -y iptables iptables-services

2.2 验证 nerdctl 安装

# 查看 nerdctl 版本
nerdctl version

# 查看 nerdctl 信息
nerdctl info

三、基本使用

3.1 拉取镜像

# 拉取镜像(需要配置镜像加速)
nerdctl run --rm docker.1ms.run/alpine echo "Containerd is working!"

# 查看本地镜像
nerdctl images

3.2 运行容器

# 运行容器
nerdctl run -d --name nginx-test -p 8080:80 nginx:latest

# 查看运行中的容器
nerdctl ps

# 查看所有容器(包括已停止的)
nerdctl ps -a

3.3 容器管理

# 停止容器
nerdctl stop nginx-test

# 启动容器
nerdctl start nginx-test

# 重启容器
nerdctl restart nginx-test

# 删除容器
nerdctl rm nginx-test

# 删除镜像
nerdctl rmi nginx:latest

3.4 查看日志

# 查看容器日志
nerdctl logs nginx-test

# 实时查看日志
nerdctl logs -f nginx-test

四、配置镜像加速(可选)

4.1 配置 containerd 镜像加速

编辑 /etc/containerd/config.toml

sudo vi /etc/containerd/config.toml

[plugins."io.containerd.grpc.v1.cri".registry] 部分添加镜像配置:

[plugins."io.containerd.grpc.v1.cri".registry]
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
      endpoint = ["https://docker.mirrors.ustc.edu.cn", "https://registry-1.docker.io"]
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.cn-hangzhou.aliyuncs.com"]
      endpoint = ["https://registry.cn-hangzhou.aliyuncs.com"]

重启 containerd 服务:

sudo systemctl restart containerd

4.2 配置 nerdctl 镜像加速

创建或编辑 ~/.config/nerdctl/nerdctl.toml

mkdir -p ~/.config/nerdctl
cat > ~/.config/nerdctl/nerdctl.toml <<EOF
mirrors = {
  "docker.io" = ["https://docker.mirrors.ustc.edu.cn", "https://registry-1.docker.io"]
  "registry.cn-hangzhou.aliyuncs.com" = ["https://registry.cn-hangzhou.aliyuncs.com"]
}
EOF

五、常见问题排查

5.1 containerd 服务无法启动

# 查看详细日志
sudo journalctl -u containerd -f

# 检查配置文件语法
containerd config default > /tmp/config.toml
sudo containerd config verify

5.2 nerdctl 无法连接 containerd

# 检查 containerd socket 是否存在
ls -l /run/containerd/containerd.sock

# 检查 containerd 服务状态
sudo systemctl status containerd

# 检查用户权限
groups

如果权限不足,可以将用户添加到 containerd 组(如果存在):

sudo usermod -aG containerd $USER
newgrp containerd

5.3 镜像拉取失败

# 检查网络连接
ping registry-1.docker.io

# 使用 ctr 命令测试
sudo ctr images pull docker.io/library/nginx:latest

# 检查镜像加速配置
cat /etc/containerd/config.toml | grep -A 10 mirrors

六、总结

通过以上步骤,我们成功在 Rocky Linux 9 上安装了 containerd 容器运行时和 nerdctl 命令行工具。containerd 提供了稳定的容器运行时环境,而 nerdctl 提供了与 Docker 兼容的命令行接口,使得从 Docker 迁移到 containerd 变得更加容易。

主要步骤总结: 1. 安装并配置 containerd 2. 下载并安装 nerdctl 3. 配置镜像加速(可选但推荐) 4. 验证安装并测试基本功能

containerd + nerdctl 的组合为容器管理提供了一个轻量级且高效的解决方案。