containerd 架构及CLI工具ctr、crictl 和 nerdctl操作命令

containerd 架构及说明

容器技术已经成为现代软件开发和部署的核心工具。通过容器,开发者可以创建轻量级、便携的运行环境,从而简化应用程序的开发、测试和部署流程。在容器技术的生态系统中,容器运行时扮演着至关重要的角色。containerd 是一个高效、可靠的开源容器运行时,它被设计为从开发到生产环境的核心容器管理解决方案。containerd 的架构主要分为三个部分:生态系统(Ecosystem)、平台(Platform)和客户端(Client)。每个部分在整个系统中扮演着不同的角色,协同工作以提供全面的容器管理功能。

containerd 架构及CLI工具ctr、crictl 和 nerdctl操作命令

生态系统(Ecosystem)

containerd 的生态系统包括一系列与其集成的工具和组件,这些工具和组件扩展了 containerd 的功能并增强了其适用性。

  • CRI 插件:与 Kubernetes 紧密集成,通过实现 Container Runtime Interface (CRI),使 Kubernetes 能够管理容器。

  • CNI 插件:使用 Container Network Interface (CNI)插件进行网络管理,提供容器的网络连接。

  • CSI 插件:Container Storage Interface (CSI)插件用于存储管理,允许容器挂载和管理存储卷。

  • 镜像管理:支持 Docker 镜像和 OCI 镜像规范,提供从镜像仓库拉取、存储和管理容器镜像的能力。

  • 插件机制:允许通过插件扩展 containerd 的功能,满足特定的需求。

平台(Platform)

containerd 的平台层是整个系统的核心,负责管理和调度容器运行时的所有基本操作。这个层次的主要组件包括:

  • 守护进程:containerd 守护进程负责处理所有的容器管理请求,并维护容器的生命周期。

  • gRPC API:通过 gRPC API 与外部客户端通信,提供标准化的接口以执行容器操作。

  • 任务管理:管理容器的创建、启动、停止和删除任务,确保容器按照预期运行。

  • 快照管理:使用快照(Snapshot)机制管理容器文件系统,实现高效的存储操作。

  • 事件监控:实时监控容器事件,提供日志记录和事件通知功能,便于运维人员进行故障排查和系统监控。

客户端(Client)

containerd 的客户端提供用户与 containerd 平台交互的方式。主要的客户端工具包括:

  • ctr:containerd 自带的命令行工具,用于直接与 containerd 进行交互。虽然功能强大,但主要用于开发和调试场景。

  • crictl:专为 Kubernetes 设计的命令行工具,通过 CRI 接口与 containerd 进行交互,适用于 Kubernetes 集群的运维和管理。

  • nerdctl:一个 Docker 兼容的 CLI 工具,提供类似 Docker 的用户体验,使用户无需重新学习即可使用 containerd 管理容器。

containerd 安装

containerd 官网

containerd 安装

# 下载 containerd release 包
$ wget https://github.com/containerd/containerd/releases/download/v1.7.14/containerd-1.7.14-linux-amd64.tar.gz
$ tar -zxvf cri-containerd-1.7.14-linux-amd64.tar.gz -C /

# 生成 containerd 默认配置文件
$ mkdir /etc/containerd/
$ containerd congfig default > /etc/containerd/config.toml

# 启动 containerd 服务
$ systemctl start containerd && systemctl enable containerd
$ ctr version

containerd CLI工具

containerd 架构及CLI工具ctr、crictl 和 nerdctl操作命令

ctr、crictl、nerdctl常用命令

