如何在 Ubuntu 22.04 上安装 Containerd 容器运行时
在此页
- 先决条件
- 手动安装 Containerd
- 通过 APT Docker 存储库安装 Containerd
- 通过 nerdctl 与 Containerd 通信
- 结论
Containerd 是一个高级容器运行时,支持 OCI Image Spec 和 OCI Runtime Spec (Open Container Initiative)。 Containerd 的创建强调容器部署和生命周期的简单性、健壮性和可移植性。它的设计目的是很容易嵌入 Docker 和 Kubernetes 等大型系统。在底层,新的 Docker 版本使用 Containerd 来管理容器生命周期。对于 Kubernetes,您可以通过 CRI 使用 Containerd 作为容器运行时来管理 Kubernetes 集群上的容器生命周期。
本教程将介绍如何在 Ubuntu 22.04 服务器上安装 Containerd Container Runtime。本教程将介绍两种不同的安装 Containerd 的方法,一种是手动下载二进制包,另一种是通过 APT 存储库安装 Containerd。在本教程结束时,您将拥有用于开发的容器环境,您也可以将其用作 Kubernetes 集群安装的一部分。
先决条件
要学习本教程,您需要满足以下要求:
- 一台 Ubuntu 22.04 服务器 - 此示例将使用主机名为 \server-ubuntu\ 的服务器。
- 具有 root/sudo 管理权限的非 root 用户。
手动安装 Containerd
在第一步中,您将学习通过二进制包手动安装 Containerd Container Runtime。这意味着您还需要为 Containerd 本身安装一些组件,包括 runc 和 CNI(容器网络接口)插件。
Containerd 及其所有组件都可以在其 GitHub 存储库中找到并准备安装。
要安装 Containerd,请查看 Containerd GitHub 发布页面以获取最新版本。然后,复制链接并使用\wget\下载Containerd的二进制包。之后,将文件解压到\/usr/local\目录。
在撰写本文时,最新版本的 Containerd 是 v1.6.8。使用 \wget\ 命令将其下载到您的 Ubuntu 服务器,并通过 \tar 将其解压缩到 \/usr/local\ 目录\”命令。
wget https://github.com/containerd/containerd/releases/download/v1.6.8/containerd-1.6.8-linux-amd64.tar.gz
tar Cxzvf /usr/local containerd-1.6.8-linux-amd64.tar.gz

Runc 是一个命令行工具,用于根据 OCI(开放容器倡议)规范在 Linux 系统上生成容器。要安装 runc,您需要访问官方 runc GitHub 发布页面并获取最新版本的 runc 并使用 wget 命令下载它。
在撰写本文时,runc 的最新版本是 v1.1.3。使用 wget 命令下载并安装它,如下所示。
wget https://github.com/opencontainers/runc/releases/download/v1.1.3/runc.amd64
sudo install -m 755 runc.amd64 /usr/local/sbin/runc
现在使用以下命令检查 runc 二进制文件。您应该看到 runc 二进制文件在 \/usr/local/sbin\ 目录中可用。
which runc

现在您需要为 Containerd 容器运行时安装 CNI(容器网络接口)插件。 CNI 插件为 Linux 系统上的容器提供了网络功能。
在下载 CNI 插件之前,请务必访问官方 GitHub 发布页面以获取最新版本的 CNI 插件。
在撰写本文时,CNI 插件的最新版本是 v1.1.1。使用 wget 命令下载它,如下所示。
wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
接下来,创建一个新目录 \/opt/cni/bin\ 将用作 CNI 插件的目标安装目录。然后,通过 tar 命令将 CNI 插件解压到其中。
mkdir -p /opt/cni/bin
tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.1.1.tgz

安装完所有三个 Containerd Container Runtime 组件后,您将开始配置 Containerd。
运行以下命令创建一个新目录\/etc/containerd\。然后,使用 \containerd\ 命令生成默认的 Containerd 配置,如下所示。
sudo mkdir -p /etc/containerd/
containerd config default | sudo tee /etc/containerd/config.toml

现在运行以下命令为 Containerd 容器运行时启用 \SystemdCgroup\。此命令会将 Containerd 配置文件中的选项“SystemdCgroup=false\”替换为“SystemdCgroup=true\”/etc/containerd/配置.toml.
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
现在运行以下命令将 Containerd 的 systemd 服务文件下载到 \/etc/systemd/system\ 目录。
sudo curl -L https://raw.githubusercontent.com/containerd/containerd/main/containerd.service -o /etc/systemd/system/containerd.service
然后,重新加载 systemd 管理器以应用新的服务文件。
sudo systemctl daemon-reload
最后,使用以下 systemctl 命令启动并启用“containerd”服务。如果您的安装成功,您将看到在“containerd”服务启动过程中没有发现错误消息。
sudo systemctl start containerd
sudo systemctl enable containerd

