DevOps运维技术栈

nerdctl:一个酷似docker又胜于docker的命令行工具

1 nerdctl 简介

nerdctl 是一个命令行工具,旨在为用户提供与 Docker 相似的体验,但它是通过 containerd 来管理容器的。containerd 是一个高性能的容器运行时,用于管理容器的生命周期,包括镜像拉取、容器的创建、运行、停止等。nerdctl 的出现是为了简化和容器管理工具之间的差距,尤其是在不使用 Docker 的情况下,仍然能够获得类似 Docker 的体验。

nerdctl的目标并不是单纯地复制 docker 的功能,它还实现了很多 docker 不具备的功能,例如延迟拉取镜像(lazy-pulling)、镜像加密(imgcrypt)等

2 nerdctl 特点

3 安装 nerdctl

nerdctl并不是默认安装的,需要手动安装。项目地址:

https://github.com/containerd/nerdctl/releases

1、下载安装包

wget https://github.com/containerd/nerdctl/releases/download/v2.0.0/nerdctl-2.0.0-linux-amd64.tar.gz

2、解压并安装

tar -xvf nerdctl-2.0.0-linux-amd64.tar.gz
mv nerdctl /usr/local/bin

将 nerdctl 安装到 /usr/local/bin 目录,确保它在你的 环境变量PATH 中

3、检查安装

[root@k8s-master ]nerdctl version
WARN[0000] unable to determine buildctl version: exec: "buildctl": executable file not found in $PATH 
Client:
 Version: v2.0.0
 OS/Arch: linux/amd64
 Git commit: ef588dafa080e3dbc9c061ff3802affb66aef291
 buildctl:
  Version: 

Server:
 containerd:
  Version: 1.6.33
  GitCommit: d2d58213f83a351ca8f528a95fbd145f5654e957
 runc:
  Version: 1.1.12
  GitCommit: v1.1.12-0-g51d5e94

4 常用命令与用法

1. 查看 nerdctl 版本

nerdctl --version

显示当前安装的 nerdctl 版本。

2. 拉取镜像

nerdctl pull nginx:1.25

3. 运行容器

nerdctl run <options> <image_name> <command>

nerdctl run -d -p 80:80 --name=nginx --restart=always nginx

nerdctl run -it --rm alpine /bin/sh

用于启动一个容器,并执行指定的命令。常见选项包括:

4. 列出正在运行的容器

nerdctl ps

5. 列出所有容器(包括已停止的)

nerdctl ps -a

6. 停止/启动容器

nerdctl stop/start <container_id_or_name>

7. 删除容器

nerdctl rm <container_id_or_name>

-f :强制删除正在运行的容器

8. 查看容器日志

nerdctl logs <container_id_or_name>

9. 删除镜像

nerdctl rmi <image_name_or_id>

删除指定的镜像。例如:

10. 查看镜像列表

nerdctl images

11. 执行命令到正在运行的容器

nerdctl exec -it <container_id_or_name> <command>

nerdctl exec -it my-container /bin/bash

12. 构建镜像

nerdctl build -t <image_name> <dockerfile_directory>

13. 创建网络

nerdctl network create <network_name>

nerdctl network create my_network

14. 将容器连接到网络

nerdctl network connect <network_name> <container_id_or_name>

nerdctl network connect my_network my-container

15 登录镜像仓库

# 登录
nerdctl login  --username xxx --password xxx  IP或域名

# 退出
nerdctl logout

还有tag打标签,push/pull推送和拉取镜像,save/load导出和导入镜像等操作就不展开讲解了,基本和Docker一样

退出移动版