命令dockerctrcrictlnerdctl
查看运行的容器docker psctr task ls/ctr container lscrictl psnerdctl ps
查看镜像docker imagesctr image lscrictl imagesnerdctl images
查看容器日志docker logscrictl logsnerdctl logs
查看容器数据信息docker inspectctr container infocrictl inspectnerdctl inspect
查看容器资源docker statscrictl statsnerdctl stats
启动 / 关闭已有的容器docker start/stopctr task start/killcrictl start/stopnerdctl start/stop
运行一个新的容器docker runctr run无(最小单元为 pod)nerdctl run
修改镜像标签docker tagctr image tagnerdctl tag
创建一个新的容器docker createctr container createcrictl createnerdctl create
导入镜像docker loadctr image importnerdctl import
导出镜像docker savectr image exportnerdctl export
删除容器docker rmctr container rmcrictl rmnerdctl rm
删除镜像docker rmictr image rmcrictl rminerdctl rmi
拉取镜像docker pullctr image pullcrictl pullnerdctl pull
推送镜像docker pushctr image pushnerdctl push
在容器内部执行命令docker execctr task execcrictl execnerdctl exec

ctr

  • 定义和功能: ctr 是一个用于测试和调试 containerd 的轻量级 CLI 工具。它提供了一些基本的命令,可以用于快速验证 containerd 的功能。
  • 使用场景及实例: ctr 主要用于开发和测试环境,例如开发者需要验证 containerd 是否正确安装和配置时,可以使用 ctr 运行一些基本的测试命令。

ctr 命令全集

全局选项

  • --address 或 -a: 指定 containerd 的 gRPC 服务器地址(默认:/run/containerd/containerd.sock)。

  • --connect-timeout: 设置连接到 containerd 的超时时间(默认:0 秒)。

  • --debug: 启用调试输出。

  • --namespace 或 -n: 指定要使用的命名空间(默认:default)。

  • --timeout: 设置命令的超时时间(默认:0 秒)。

命令

plugins

  • list 或 ls: 列出 containerd 插件。

    • --detailed 或 -d: 显示每个插件的详细信息。

    • --quiet 或 -q: 只显示插件 ID。

  • version: 显示客户端和服务器版本。

containers

  • create: 创建容器。

    • --allow-new-privs: 允许创建具有新特权的容器。

    • --annotation: 添加 OCI 注解。

    • --apparmor-default-profile: 启用 AppArmor 默认配置文件。

    • --apparmor-profile: 启用 AppArmor 自定义配置文件。

    • --blockio-class: 设置块 I/O 类别。

    • --blockio-config-file: 指定块 I/O 类别定义文件。

    • --cap-add: 添加 Linux 功能。

    • --cap-drop: 删除 Linux 功能。

    • --config: 指定运行时特定规范配置文件。

    • --cpu-period: 设置 CPU CFS 周期。

    • --cpu-quota: 设置 CPU CFS 配额。

    • --cwd: 设置工作目录。

    • --device: 添加设备。

    • --env: 设置环境变量。

    • --env-file: 从文件中设置环境变量。

    • --gpus: 添加 GPU。

    • --hostname: 设置主机名。

    • --label: 添加标签。

    • --memory-limit: 设置内存限制。

    • --mount: 添加挂载点。

    • --net-host: 启用主机网络。

    • --no-pivot: 禁用 pivot-root。

    • --pid-file: 设置 PID 文件路径。

    • --privileged: 创建特权容器。

    • --rdt-class: 设置 RDT 类别。

    • --read-only: 设置容器文件系统为只读。

    • --rootfs: 指定自定义根文件系统。

    • --rootfs-propagation: 设置容器根文件系统的传播方式。

    • --runtime: 指定运行时。

    • --runtime-config-path: 指定可选的运行时配置文件路径。

    • --sandbox: 指定沙箱。

    • --seccomp: 启用默认 seccomp 配置文件。

    • --seccomp-profile: 指定自定义 seccomp 配置文件。

    • --snapshotter: 指定快照器。

    • --snapshotter-label: 添加到新快照的标签。

    • --tty: 为容器分配 TTY。

    • --user: 设置用户。

    • --with-ns: 指定容器运行时要加入的 Linux 命名空间。

  • delete 或 del 或 remove 或 rm: 删除容器。

    • --keep-snapshot: 保留容器快照。

  • info: 获取容器信息。

    • --spec: 只显示容器规范。

  • list 或 ls: 列出容器。

    • --quiet 或 -q: 只显示容器 ID。

  • label: 设置或清除容器标签。

  • checkpoint: 容器快照。

    • --image: 将镜像包含在快照中。

    • --rw: 将读写层包含在快照中。

    • --task: 快照容器任务。

  • restore: 从快照还原容器。

    • --live: 从快照还原运行时和内存数据。

    • --rw: 从快照还原读写层。

  • content: 管理容器内容。

    • --all-metadata: 提取所有平台的元数据。

    • --all-platforms: 从所有平台提取内容。

    • --hosts-dir: 指定自定义主机配置文件目录。

    • --http-dump: 在与容器注册表交互时转储所有 HTTP 请求/响应。

    • --http-trace: 启用注册表交互的 HTTP 跟踪。

    • --label: 要附加到图像的标签。

    • --metadata-only: 提取所有元数据,包括清单和配置。

    • --plain-http: 允许使用纯 HTTP 连接。

    • --platform: 从特定平台提取内容。

    • --refresh: 刷新授权服务器的令牌。

    • --skip-verify 或 -k: 跳过验证。

    • --editor: 选择编辑器。

    • --validate: 验证结果是否符合格式。

    • --root: 指定内容存储根目录(默认:/tmp/content)。

    • --timeout 或 -t: 设置传输超时时间(默认:0 秒)。

    • active: 显示活动传输。

    • delete 或 del 或 remove 或 rm: 删除内容。

    • edit: 编辑 blob 并返回新的摘要。

    • fetch: 将图像的所有内容提取到 containerd。