使用以下命令检查并验证 containerd\ 服务。您应该会看到 containerd\ 服务当前处于 \running\ 和 enabled\ 状态,这意味着将在系统启动时自动运行。
sudo systemctl status containerd

通过 APT Docker 存储库安装 Containerd
现在您将学习如何通过 APT Docker 存储库安装 Containerd 容器运行时。
首先,运行以下命令来安装一些包依赖项。当提示确认安装时,输入 Y 并按 ENTER。
sudo apt install \
ca-certificates \
curl \
gnupg \
lsb-release
接下来,运行以下命令创建一个新目录并下载 Docker 存储库的 GPG 密钥。
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
使用以下命令将 Docker 存储库添加到您的系统。
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
现在运行以下 apt 命令来更新和刷新 Ubuntu 系统的包索引。然后,安装包 \containerd.io\ 作为 Containerd 容器运行时。安装将自动开始。
sudo apt update
sudo apt install containerd.io
安装完成后,使用以下 systemctl 命令启动并启用“containerd”服务。
sudo systemctl start containerd
sudo systemctl enable containerd
然后,使用以下命令检查并验证 \containerd\ 服务。您应该看到 \containerd\ 服务处于活动状态并正在运行。
sudo systemctl status containerd

接下来,您将为 Containerd 容器运行时生成一个新的配置文件。
运行以下命令以后端 Docker 存储库提供的默认配置。然后,使用 \containerd\ 命令生成一个新的配置文件,如下所示。
sudo mv etc/containerd/config.toml etc/containerd/config.toml.orig
containerd config default | sudo tee /etc/containerd/config.toml
现在运行以下命令为 Containerd 启用 \SystemdCgroup\。
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
接下来,您还需要通过 APT Docker 存储库为 Containerd 安装安装 CNI(容器网络接口)插件。
运行下面的 wget 命令来下载 CNI 插件。
wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
现在使用以下命令创建一个新目录 \/opt/cni/bin\。然后,通过 tar 命令提取 CNI 插件,如下所示。
mkdir -p /opt/cni/bin
tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.1.1.tgz
最后,运行以下命令重新启动 Containerd 服务并应用新的更改。
sudo systemctl restart containerd
此时,Containerd 容器运行时正在运行 CNI 插件和 SystemdCgroup。
通过 nerdctl 与 Containerd 通信
ContaiNERD CTL 是一个命令行工具,用于管理 Containerd 容器运行时的容器。它与适用于 Docker 的 Docker CLI 兼容,并具有与“docker”命令相同的 UI/UX。
nrdctl 命令行还通过“nerdctl compose”命令支持 Docker Compose,还支持容器无根模式,通过 OverlayBD 和 Stargz 延迟拉取镜像,支持加密镜像,以及通过 IPFS 分发 P2P 镜像。
运行以下命令下载 \nerctl\ 二进制文件。然后,通过 tar 命令将其解压到 \/usr/local/bin\ 目录。
wget https://github.com/containerd/nerdctl/releases/download/v0.22.2/nerdctl-0.22.2-linux-amd64.tar.gz
sudo tar Cxzvf /usr/local/bin nerdctl-0.22.2-linux-amd64.tar.gz
现在使用以下命令检查 nerdctl 二进制文件。
which nerdctl

接下来,您将学习如何通过“nerdctl”命令使用 Containerd 容器运行时运行容器。 \nerdctl\命令行工具是Docker Compatible的,所以管理容器的命令类似于Docker命令。
使用下面的 \nerdctl\ 命令运行名为 \nginx\ 的新容器。 \nginx\ 容器将在容器和主机的端口 80 上运行,并且它基于图像 \nginx:alpine\。
sudo nerdctl run -d --name nginx -p 80:80 nginx:alpine

现在使用下面的 \nerdctl\ 命令检查系统上当前正在运行的容器。您应该会看到 \nginx\ 容器正在运行。
sudo nerdctl ps

接下来,使用以下命令检查并验证系统上可用容器映像的列表。您应该会看到下载的 \nginx:alpine\ 图像。
sudo nerdctl images

最后,运行下面的 curl 命令来检查 \nginx\ 容器。您应该会看到 \nginx\ 容器的默认 index.html 页面。
curl localhost

此外,您还可以使用以下 \nerdctl\ 命令检查和验证 \nginx\ 容器的日志。
sudo nerdctl logs nginx

结论
在本教程中,您学习了两种安装 Containerd 容器运行时的方法。您已经了解了如何通过下载 Container 二进制包并通过 APT Docker 存储库安装 Containerd 来手动安装 Containerd。
至此,您已经了解了如何安装 nerdctl 命令行工具以及 nerdctl 管理运行在 Containerd 容器运行环境下的容器的基本用法。您现在还可以使用 Containerd 容器运行时设置 Kubernetes 集群。