nerdctl:与 Docker 兼容的 containerd CLI

nerdctl 是一个用于容器管理的命令行工具,它旨在提供与 Docker CLI 相似的用户体验,但却是为 containerd 这样的低级容器运行时设计的。containerd 是一个行业标准的容器运行时,被广泛用作 Kubernetes 等容器编排平台的一部分。nerdctl 通过简化 containerd 的使用来填补了直接操作 containerd 和使用更高级别抽象(如 Docker)之间的差距。

nerdctl 在 2021 年成为 containerd 的一个子项目,并于 2022 年发布了 v1.0。

主要特点

兼容性:nerdctl 的许多命令和选项与 Docker CLI 非常相似,使得熟悉 Docker 的用户可以快速上手。

轻量级:相比于 Docker,nerdctl 更加轻巧,因为它直接建立在 containerd 之上,没有额外的服务层。

灵活性:允许用户直接利用 containerd 的功能,比如使用不同的快照器、存储驱动等。

安全性:由于减少了组件间的交互,理论上可以减少攻击面,提高安全性。

社区支持:虽然相比 Docker 来说规模较小,但 nerdctl 拥有一个活跃且不断增长的社区。

兼容的 containerd 版本

此版本的 nerdctl 预计将与 containerd v1.6、v1.7 或 v2.0 一起使用。

关于二进制文件

  • 最小(nerdctl-2.0.0-linux-amd64.tar.gz):仅限 nerdctl
  • 完整(nerdctl-full-2.0.0-linux-amd64.tar.gz):包括 containerd、runc 和 CNI 等依赖项

安装

复制代码
wget https://github.com/containerd/nerdctl/releases/download/v2.0.1/nerdctl-full-2.0.1-linux-amd64.tar.gz

tar Cxzvvf /usr/local nerdctl-full-2.0.1-linux-amd64.tar.gz

下载慢的话

sudo nano /etc/hosts

#添加如下

192.30.255.112 github.com git

185.31.16.184 github.global.ssl.fastly.net

快速启动

Rootful

复制代码
$ sudo systemctl enable --now containerd
$ sudo nerdctl run -d --name nginx -p 80:80 nginx:alpine

Rootless

复制代码
wget https://github.com/containerd/nerdctl/raw/refs/heads/main/extras/rootless/containerd-rootless.sh

wget https://raw.githubusercontent.com/containerd/nerdctl/refs/heads/main/extras/rootless/containerd-rootless-setuptool.sh
复制代码
$ containerd-rootless-setuptool.sh install
$ nerdctl run -d --name nginx -p 8080:80 nginx:alpine

强烈建议在无根模式下启用 cgroup v2,请参阅[Optional] cgroup v2 | Rootless Containers

nerdctl 支持以 rootful(需要 root 权限)和 rootless(不需要 root 权限)两种模式启动容器。这两种模式在安全性、权限管理和使用场景上有所不同。下面是它们之间的一些关键区别:

Rootful 模式

权限:以 root 用户身份运行,这意味着它拥有系统的完全控制权。

性能:由于没有额外的权限限制,理论上可以提供更好的性能。

网络配置:能够直接修改系统级别的网络设置,如创建桥接网络接口等。

文件系统访问:可以访问整个文件系统,包括受限目录。

适用性:适用于需要完全控制底层资源的情况,比如开发环境或个人测试。

Rootless 模式

权限:以非特权用户身份运行,这提高了安全性,因为即使容器被攻破,攻击者也无法获得主机系统的 root 访问权限。

性能:可能因用户命名空间和其他安全措施而略有降低。

网络配置:受限于用户命名空间,不能直接修改系统级别的网络配置;通常使用用户命名空间内的网络堆栈。

文件系统访问:只能访问用户有权限访问的部分文件系统。

适用性:推荐用于生产环境以及任何重视安全性的场合。允许普通用户无需 sudo 或其他形式的提升权限即可运行容器。

启动方式

Rootful 模式

默认情况下,如果你以 root 用户身份执行 nerdctl 命令,那么它将以 rootful 模式运行。例如:

复制代码
sudo nerdctl run -it --rm alpine sh

Rootless 模式

要启用 rootless 模式,你需要先进行一些配置。首先确保你的系统支持用户命名空间,并且已经安装了必要的依赖。然后,你可以按照以下步骤初始化 rootless 环境:

创建一个用户命名空间的配置文件:

复制代码
nerdctl --rootless setup-rootless

使用该用户的 shell 登录或者切换到该用户,然后运行 nerdctl 命令:

复制代码
newgrp docker # 如果你使用的是 Linux 发行版中预设的 docker 组
nerdctl run -it --rm alpine sh

注意:某些功能在 rootless 模式下可能不可用或行为不同,具体取决于操作系统和内核的支持情况。此外,rootless 模式的设置可能会根据不同的发行版和版本有所变化,因此建议查阅最新的官方文档获取准确信息。

相关推荐
闪耀星星1 分钟前
debian elctron-builder
运维·debian
会飞的土拨鼠呀2 分钟前
Debian 12 笔记本合盖不休眠设置指南
运维·debian
郭庆汝14 分钟前
docker拉取英伟达官方cuda11.8镜像
docker·cuda11.8
天下不喵1 小时前
Ubuntu24.04安装Docker过程记录
docker
黑黍2 小时前
如何在k8s中配置并使用nvidia显卡
云原生·容器·kubernetes
梁正雄2 小时前
6、prometheus资源规划
运维·服务器·服务发现·prometheus·监控
晨曦之旅2 小时前
零成本体验云计算!阿贝云免费服务器深度测评
运维·服务器·云计算
工具人55553 小时前
Linux 抓取 RAM Dump 完整指南
linux·运维·安全
冷血~多好3 小时前
使用docker部署elk,实现日志追踪
elk·docker·容器
会飞的小蛮猪3 小时前
SkyWalking运维之路(Java探针接入)
java·运维·经验分享·容器·skywalking