Skip to content

Containerd + nerdctl 安装指南 ​

概述 ​

Containerd 是一个工业级的容器运行时,是 Kubernetes 默认的容器运行时。nerdctl 是 Containerd 的 Docker 兼容 CLI,提供了与 Docker 几乎相同的命令行体验。

为什么选择 Containerd + nerdctl? ​

特性DockerContainerd + nerdctl
资源占用较高更低
启动速度较慢更快
Kubernetes 集成需要 dockershim原生支持
命令兼容性原生 DockerDocker 兼容
架构复杂度复杂简洁

环境要求 ​

支持的操作系统 ​

系统版本
Ubuntu20.04 LTS, 22.04 LTS, 24.04 LTS
Debian11 (Bullseye), 12 (Bookworm), 13 (Trixie)

硬件要求 ​

  • CPU: 64位处理器 (x86_64 或 ARM64)
  • 内存: 最低 512MB,推荐 2GB+
  • 磁盘: 最低 10GB 可用空间

快速安装(推荐) ​

以下是最简化的安装流程,适合大多数场景:

bash
# 1. 安装 containerd
sudo apt update
sudo apt install -y containerd

# 2. 配置 containerd
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml

# 3. 启动服务
sudo systemctl enable containerd
sudo systemctl start containerd

# 4. 安装 nerdctl Full 版(已包含 CNI 插件)
curl -LO https://github.com/containerd/nerdctl/releases/latest/download/nerdctl-full-linux-amd64.tar.gz
sudo tar -xzf nerdctl-full-linux-amd64.tar.gz -C /usr/local
rm nerdctl-full-linux-amd64.tar.gz

# 5. 验证安装
sudo nerdctl run --rm hello-world

详细安装步骤 ​

1. 安装依赖包 ​

首先更新系统并安装必要的依赖:

bash
sudo apt update
sudo apt install -y curl wget ca-certificates gnupg lsb-release

2. 安装 Containerd ​

方法一:使用 apt 安装(推荐) ​

bash
sudo apt install -y containerd

方法二:手动安装最新版本 ​

如果需要最新版本,可以手动下载安装:

bash
CONTAINERD_VERSION="1.7.27"

curl -LO https://github.com/containerd/containerd/releases/download/v${CONTAINERD_VERSION}/containerd-${CONTAINERD_VERSION}-linux-amd64.tar.gz

sudo tar -xzf containerd-${CONTAINERD_VERSION}-linux-amd64.tar.gz -C /usr/local

rm containerd-${CONTAINERD_VERSION}-linux-amd64.tar.gz

3. 配置 Containerd ​

生成默认配置文件:

bash
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml

修改配置以支持 systemd cgroup:

bash
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml

4. 创建 systemd 服务(仅手动安装需要) ​

如果使用手动安装方式,需要创建 systemd 服务文件:

bash
sudo curl -L https://raw.githubusercontent.com/containerd/containerd/main/containerd.service -o /etc/systemd/system/containerd.service

5. 启动 Containerd 服务 ​

bash
sudo systemctl daemon-reload
sudo systemctl enable containerd
sudo systemctl start containerd

验证服务状态:

bash
sudo systemctl status containerd

6. 安装 runc ​

bash
sudo apt install -y runc

或手动安装最新版本:

bash
RUNC_VERSION="1.2.6"

curl -LO https://github.com/opencontainers/runc/releases/download/v${RUNC_VERSION}/runc.amd64

sudo install -m 755 runc.amd64 /usr/local/sbin/runc

rm runc.amd64

7. 安装 CNI 插件 ​

提示

如果使用 nerdctl Full 版本(下一步),已包含 CNI 插件,可跳过此步骤。

方法一:使用 apt 安装(推荐) ​

bash
sudo apt install -y containernetworking-plugins

apt 安装的 CNI 插件位于 /usr/lib/cni/ 目录。

方法二:手动安装最新版本 ​

如果需要最新版本,可以手动下载:

bash
CNI_VERSION="1.6.2"

sudo mkdir -p /opt/cni/bin

curl -LO https://github.com/containernetworking/plugins/releases/download/v${CNI_VERSION}/cni-plugins-linux-amd64-v${CNI_VERSION}.tgz

sudo tar -xzf cni-plugins-linux-amd64-v${CNI_VERSION}.tgz -C /opt/cni/bin

rm cni-plugins-linux-amd64-v${CNI_VERSION}.tgz

8. 安装 nerdctl ​

说明

nerdctl 暂未收录在 Debian/Ubuntu 官方仓库中,需从 GitHub 下载安装。

nerdctl 有两个版本:

版本包含内容适用场景
Minimal仅 nerdctl 二进制文件已有 CNI 环境
Fullnerdctl + BuildKit + CNI + stargz完整环境,推荐使用

推荐安装 Full 版本:

bash
NERDCTL_VERSION="2.2.1"

curl -LO https://github.com/containerd/nerdctl/releases/download/v${NERDCTL_VERSION}/nerdctl-full-${NERDCTL_VERSION}-linux-amd64.tar.gz

