containerd 镜像构建工具 -- nerdctl 和 buildkit

自我介绍

  • kubernetes1.24 版本之后就要抛弃 docker-shim 组件,容器运行时也是从 docker 转换到了 containerd,而 containerd 自带的 ctr 命令并不好用,并且自身不支持构建镜像,并不像 docker 一样可以通过 docker build 来构建镜像
  • containerd 有一个子项目:nerdctl ,用来兼容 docker cli,可以像 docker 命令一样来管理本地的镜像和容器

nerdctl github

  • wget 下载的时候,需要加上 --no-check-certificate 参数,不然可能会返回 Unable to establish SSL connection. 这样的报错
  • 精简版 10.22MB
    • 仅有 nerdctl 命令
      • 无法使用 nerdctl build 命令,执行 nerdctl build 会出现如下报错:
      • ERRO[0000] buildctl needs to be installed and buildkitd needs to be running
  • 完整版 221.6MB
    • 不仅有 netdctl 命令,还包含了 buildkitd buildctlctrrunccontainerd 相关的命令,以及 cni 插件的二进制文件

nerdctl 精简版使用方法

  • 下载精简版二进制文件后,只需要把解压出来的文件放到 /usr/bin 目录下就可以了,当然有特殊需求,也可以解压到指定的路径,追加到 PATH 变量也可以
  • nerdctl 命令默认链接 containerd.sock 文件路径是 /run/containerd/containerd.sock ,如果和 containerd 配置文件内配置的 containerd.sock 不同,使用 nerdctl 命令的时候需要加上 -a 参数来指定 containerd.sock 路径
tar xf nerdctl-1.0.0-linux-amd64.tar.gz -C /usr/bin

随后就可以跟 docker 命令一样去查看容器和镜像了

配置 nerdctl 参数自动补齐

参数自动补齐,需要系统已经安装了 bash-completion.noarch 工具

echo 'source <(nerdctl completion bash)' >> /etc/profile
# 重新加载 /etc/profile 文件
source /etc/profile
nerdctl 命令验证

containerddockerkubernetes 上使用的区别在于:containerd 作为容器运行时的情况下,需要把镜像放到 k8s.io 这个 namespace

下载镜像

nerdctl -n k8s.io image pull centos:7

ctr 命令验证

ctr -n k8s.io image ls

nerdctl 完整版使用方法

  • 用完整版是为了可以使用 nerdctl build 命令,而 nerdctl build 命令其实时使用了 buildctl 命令来构建镜像
  • 完整版的 lib 目录下有现成的 buildkit.service 文件,不过需要注意 buildkitd 命令的路径,文件内默认的路径是 /usr/local/bin/buildkitd,需要把二进制文件放到指定路径下,或者修改文件的默认路径
cp lib/systemd/system/buildkit.service /lib/systemd/system/
  • buildkitd - buildkit 服务端命令
    • buildkitd 有两种可用的 worker,一个是 runc ,一个是 containerd ;默认使用 runc ,在 buildkitd 参数中为 oci-worker
      • 使用 containerd 作为 worker,需要增加 --oci-worker=false --containerd-worker=true 参数
        • nerdctl 命令一样,默认调用的是 /run/containerd/containerd.sock 文件,如果路径不一致,需要增加 --containerd-worker-addr 参数来指定 containerd.sock 文件的路径
        • 使用 containerd 作为 worker 时,会自动创建 buildkit 这个 namespace,可以通过 nerdctl namespace ls 命令来查看
          • 如果使用 nerdctl build 命令构建镜像,想把构建的镜像放到 buildkit 这个 namespace 下面,需要使用 nerdctl -n buildkit build 命令来指定 namespace
          • 如果使用 buildctl 命令构建镜像,会自动将构建好的镜像放到 buildkit 这个 namespace 下面
  • buildctl - buildkit 客户端命令
    • 执行 nerdctl build 需要保证 buildctl 命令在系统 PATH 环境变量中可查

启动 buildkit

systemctl enable buildkit.service --now

nerdcrtl 构建镜像

简单写一个 Dockerfile 验证一下

FROM alpine:3.16.3

ENV LANG=en_US.UTF-8
ENV TZ="Asia/Shanghai"

RUN echo '/bin/sleep 315360000' > start.sh
CMD ["sh","start.sh"]

构建镜像

nerdctl build -t alpine:3.16.3-test .

使用 buildctl 命令构建镜像

buildctl build --frontend dockerfile.v0 \
--local context=. \
--local dockerfile=. \
--output type=image,name=alpine:3.16.3-buildctl
  • --frontend - 使用 dockerfile.v0 作为前端,还有 gateway.v0 可以作为前端
  • --local context= - Dockerfile 执行构建时的路径上下文,比如在从目录中拷贝文件到镜像里
  • --local dockerfile= - Dockerfile 文件所在路径
  • --output name= - 构建后的镜像名称

挺麻烦的,我还是选择 nerdctl 命令把

######################################## 不华丽的分割线 ########################################

自 2022-12-22 更新
后续使用过程中发现了一些问题,使用 nerdctl 命令创建容器的时候,默认的 cni 插件路径是 /opt/cni/bin 目录,但是我部署的时候,cni 组件不在这个路径下,可以自己增加一个 alias 来指定路径

