美文网首页
nerdctl 工具(用于 containerd 但兼容 doc

nerdctl 工具(用于 containerd 但兼容 doc

作者: 彩色的炮灰 | 来源:发表于2023-06-28 17:26 被阅读0次

简介
nerdctl 是用于 containerd 并且 兼容 docker cli 习惯的管理工具,主要适用于刚从 docker 转到 containerd 的用户,操作 containerd 的命令行工具 ctr 和 crictl 不怎么好用,所以就有了 nerdctl。

要特别说明的是:nerdctl 操作的是 containerd 而非 docker,所以 nerdctl images 和 docker images 看到的内容不同,它只是用法保持了 docker cli 的习惯,实质上操作的是 containerd。

nerdctl 的使用和 docker 一致,与 docker 具有相同的体验,主要特征如下:

✅ 与 docker 的 UI/UX 相同
✅ 支持 docker-compose ( 例如:nerdctl compose up)
✅ [可选] 支持 rootless 模式,无 slirp 开销(bypass4netns)
✅ [可选] 支持延迟拉取(Stargz、Nydus、OverlayBD)
✅ [可选] 支持加密镜像(ocicrypt)
✅ [可选] 支持 P2P 镜像分发 (IPFS) (*1)
✅ [可选] 支持容器镜像签名和验证(cosign)
✅ [可选] 支持 containerd 的命名空间查看,nerdctl不仅可以管理Docker容器,也可以直接管理本地的的Kubernetes pod。
✅ [可选] 支持将Docker Image Manifest镜像转换为OCI镜像、estargz镜像。

nerdctl 是 containerd 的非核心子项目,更多资料详见官网。

安装
nerdctl 的安装分为 Minimal 精简安装和包含一些插件的 Full 完整安装。精简版只包含 nerdctl,完整版包含 nerdctl 和 CNI 插件等依赖(当然你也可以在精简安装的基础上再自己添加 CNI 等插件)。

  • Minimal (nerdctl-1.0.0-linux-amd64.tar.gz): nerdctl only
  • Full (nerdctl-full-1.0.0-linux-amd64.tar.gz): Includes dependencies such as containerd, runc, and CNI

下载安装
官方下载地址: https://github.com/containerd/nerdctl/releases,在 Asset 中选择下载精简或者完全安装包(本例精简安装)。

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

tar -xzvf nerdctl-*-linux-amd64.tar.gz -C /usr/local/bin/

查看版本号验证安装

[root@test tmp] nerdctl --version
nerdctl version 1.0.0

命令
输入 nerdctl -h 查看帮助,列出所有命令说明,如下:

[root@test tmp]# nerdctl -h
nerdctl is a command line interface for containerd
Config file ($NERDCTL_TOML): /etc/nerdctl/nerdctl.toml
Usage: nerdctl [flags]
Management commands:
  apparmor   Manage AppArmor profiles
  builder    Manage builds
  container  Manage containers
  image      Manage images

Commands:
  build       Build an image from a Dockerfile. Needs buildkitd to be running.
  commit      Create a new image from a container's changes
  completion  Generate the autocompletion script for the specified shell
  compose     Compose
  cp          Copy files/folders between a running container and the local filesystem.
  create      Create a new container. Optionally specify "ipfs://" or "ipns://"

Run 'nerdctl COMMAND --help' for more information on a command.

可以通过配置文件 /etc/nerdctl/nerdctl.toml 对 nerdctl 进行更多配置

手工添加插件(按需可选)
以添加 CNI 插件为例,先到 CNI 插件的官方地址下载插件文件。

CNI 需放在指定目录,默认目录为 /opt/cni/bin (这个默认目录在 nerdctl --help 帮助中 --cni-path 后面有说明),nerdctl 会默认查找该目录。

[root@test tmp]# wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
[root@test tmp]# mkdir -p /opt/cni/bin
[root@test tmp]# tar -xzvf cni-plugins-linux-amd64-v1.1.1.tgz -C /opt/cni/bin
[root@test tmp]# ll /opt/cni/bin/
total 63728
-rwxr-xr-x 1 root root 3780654 Mar 10  2022 bandwidth
-rwxr-xr-x 1 root root 4221977 Mar 10  2022 bridge
-rwxr-xr-x 1 root root 9742834 Mar 10  2022 dhcp
-rwxr-xr-x 1 root root 4345726 Mar 10  2022 firewall
-rwxr-xr-x 1 root root 3811793 Mar 10  2022 host-device
-rwxr-xr-x 1 root root 3241605 Mar 10  2022 host-local
-rwxr-xr-x 1 root root 3922560 Mar 10  2022 ipvlan
-rwxr-xr-x 1 root root 3295519 Mar 10  2022 loopback
-rwxr-xr-x 1 root root 3959868 Mar 10  2022 macvlan
-rwxr-xr-x 1 root root 3679140 Mar 10  2022 portmap
-rwxr-xr-x 1 root root 4092460 Mar 10  2022 ptp
-rwxr-xr-x 1 root root 3484284 Mar 10  2022 sbr
-rwxr-xr-x 1 root root 2818627 Mar 10  2022 static
-rwxr-xr-x 1 root root 3379564 Mar 10  2022 tuning
-rwxr-xr-x 1 root root 3920827 Mar 10  2022 vlan
-rwxr-xr-x 1 root root 3523475 Mar 10  2022 vrf

测试一下

启动一个 nginx 容器,名称为 nginx-test,将宿主机端口 10800 和容器的 80 端口映射

# 启动容器
[root@test tmp]# nerdctl run -d --name nginx-test -p 10800:80 nginx:1.22.1
docker.io/library/nginx:1.22.1:                                                   resolved       |++++++++++++++++++++++++++++++++++++++| 
index-sha256:809f0924101d9c07322d69ab0705e1a0d85b1d0f287e320ae19b0826979c56e9:    done           |++++++++++++++++++++++++++++++++++++++| 
manifest-sha256:fa7e5dee56197a5cbb5b346b3c2c41d91ffa57eb1efcabb5ff09483c87270ccb: done           |++++++++++++++++++++++++++++++++++++++| 
config-sha256:404359394820dad4c8f210f935939f5890a02ccf82302e1a1068bd0723149736:   done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:50b97857b95c8b58fbaa89e528105534fc73606f71e0c4866566b2d6dda2f907:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:f3c8f37c59f021e336eb6064cb5ef086a44630c8a1cd0728d9b56d584a89fbaf:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:a603fa5e3b4127f210503aaa6189abf6286ee5a73deeaab460f8f33ebc6b64e2:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:0edfe97a837abe97ce52b42da5fad5df39a3daccc47b5e4d3bc294375b481a0a:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:0bf5e07cb0afcd466f3b9f207c8cbaf77a1d483779f37d0189115282e4374dc1:    done           |++++++++++++++++++++++++++++++++++++++| 
layer-sha256:f95a257c65b62fcb59f62f64ab3212e47226f460e9cbfa8c9187f2ab1923ca8c:    done           |++++++++++++++++++++++++++++++++++++++| 
elapsed: 20.9s                                                                    total:  30.0 M (1.4 MiB/s)                                       
d550e2afd0c1ac924a3047a559c38697167b6b2317a19b3336e43285c6e558dc

# 查看运行中的容器
[root@test tmp]# nerdctl ps
CONTAINER ID    IMAGE                             COMMAND                   CREATED           STATUS    PORTS                    NAMES
d550e2afd0c1    docker.io/library/nginx:1.22.1    "/docker-entrypoint.…"    32 seconds ago    Up        0.0.0.0:10080->80/tcp    nginx-test

# 根据容器名称删除容器
[root@test tmp]# nerdctl rm -f nginx-test
nginx-test

通过浏览器可以正常访问:


image.png

原文地址:https://blog.csdn.net/catoop/article/details/128033743

相关文章

网友评论

      本文标题:nerdctl 工具(用于 containerd 但兼容 doc

      本文链接:https://www.haomeiwen.com/subject/oowoydtx.html