sudo tar -xzf nerdctl-full-${NERDCTL_VERSION}-linux-amd64.tar.gz -C /usr/local

rm nerdctl-full-${NERDCTL_VERSION}-linux-amd64.tar.gz

或使用 releases/latest 自动获取最新版本:

bash
curl -LO https://github.com/containerd/nerdctl/releases/latest/download/nerdctl-full-linux-amd64.tar.gz

sudo tar -xzf nerdctl-full-linux-amd64.tar.gz -C /usr/local

rm nerdctl-full-linux-amd64.tar.gz

9. 验证安装 ​

检查版本:

bash
containerd --version
nerdctl --version
runc --version

运行测试容器:

bash
sudo nerdctl run --rm hello-world

配置详解 ​

镜像加速配置 ​

编辑 /etc/containerd/config.toml,在 [plugins."io.containerd.grpc.v1.cri".registry.mirrors] 下添加镜像源:

toml
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
    endpoint = ["https://docker.m.daocloud.io"]

  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]
    endpoint = ["https://k8s-gcr.m.daocloud.io"]

  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."quay.io"]
    endpoint = ["https://quay.m.daocloud.io"]

重启服务使配置生效:

bash
sudo systemctl restart containerd

私有仓库配置 ​

对于私有仓库(如 Harbor),需要配置 insecure-registries:

toml
[plugins."io.containerd.grpc.v1.cri".registry.configs]
  [plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.example.com".tls]
    insecure_skip_verify = true

完整配置示例 ​

toml
curl -LO https://github.com/containerd/nerdctl/releases/latest/download/nerdctl-full-linux-amd64.tar.gz

sudo tar -xzf nerdctl-full-linux-amd64.tar.gz -C /usr/local

rm nerdctl-full-linux-amd64.tar.gz

nerdctl 使用指南 ​

Docker 命令对照表 ​

Docker 命令nerdctl 命令
docker pullnerdctl pull
docker pushnerdctl push
docker imagesnerdctl images
docker rminerdctl rmi
docker runnerdctl run
docker psnerdctl ps
docker stopnerdctl stop
docker rmnerdctl rm
docker execnerdctl exec
docker logsnerdctl logs
docker buildnerdctl build
docker compose upnerdctl compose up
docker network lsnerdctl network ls
docker volume lsnerdctl volume ls

常用命令示例 ​

镜像管理 ​

bash
sudo nerdctl pull nginx:latest
sudo nerdctl images
sudo nerdctl rmi nginx:latest

容器管理 ​

bash
sudo nerdctl run -d --name nginx -p 80:80 nginx:latest
sudo nerdctl ps
sudo nerdctl logs nginx
sudo nerdctl exec -it nginx bash
sudo nerdctl stop nginx
sudo nerdctl rm nginx

Docker Compose 支持 ​

bash
sudo nerdctl compose up -d
sudo nerdctl compose down

非 root 用户使用 ​

将用户添加到 containerd 组:

bash
sudo usermod -aG containerd $USER

重新登录后,可以不使用 sudo:

bash
nerdctl ps

WSL 特殊配置 ​

如果您在 WSL 环境中使用,需要注意以下配置:

启用 systemd ​

WSL 默认不启用 systemd,需要手动开启:

  1. 编辑 /etc/wsl.conf:
bash
sudo tee /etc/wsl.conf > /dev/null << 'EOF'
[boot]
systemd = true

[interop]
appendWindowsPath = false
EOF
  1. 重启 WSL:

在 Windows PowerShell 中执行:

powershell
wsl --shutdown

然后重新打开 WSL 终端。

验证 systemd ​

bash
systemctl status containerd

WSL 性能优化 ​

创建 %USERPROFILE%\.wslconfig 文件(Windows 用户目录下):

ini
[wsl2]
memory=4GB
processors=2
swap=2GB
localhostForwarding=true

[experimental]
autoMemoryReclaim=gradual

常见问题 ​

1. containerd 服务无法启动 ​

检查日志:

bash
sudo journalctl -u containerd -n 50

常见原因:

  • 配置文件语法错误
  • cgroup 未正确配置

2. 镜像拉取失败 ​

检查网络连接和镜像加速配置:

bash
sudo nerdctl pull --debug nginx:latest

3. 权限问题 ​

确保用户在 containerd 组中:

bash
groups $USER

4. WSL 中 systemd 未启用 ​

确认 /etc/wsl.conf 配置正确,并重启 WSL。

卸载指南 ​

停止服务 ​

bash
sudo systemctl stop containerd
sudo systemctl disable containerd

删除文件 ​

bash
sudo rm -rf /usr/local/bin/containerd*
sudo rm -rf /usr/local/bin/nerdctl*
sudo rm -rf /usr/local/sbin/runc
sudo rm -rf /opt/cni
sudo rm -rf /etc/containerd
sudo rm -rf /var/lib/containerd

卸载包安装版本 ​

bash
sudo apt remove --purge containerd -y

相关资源 ​