外观
Containerd + nerdctl 安装指南
概述
Containerd 是一个工业级的容器运行时,是 Kubernetes 默认的容器运行时。nerdctl 是 Containerd 的 Docker 兼容 CLI,提供了与 Docker 几乎相同的命令行体验。
为什么选择 Containerd + nerdctl?
| 特性 | Docker | Containerd + nerdctl |
|---|---|---|
| 资源占用 | 较高 | 更低 |
| 启动速度 | 较慢 | 更快 |
| Kubernetes 集成 | 需要 dockershim | 原生支持 |
| 命令兼容性 | 原生 Docker | Docker 兼容 |
| 架构复杂度 | 复杂 | 简洁 |
环境要求
支持的操作系统
| 系统 | 版本 |
|---|---|
| Ubuntu | 20.04 LTS, 22.04 LTS, 24.04 LTS |
| Debian | 11 (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-release2. 安装 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.gz3. 配置 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.toml4. 创建 systemd 服务(仅手动安装需要)
如果使用手动安装方式,需要创建 systemd 服务文件:
bash
sudo curl -L https://raw.githubusercontent.com/containerd/containerd/main/containerd.service -o /etc/systemd/system/containerd.service5. 启动 Containerd 服务
bash
sudo systemctl daemon-reload
sudo systemctl enable containerd
sudo systemctl start containerd验证服务状态:
bash
sudo systemctl status containerd6. 安装 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.amd647. 安装 CNI 插件
提示
如果使用 nerdctl Full 版本(下一步),已包含 CNI 插件,可跳过此步骤。
方法一:使用 apt 安装(推荐)
bash
sudo apt install -y containernetworking-pluginsapt 安装的 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}.tgz8. 安装 nerdctl
说明
nerdctl 暂未收录在 Debian/Ubuntu 官方仓库中,需从 GitHub 下载安装。
nerdctl 有两个版本:
| 版本 | 包含内容 | 适用场景 |
|---|---|---|
| Minimal | 仅 nerdctl 二进制文件 | 已有 CNI 环境 |
| Full | nerdctl + 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.gz9. 验证安装
检查版本:
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.gznerdctl 使用指南
Docker 命令对照表
| Docker 命令 | nerdctl 命令 |
|---|---|
docker pull | nerdctl pull |
docker push | nerdctl push |
docker images | nerdctl images |
docker rmi | nerdctl rmi |
docker run | nerdctl run |
docker ps | nerdctl ps |
docker stop | nerdctl stop |
docker rm | nerdctl rm |
docker exec | nerdctl exec |
docker logs | nerdctl logs |
docker build | nerdctl build |
docker compose up | nerdctl compose up |
docker network ls | nerdctl network ls |
docker volume ls | nerdctl 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 nginxDocker Compose 支持
bash
sudo nerdctl compose up -d
sudo nerdctl compose down非 root 用户使用
将用户添加到 containerd 组:
bash
sudo usermod -aG containerd $USER重新登录后,可以不使用 sudo:
bash
nerdctl psWSL 特殊配置
如果您在 WSL 环境中使用,需要注意以下配置:
启用 systemd
WSL 默认不启用 systemd,需要手动开启:
- 编辑
/etc/wsl.conf:
bash
sudo tee /etc/wsl.conf > /dev/null << 'EOF'
[boot]
systemd = true
[interop]
appendWindowsPath = false
EOF- 重启 WSL:
在 Windows PowerShell 中执行:
powershell
wsl --shutdown然后重新打开 WSL 终端。
验证 systemd
bash
systemctl status containerdWSL 性能优化
创建 %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:latest3. 权限问题
确保用户在 containerd 组中:
bash
groups $USER4. 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