Containerd高级命令行工具nerdctl安装及使用

 

 

################crictl ####################
crictl 安装k8s即有,ctr是containerd的一个客户端工具 ,ctr -v输出的是containerd的版本
[root@m1 ~]# crictl -v
crictl version v1.30.1
[root@m1 ~]#


[root@m1 ~]# crictl images
IMAGE TAG IMAGE ID SIZE
docker.io/calico/cni v3.25.0 d70a5947d57e5 198MB
docker.io/calico/kube-controllers v3.25.0 5e785d005ccc1 71.7MB
docker.io/calico/node v3.25.0 08616d26b8e74 247MB
registry.aliyuncs.com/google_containers/coredns v1.11.1 cbb01a7bd410d 18.2MB
registry.aliyuncs.com/google_containers/etcd 3.5.12-0 3861cfcd7c04c 57.2MB
registry.aliyuncs.com/google_containers/kube-apiserver v1.30.4 8a97b1fb3e2eb 32.8MB
registry.aliyuncs.com/google_containers/kube-controller-manager v1.30.4 8398ad49a121d 31.1MB
registry.aliyuncs.com/google_containers/kube-proxy v1.30.4 568d5ba88d944 29MB
registry.aliyuncs.com/google_containers/kube-scheduler v1.30.4 4939f82ab9ab4 19.3MB
registry.aliyuncs.com/google_containers/pause 3.6 6270bb605e12e 302kB
registry.aliyuncs.com/google_containers/pause 3.9 e6f1816883972 322kB
[root@m1 ~]#

ctr--help
crictl--help

##############ctr########################

ctr的经典使用

使用Ctrl对容器进行暂停和恢复

https://www.cnblogs.com/evescn/p/16996386.html

pause和resume

 

 


如果你的ctr images pull总是报错: http: server gave HTTP response to HTTPS client。可能这并不是你的配置出错,而是你需要在后面pull操作后加上--plain-http参数。表示你当前client与镜像仓库之间接受http形式的通信。或者是使用自定义的hosts-dir来指定配置文件。

ctr images pull IP:PORT/library/service:v1.0.0 --plain-http
ctr images pull IP:PORT/library/service:v1.0.0 --hosts-dir "/etc/containerd/certs.d"

由于 Containerd 也有 namespaces 的概念,对于上层编排系统的支持,
ctr客户端 主要区分了 3 个命名空间分别是k8s.io、moby和default,
以上我们用crictl操作的均在k8s.io命名空间,使用ctr看镜像列表就需要加上-n 参数。
crictl 是只有一个k8s.io命名空间,但是没有-n 参数。

【温馨提示】ctr images pull 拉取的镜像默认放在default,
而 crictl pull 和 kubelet 默认拉取的镜像都在 k8s.io 命名空间下。
所以通过ctr导入镜像的时候特别注意一点,最好指定命名空间。


######################nerdctl#########################

nerdctl 是 containerd 的命令行界面的工具。nerdctl 兼容 docker ,如果会使用 docker-cli 就等于掌握了 nerdctl 80% 的使用方法。

nerdctl 不但兼容docker-cli 甚至还兼容了 docker-compose的功能点。

 

 

 

containerd 客户端工具 nerdctl:
nerdctl 是 与 Docker 兼容的CLI for Containerd,其支持Compose
nerdctl 和 docker命令行语法很相似,学习比较容易
nerdctl 官方发布包包含两个安装版本:
Minimal: 仅包含 nerdctl 二进制文件以及 rootless 模式下的辅助安装脚本
Full: 看名字就能知道是个全量包,其包含了 Containerd、CNI、runc、BuildKit 等完整组件
推荐使用 nerdctl,使用效果与 docker 命令的语法一致,github 下载链接:

https://github.com/containerd/nerdctl/releases
精简 (nerdctl--linux-amd64.tar.gz): 只包含 nerdctl
完整 (nerdctl-full--linux-amd64.tar.gz):包含 containerd, runc, and CNI 等依赖
nerdctl的目标并不是单纯地复制 docker 的功能,它还实现了很多 docker 不具备的功能,例如延迟拉取镜像(lazy-pulling)、镜像加密(imgcrypt)等。具体看 nerdctl。


nerdctl使用样例
# nerdctl run -d --name nginx -p 80:80 nginx:alpine

To run a container with the default bridge CNI network (10.4.0.0/24):
# nerdctl run -it --rm alpine

To build an image using BuildKit:
# nerdctl build -t foo /some-dockerfile-directory
# nerdctl run -it --rm foo

To build and send output to a local directory using BuildKit:
# nerdctl build -o type=local,dest=. /some-dockerfile-directory

To run containers from docker-compose.yaml
# nerdctl compose -f ./examples/compose-wordpress/docker-compose.yaml up

nerdctl添加组件-完整安装full包包含这个脚本
# containerd-rootless-setuptool.sh install-buildkit

 

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

systemctl start containerd

 

 

netctr使用命令指导:

https://blog.csdn.net/zfw_666666/article/details/126174036
https://www.qikqiak.com/k8strain2/containerd/nerdctl/
https://www.cnblogs.com/hukey/p/17291811.html

 

nerdctl如果是精简安装需要安装buildkit

###############################

 

软件包:
https://github.com/moby/buildkit/releases
https://github.com/containerd/nerdctl/releases
https://github.com/containerd/nerdctl/releases/tag/v2.0.0-rc.1

Containerd 命令行工具 nerdctl使用:
https://cloud.tencent.com/developer/article/2344900

 

 

安装buildkit
在镜像构建时需要我们安装 buildctl 并运行 buildkitd,这是因为 nerdctl build 需要依赖 buildkit 工具。

buildkit 项目也是 Docker 公司开源的一个构建工具包,支持 OCI 标准的镜像构建。它主要包含以下部分:

服务端 buildkitd:当前支持 runc 和 containerd 作为 worker,默认是 runc,我们这里使用 containerd
客户端 buildctl:负责解析 Dockerfile,并向服务端 buildkitd 发出构建请求
buildkit 是典型的 C/S 架构,客户端和服务端是可以不在一台服务器上,而 nerdctl 在构建镜像的时候也作为 buildkitd 的客户端,所以需要我们安装并运行 buildkitd。

 

#####nerdctl 使用小技巧#####

3.1 更名docker
甚至可以直接将nerdctl更名为 docker

cat << 'EOF' > /usr/local/bin/docker
#!/bin/bash
/usr/local/bin/nerdctl $@
EOF

chmod +x /usr/local/bin/docker
3.2 nerdctl bash自动补全
>yum install bash-completion -y
>nerdctl completion bash > /etc/bash_completion.d/nerdctl
>source /etc/bash_completion.d/nerdctl
上面补全的是 nerdctl 的命令,而当 nerdctl 重命名 docker 后,没有 docker 的自动补全。

添加 docker 别名的自动补全:

生成自动补全文件
>nerdctl completion bash > /etc/bash_completion.d/nerdctl
>nerdctl completion bash > /etc/bash_completion.d/docker

生效
>source /etc/bash_completion.d/nerdctl
>source /etc/bash_completion.d/docker
测试:

输入 docker image + 两下 tab

>docker image
image (Manage images) images (List images)

>nerdctl image
image (Manage images) images (List images)

posted on 2024-08-18 23:34  keepimprove  阅读(612)  评论(0编辑  收藏  举报

导航