像使用Docker一样丝滑的使用Containerd

像使用Docker一样丝滑的使用Containerd

🍎都知道,K8s弃用Docker,正式使用Containerd将其取代,但是经过那么久的时间相处,对Docker的使用习惯还是比较难改变。但是containerd自带的CLI工具ctrcrictl目前存在很多短板,不够友好。

ctr 的设计对人类不太友好,例如缺少以下这些和 Docker 类似的功能:

  • docker run -p <PORT>
  • docker run --restart=always
  • 通过凭证文件 ~/.docker/config.json 来拉取镜像
  • docker logs

crictl工具相对ctr来说稍微友好一些,crictl还没有tag命令,但是还上没有docker使用上那么丝滑呀。

nerdctl工具真心丝滑

nerdctl run -d -p 8080:80 --name=nginx --restart=always nginx #和使用docker一样丝滑
docker run -d -p 8080:80 --name=nginx --restart=always nginx

nerdctl具备很多docker不具备的功能,如延迟拉镜像,镜像加密等。

nerdctl具备但是Docker不具备的一些功能

  1. 延迟拉取镜像 lazy-pulling
  2. 镜像加密 imgcrypt
  3. 递归只读 (RRO) 绑定安装
  4. 推送时对容器镜像进行签名
nerdctl push --sign=cosign --cosign-key cosign.key devopps/hello-world
nerdctl pull --verify=cosign --certificate-identity=name@example.com --certificate-oidc-issuer=https://accounts.example.com devopps/hello-world

  1. 可以使用 IPFS 在没有注册表的情况下分发容器镜像
  2. 一次将容器连接到多个网络 nerdctl run --net foo --net bar
  3. 更好的多平台支持 nerdctl pull --all-platforms IMAGE
  4. 指定一个非图像根文件系统 nerdctl run -it --rootfs <ROOTFS> /bin/sh
  5. 使用 bypass4netns 加速无根容器 [1] nerdctl run --label nerdctl/bypass4netns=true

如何使用nerdctl

github 下载链接:

https://github.com/containerd/nerdctl/releases[2]

  • 「精简 (nerdctl--linux-amd64.tar.gz): 只包含 nerdctl」
  • 「完整 (nerdctl-full--linux-amd64.tar.gz): 包含 containerd, runc, and CNI 等依赖」

安装方法比较简单,将下载的二进制文件解压到$PATH 目录即可

wget https://github.com/containerd/nerdctl/releases/download/v1.4.0/nerdctl-1.4.0-linux-amd64.tar.gz
tar Cxzvvf /usr/local/bin nerdctl-1.4.0-linux-amd64.tar.gz

安装好 nerdctl 后,就可以使用 nerdctl 来运行容器了。前提是先安装好Containerd哈。

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

使用nerdctl构建镜像

需要先安装软件:buildkit 将其解压到 $PATH 中:

wget https://github.com/moby/buildkit/releases/download/v0.8.2/buildkit-v0.8.2.darwin-amd64.tar.gz
tar -C /usr/local/ -zxvf buildkit-v0.8.2.linux-amd64.tar.gz

编写 systemd unit 文件:

# cat /etc/systemd/system/buildkit.service
[Unit]
Description=BuildKit
Documentation=https://github.com/moby/buildkit

[Service]
ExecStart=/usr/local/bin/buildkitd --oci-worker=false --containerd-worker=true

[Install]
WantedBy=multi-user.target

启用 buildkit.service 并设置开机自动运行:systemctl enable --now buildkit.service

接下来就是镜像的构建了,使用方法与docker完全一样!不再描述

附上一些常用的命令

命令docker/nerdctlctrcrictl
查看运行的容器docker/nerdctl psctr task ls/ctr container lscrictl ps
查看镜像docker/nerdctl imagesctr image lscrictl images
查看容器日志docker/nerdctl logscrictl logs
查看容器数据信息docker/nerdctl inspectctr container infocrictl inspect
查看容器资源docker/nerdctl statscrictl stats
启动/关闭已有的容器docker/nerdctl start/stopctr task start/killcrictl start/stop
运行一个新的容器docker/nerdctl runctr run无(最小单元为 pod)
打标签docker/nerdctl tagctr image tag
创建一个新的容器docker/nerdctl createctr container createcrictl create
导入镜像docker/nerdctl loadctr image import
导出镜像docker/nerdctl savectr image export
删除容器docker/nerdctl rmctr container rmcrictl rm
删除镜像docker/nerdctl rmictr image rmcrictl rmi
拉取镜像docker /nerdctl pullctr image pullctictl pull
推送镜像docker/nerdctl pushctr image push
登录或在容器内部执行命令docker/nerdctl execcrictl exec
清空不用的容器docker/nerdctl image prunecrictl rmi --prune
登录镜像仓库docker/nerdctl login
查看网络情况docker/nerdctl network ls
查看数据卷情况docker/nerdctl volume ls

Reference

[1]

使用 bypass4netns 加速无根容器: https://github.com/containerd/nerdctl/blob/main/docs/rootless.md

[2]

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

本文由 mdnice 多平台发布

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值