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

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

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

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

  • docker run -p
  • 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 [email protected] --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 /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/nerdctl ctr crictl
查看运行的容器 docker/nerdctl ps ctr task ls/ctr container ls crictl ps
查看镜像 docker/nerdctl images ctr image ls crictl images
查看容器日志 docker/nerdctl logs crictl logs
查看容器数据信息 docker/nerdctl inspect ctr container info crictl inspect
查看容器资源 docker/nerdctl stats crictl stats
启动/关闭已有的容器 docker/nerdctl start/stop ctr task start/kill crictl start/stop
运行一个新的容器 docker/nerdctl run ctr run 无(最小单元为 pod)
打标签 docker/nerdctl tag ctr image tag
创建一个新的容器 docker/nerdctl create ctr container create crictl create
导入镜像 docker/nerdctl load ctr image import
导出镜像 docker/nerdctl save ctr image export
删除容器 docker/nerdctl rm ctr container rm crictl rm
删除镜像 docker/nerdctl rmi ctr image rm crictl rmi
拉取镜像 docker /nerdctl pull ctr image pull ctictl pull
推送镜像 docker/nerdctl push ctr image push
登录或在容器内部执行命令 docker/nerdctl exec crictl exec
清空不用的容器 docker/nerdctl image prune crictl 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 多平台发布

你可能感兴趣的:(程序人生)