images

  • check: 检查图像。

  • export: 将图像导出到 tar 文件。

  • import: 从 tar 文件导入图像。

  • list 或 ls: 列出图像。

    • --quiet 或 -q: 只显示图像 ID。

  • mount: 挂载图像。

  • unmount: 卸载图像。

  • pull: 从仓库拉取图像。

  • push: 将图像推送到仓库。

  • prune: 删除未使用的图像。

  • delete 或 del 或 remove 或 rm: 删除图像。

    • --sync: 同步删除图像及其所有关联的内容。

  • tag: 给图像添加标签。

  • label: 设置或清除图像标签。

  • convert: 转换图像。

leases

  • list 或 ls: 列出租约。

  • create: 创建租约。

  • delete 或 del 或 remove 或 rm: 删除租约。

namespaces

  • create 或 c: 创建命名空间。

  • list 或 ls: 列出命名空间。

  • remove 或 rm: 删除命名空间。

  • label: 设置或清除命名空间标签。

pprof

  • block: 显示块配置文件。

  • goroutines: 显示 goroutine 配置文件。

  • heap: 显示堆配置文件。

  • profile: 显示线程创建配置文件。

  • trace: 显示跟踪配置文件。

  • run: 运行 pprof 命令。

snapshots

  • commit: 提交快照。

  • diff: 显示快照差异。

  • info: 获取快照信息。

  • list 或 ls: 列出快照。

  • mounts: 显示挂载的快照。

  • prepare: 准备快照。

  • delete 或 del 或 remove 或 rm: 删除快照。

  • label: 设置或清除快照标签。

  • tree: 显示快照树。

  • unpack: 解包快照。

  • view: 查看快照。

tasks

  • attach: 附加到任务。

  • checkpoint: 快照任务。

  • delete 或 del 或 remove 或 rm: 删除任务。

  • exec: 在任务中执行命令。

  • list 或 ls: 列出任务。

  • kill: 杀死任务。

  • metrics: 获取任务指标。

  • pause: 暂停任务。

  • ps: 显示任务状态。

  • resume: 恢复任务。

  • start: 启动任务。

  • install: 安装 OCI 规范。

  • state: 获取任务状态。

sandboxes

  • run 或 create 或 c 或 r: 创建沙箱。

  • list 或 ls: 列出沙箱。

  • remove 或 rm: 删除沙箱。

  • info: 获取沙箱信息。

示例

