Containerd 容器运行时教程

Containerd 是一个行业标准的容器运行时,由 Docker 公司捐赠给 CNCF(云原生计算基金会)。它是 Docker 引擎的核心组件,负责管理容器的完整生命周期——从镜像传输、存储到容器运行和监控。Kubernetes 从 1.24 版本起移除了对 dockershim 的支持,Containerd 成为最主流的容器运行时选择。

一、安装 Containerd

1.1 从 Docker 安装包获取

如果你已经安装了 Docker,Containerd 已经包含在内:

containerd --version
ctr version

1.2 独立安装

# 下载并安装
CONTAINERD_VERSION=1.7.13
curl -Lo containerd.tar.gz https://github.com/containerd/containerd/releases/download/v${CONTAINERD_VERSION}/containerd-${CONTAINERD_VERSION}-linux-amd64.tar.gz
tar xf containerd.tar.gz -C /usr/local/
rm containerd.tar.gz

# 安装 systemd 服务文件
curl -Lo /etc/systemd/system/containerd.service https://raw.githubusercontent.com/containerd/containerd/main/containerd.service

# 生成默认配置
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml

# 启动服务
systemctl daemon-reload
systemctl enable --now containerd

1.3 安装 runc

RUNC_VERSION=1.1.12
curl -Lo /usr/local/sbin/runc https://github.com/opencontainers/runc/releases/download/v${RUNC_VERSION}/runc.amd64
chmod +x /usr/local/sbin/runc

二、使用 ctr 命令

ctr 是 Containerd 的原生命令行工具:

# 拉取镜像
ctr images pull docker.io/library/nginx:latest

# 查看本地镜像
ctr images list

# 运行容器
ctr run -d --net-host docker.io/library/nginx:latest my-nginx

# 查看运行中的容器
ctr containers list
ctr tasks list

# 进入容器
ctr tasks exec --exec-id shell1 -t my-nginx /bin/sh

# 停止容器
ctr tasks kill my-nginx
ctr containers delete my-nginx

三、命名空间管理

Containerd 支持命名空间来隔离不同的容器组:

# 查看所有命名空间
ctr namespaces list

# Docker 使用 moby 命名空间
ctr -n moby containers list

# Kubernetes 使用 k8s.io 命名空间
ctr -n k8s.io containers list

# 创建自定义命名空间
ctr namespaces create my-namespace
ctr -n my-namespace images pull docker.io/library/alpine:latest

四、使用 nerdctl(推荐)

nerdctl 是 Containerd 的 Docker 兼容命令行工具,用法与 Docker CLI 完全一致:

# 安装 nerdctl
NERDCTL_VERSION=1.7.4
curl -Lo nerdctl.tar.gz https://github.com/containerd/nerdctl/releases/download/v${NERDCTL_VERSION}/nerdctl-${NERDCTL_VERSION}-linux-amd64.tar.gz
tar xf nerdctl.tar.gz -C /usr/local/bin/
rm nerdctl.tar.gz

# 使用方法与 Docker 完全一致
nerdctl run -d --name web -p 80:80 nginx:latest
nerdctl ps
nerdctl logs web
nerdctl compose up -d

五、配置 Containerd

cat > /etc/containerd/config.toml <<'EOF'
version = 2

[plugins."io.containerd.grpc.v1.cri"]
  sandbox_image = "registry.k8s.io/pause:3.9"
  [plugins."io.containerd.grpc.v1.cri".containerd]
    [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
      runtime_type = "io.containerd.runc.v2"
      [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
        SystemdCgroup = true

[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://registry-1.docker.io"]
EOF

systemctl restart containerd

六、为 Kubernetes 配置 Containerd

# 确保 SystemdCgroup 启用
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml

# 配置 crictl 使用 containerd
cat > /etc/crictl.yaml <<'EOF'
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
EOF

# 使用 crictl 管理容器
crictl ps
crictl images

七、常见问题

Containerd 无法启动

systemctl status containerd
journalctl -u containerd -f

总结

Containerd 作为底层容器运行时,是 Docker 和 Kubernetes 的核心组件。在搬瓦工 VPS 上使用 nerdctl 可以获得与 Docker 几乎一致的使用体验。如果你计划部署 Kubernetes,Containerd 和 CRI-O 是两个主流的容器运行时选择。选购搬瓦工 VPS 请访问 bwh81.net,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的折扣。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。