alias nerdctl='nerdctl --cni-path /approot/data/k8s/bin/'

再次使用 nerdctl run 就不会报错找不到 cni 插件了,当然,这里的路径需要改成自己的 cni 插件的路径

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
R-Drive Image 和之前和大家分享的 R-Studio 都是同一家公司开发的产品。R-Drive Image 是一款功能强大的实用程序,可提供磁盘镜像文件,用于备份或复制目的。磁盘镜像文件包含硬盘、分区或物理磁盘字节到字节的精确副本,可采用不同压缩级别实时创建。创建时不需关闭 Windows 操作系统,因此不会影响到您的业务。这些驱动镜像文件可保存在不同地点,如 CD-R(W)/DVD、Iomega Zip 或 Jazz 磁盘等不同的可移动媒体上。 磁盘镜像工具 R-Drive Image Technician 中文版磁盘镜像工具 R-Drive Image Technician 中文版 R-Drive Image 可以实时还原原始磁盘或任何其他分区,甚至硬盘可用空间上的镜像。为还原系统和其他锁定分区,R-Drive Image 可从 Windows 或从由实用程序创建、从 CD 或 磁盘启动的启动版直接切换到虚拟图形模式。 如果您的系统由于操作系统崩溃、病毒袭击或硬件冲突导致出现严重数据损失,您可以使用 R-Drive Image 迅速、完整地还原系统。如果您需要安装许多相同的计算机,您也可以使用 R-Drive Image 进行大量系统部署。换句话说,您只能手动安装系统、创建系统镜像,然后将其部署到所有其他计算机,以节省时间和成本。如果您只需从磁盘镜像中还原特定文件,可以将该镜像作为虚拟磁盘进行连接,并使用 Windows Explorer 或任何其他实用程序从磁盘镜像中直接复制这些文件。 R-Drive Image 是备份和灾难恢复的最佳解决方案之一,可以防止您在致命系统失败后丢失数据。 R-Drive Image 功能 简单的向导界面 – 不需要精湛的计算机管理技能。 实时操作:镜像文件可以实时创建,无需关闭和重启 Windows。在镜像创建前,所有其他磁盘写入操作均被保存在缓存中。除了系统分区上的镜像文件,其他镜像文件数据均可实时还原。系统分区数据可通过在虚拟图形模式下直接从 Windows 重启 R-Drive Image 还原,或使用专门创建的启动盘还原。 镜像文件压缩。镜像文件可以压缩,以节省可用存储空间。 支持可移动媒体。镜像文件可保存在可移动媒体上。 启动版。启动版可用于成像/还原/复制由操作系统锁定的分区。计算机可直接从 Windows 或从外部 USB 设备、CD/DVD 光盘或 6 个软盘中作为启动版重新启动。如果不支持显卡,启动版可使用图形用户界面或虚拟图形模式。 启动版中的 USB 2.0 和 3.0 支持。随着硬盘驱动器价格不断降低,带合适硬盘驱动器的外置 IDE-USB 2.0 或 3.0 硬盘驱动器盒成为了保存系统和其他分区备份文件的理想(快速和可靠)解决方案,系统和分区只能在启动版中进行还原。再也不用使用众多不可靠的 CD 光盘和速度缓慢的 CD/DVD 刻录机了。记住: 随着备份的逐渐增大,该硬盘驱动器不能过大。 启动版中的网络支持。 R-Drive Image 启动版支持磁盘镜像文件创建和通过 Microsoft 网络还原(CIFS 协议)。 启动版中支持设备的扩展列表。 R-Drive Image启动版支持的硬件列表已经进行过扩展。查看列表 镜像文件可作为只读虚拟磁盘连接。这一磁盘可通过可以找到和复制的文件/文件夹进行浏览。 单个文件和文件夹还原。可通过还原操作或从作为虚拟磁盘连接的镜像文件中还原单个文件和文件夹,而非整个磁盘。 拆分镜像文件。驱动器镜像可被拆分为几个文件,以适合存储媒体的大小。 镜像保护。磁盘镜像文件可采用密码保护并包含注释。 创建新分区。磁盘镜像数据可以还原到硬盘上任意位置的可用(未分区)空间内。被还原分区的大小可以更改。 分区更换。磁盘镜像数据可以还原到其他现有分区内。R-Drive Image 会删除此类分区,并在可用空间内还原数据。 磁盘到磁盘拷贝。整张磁盘可以直接复制到另一张磁盘上。 镜像文件检查。在保存镜像文件或者还原镜像文件中的数据前,您可以检查镜像文件是否完好。 日常安排程序。磁盘镜像创建时间可以计划,并采用无人看管模式执行。 频繁操作或无人看管操作的脚本创建。与实际执行的操作一样,创建镜像文件并将数据附加到现有镜像文件的这类脚本会从 R-Drive Image 界面创建。脚本从命令行执行,并且这类命令可以包括在任何命令文件中。 操作报告。当磁盘镜像成功创建或操作失败时,会通过电子邮件或可以启动的外部应用程序自动发送报告。 支持 ReFS(Resilient File System,弹性文件系统),Microsoft 在 Windows 2012 Server 中引入的新型本地文件系统。支持除重新设置分区大小之外的所有磁盘操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值