# 使用 ctr 命令拉取镜像
ctr image pull docker.io/library/nginx:latest
# 查看本地镜像
ctr images ls
# 将镜像导出为 tar 文件
ctr images export nginx.tar docker.io/library/nginx:latest
# 导入镜像
ctr images import nginx.tar
# 删除本地镜像
ctr images rm docker.io/library/nginx:latest
# 使用 ctr 命令创建容器
ctr run -d --rm --net-host docker.io/library/nginx:latest my-nginx
# 查看当前运行的容器
ctr tasks ls
# 查看容器的日志输出
ctr logs my-nginx
# 使用 ctr 命令进入容器
ctr tasks exec -t --exec-id myexec my-nginx /bin/sh
# 停止运行中的容器
ctr tasks kill -s SIGTERM my-nginx
# 删除容器
ctr containers rm my-nginx

crictl

  • 定义和功能: crictl 是一个用于与 Kubernetes CRI(Container Runtime Interface)交互的 CLI 工具。它提供了一组命令,可以用于检查和管理通过 CRI 运行的容器和镜像。
  • 使用场景及实例: crictl 主要用于 Kubernetes 环境下的容器管理。例如,管理员可以使用 crictl 查看当前运行的容器、检查容器日志或执行容器操作。

ctrctl 命令全集

全局选项

  • --runtime-endpoint: 指定 CRI 运行时端点(默认:/var/run/crio.sock)。

  • --runtime: 指定 CRI 运行时(默认:crio)。

  • --image-service-endpoint: 指定镜像服务端点(默认:/var/run/crio.sock)。

  • --timeout: 设置命令超时时间(默认:0 秒)。

  • --debug: 启用调试输出。

容器命令

  • crictl ps: 列出所有正在运行的容器。

    • --a: 只显示容器 ID。

  • crictl inspect: 获取容器信息。

  • crictl logs: 查看容器日志。

  • crictl top: 查看容器中的进程。

  • crictl exec: 在容器中执行命令。

  • crictl start: 启动容器。

  • crictl stop: 停止容器。

  • crictl kill: 杀死容器。

  • crictl rm: 删除容器。

  • crictl restart: 重启容器。

  • crictl pause: 暂停容器。

  • crictl unpause: 恢复容器。

  • crictl attach: 连接到容器。

镜像命令

  • crictl images: 列出所有镜像。

    • --a: 只显示镜像 ID。

  • crictl pull: 从仓库拉取镜像。

  • crictl push: 将镜像推送到仓库。

  • crictl image-rm: 删除镜像。

Pod 命令

  • crictl pods: 列出所有 Pod。

    • --a: 只显示 Pod ID。

  • crictl pod-sandbox: 获取 Pod 沙箱信息。

  • crictl pod-sandbox-list: 列出 Pod 沙箱。

  • crictl pod-sandbox-create: 创建 Pod 沙箱。

  • crictl pod-sandbox-remove: 删除 Pod 沙箱。

  • crictl pod-sandbox-inspect: 获取 Pod 沙箱信息。

其他命令

  • crictl version: 显示 crictl 版本。

  • crictl help: 获取帮助信息。

示例

# 查看容器
crictl ps
crictl ps -a
# 运行容器
crictl runp pod-config.yaml
crictl create <pod-id> container-config.yaml pod-config.yaml
crictl start <container-id>
# 停止容器
crictl stop <container-id>
# 删除容器
crictl rm <container-id>
# 查看镜像
crictl images
# 拉取镜像
crictl pull nginx:latest
# 删除镜像
crictl image-rm docker.io/library/nginx:latest
# 列出所有 Pod
crictl pods
# 在名为 nginx 的容器中执行命令 ls -l
crictl exec -it nginx ls -l

nerdctl(推荐)

  • 定义和功能: nerdctl 是专为 Containerd 设计的轻量级命令行工具,它的诞生旨在为那些从 Docker 转向 Containerd 的用户提供一个熟悉的操作界面。
  • 使用场景及实例: nerdctl 适合那些熟悉 Docker CLI 但希望使用 containerd 的用户。例如,开发者可以使用 nerdctl 来构建和运行容器,而不需要学习全新的命令集合。

nerdctl 与 Docker 的区别:

  • 底层与上层之别: 最本质的区别在于,Docker 是一个包含了完整容器生命周期管理的平台,包含了 Docker daemon 等多个组件。而 nerdctl 是一个纯粹的命令行工具,专注于与 Containerd 交互,后者作为低层级运行时,处理容器和镜像的实际操作。
  • 兼容与创新: nerdctl 虽然兼容 Docker 的 CLI 习惯,但并不意味着它是 Docker 的简单复制品。它在兼容基础上引入了新功能,如延迟拉取镜像(lazy-pulling)和镜像加密等,这些是 Docker 本身不具备的。
  • 性能与效率: 由于直接操作 Containerd,避免了 Docker daemon 这一层的额外开销,nerdctl 在某些场景下能提供更好的性能和资源利用率。
  • 定位差异: Docker 适合需要一站式解决方案的用户,而 nerdctl+Containerd 组合更适合那些追求轻量、高性能及与 Kubernetes 紧密集成的环境。

nerdctl 命令全集

全局选项

  • --runtime: 指定运行时,例如 containerd 或 crio (默认:containerd)。

  • --runtime-endpoint: 指定运行时端点,例如 /run/containerd/containerd.sock

  • --namespace: 指定命名空间。

  • --help 或 -h: 显示帮助信息。

  • --version 或 -v: 显示版本信息。

  • --debug: 启用调试模式。

容器命令

  • nerdctl run: 运行容器。

  • nerdctl start: 启动容器。

  • nerdctl stop: 停止容器。

  • nerdctl restart: 重启容器。

  • nerdctl kill: 杀死容器。

  • nerdctl pause: 暂停容器。

  • nerdctl unpause: 恢复容器。

  • nerdctl ps: 列出所有容器。

    • -a: 显示所有容器,包括已停止的容器。

    • -f: 按过滤器筛选容器。

  • nerdctl top: 查看容器中的进程。

  • nerdctl logs: 查看容器日志。

  • nerdctl exec: 在容器中执行命令。

  • nerdctl attach: 连接到容器。

  • nerdctl inspect: 查看容器信息。

  • nerdctl rm: 删除容器。

  • nerdctl commit: 提交容器到新的镜像。

  • nerdctl port: 查看容器端口映射。

镜像命令

  • nerdctl pull: 从仓库拉取镜像。

  • nerdctl push: 将镜像推送到仓库。

  • nerdctl images: 列出所有镜像。

    • -a: 显示所有镜像,包括未标记的镜像。

    • -f: 按过滤器筛选镜像。

  • nerdctl image-rm: 删除镜像。

  • nerdctl tag: 给镜像添加标签。

网络命令

  • nerdctl network create: 创建网络。

  • nerdctl network ls: 列出所有网络。

  • nerdctl network remove: 删除网络。

  • nerdctl network connect: 将容器连接到网络。

  • nerdctl network disconnect: 将容器从网络断开连接。

  • nerdctl network inspect: 查看网络信息。

卷命令

  • nerdctl volume create: 创建卷。

  • nerdctl volume ls: 列出所有卷。

  • nerdctl volume remove: 删除卷。

  • nerdctl volume inspect: 查看卷信息。

其他命令

  • nerdctl system prune: 删除未使用的镜像、容器、网络和卷。

  • nerdctl info: 显示 nerdctl 的系统信息。

  • nerdctl version: 显示 nerdctl 版本。

  • nerdctl build: 构建镜像。

示例

# 从 Docker Hub 拉取 nginx 镜像
nerdctl pull nginx:latest
# 构建一个名为 my-nginx 的镜像
nerdctl build -t my-nginx .
# 运行一个名为 my-nginx 的容器
nerdctl run -d --name my-nginx -p 80:80 nginx:latest
# 列出所有正在运行的容器
nerdctl ps
# 停止容器
nerdctl stop my-nginx
# 删除容器
nerdctl rm my-nginx


参考:


anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/6174.html | ☆★★每天进步一点点,加油!★★☆ | 

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注