当前位置: 首页 > news >正文

安装buildkit,并使用buildkit构建containerd镜像

背景

因为K8s抛弃Docker了,所以就只装了个containerd,这样就需要一个单独的镜像构建工具了,就用了buildkit,这也是Docker公司扶持的,他们公司的人出来搞的开源工具,官网在 https://github.com/moby/buildkit

简介

  • 服务端为buildkitd,负责和runccontainerd后端连接干活,目前只支持这两个后端
  • 客户端为buildctl,负责解析镜像构建文件Dockerfile,并向服务端发出构建指令,所以客户端可以和服务端不在一台机器上,也不需要root权限之类
  • 服务端默认使用runc后端,但是建议使用containerd后端,这样构建出的镜像就会存在containerdbuildkit名字空间下

下载和安装

官网没看到源, 所以只能用绿色包了 Releases · moby/buildkit
去官网下载一个最新的包 buildkit-v0.16.0.linux-amd64.tar.gz ,解压后得到一个bin目录
把这个bin目录放到 $PATH 里去

启动buildkitd服务

buildkitd默认运行在前台的,如果需要后面加一个 &

用参数启动
使用 --oci-worker=false --containerd-worker=true 参数,可以让buildkitd服务使用containerd后端

buildkitd --oci-worker=false --containerd-worker=true & 

使用配置文件启动

  • 创建配置文件
mkdir -p /etc/buildkit/
vim /etc/buildkit/buildkitd.toml
[worker][worker.oci]enabled = false#platforms = ["linux/amd64"][worker.containerd]address = "/run/containerd/containerd.sock"enabled = trueplatforms = ["linux/amd64"]namespace = "k8s.io"gc = true# gckeepstorage sets storage limit for default gc profile, in MB.gckeepstorage = 9000[grpc]address = ["tcp://0.0.0.0:1234"]uid = 0gid = 0debug = false[registry][registry."registry.opsxlab.cn"]http = trueinsecure = false

说明:
[worker]
这是配置文件的主要部分,定义了与工作者(worker)相关的配置。在容器化环境中,工作者是执行容器操作的实体。
[worker.oci]

  • enabled = false: 表示不启用 OCI(Open Container Initiative)模式。OCI 是容器的标准化规范,但在这个配置中,OCI 被禁用了。
  • platforms = ["linux/amd64"]: 这个行被注释掉,表明未指定目标平台。通常这个选项用于指定容器运行的架构平台,比如 linux/amd64(64位Linux系统)。

[worker.containerd]

  • address = "/run/containerd/containerd.sock": 指定了 containerd 的 Unix 套接字地址,用于与 containerd 运行时通信。
  • enabled = true: 表示启用了 containerd 模式,这个配置将容器任务交给 containerd 处理。
  • platforms = ["linux/amd64"]: 这是运行容器的目标平台,这里指定的是 linux/amd64,表示运行在 64 位 Linux 系统上。
  • namespace = "k8s.io": 这个选项设置 containerd 使用的命名空间为 k8s.io,表明这个 containerd 实例是为 Kubernetes 服务的。
  • gc = true: 启用了垃圾回收(GC)。垃圾回收会自动删除不再需要的镜像或容器。
    》- gckeepstorage = 9000: 设置了默认的垃圾回收存储限制为 9000 MB(约 9GB)。当存储空间达到这个限制时,垃圾回收会启动,清理不再需要的数据。

[grpc]
这是 gRPC 的相关配置,用于定义 gRPC 服务的行为。

  • address = ["tcp://0.0.0.0:1234"]: 指定 gRPC 服务监听的地址和端口,这里是 0.0.0.0:1234,表示该服务在主机的所有网络接口上监听 1234 端口。
  • uid = 0: 设置了 gRPC 服务运行时的用户 ID,这里是 0,表示服务以 root 用户身份运行。
  • gid = 0: 设置了 gRPC 服务运行时的用户组 ID,这里是 0,也表示服务以 root 用户组身份运行。
  • debug = false: 表示未启用调试模式。如果设置为 true,则会输出更多的调试信息。

[registry]
这是容器镜像仓库的相关配置,定义了如何与指定的镜像仓库交互。

[registry.“registry.opsxlab.cn”]
这是一个指定的私有镜像仓库 registry.opsxlab.cn 的配置。

  • http = true: 允许使用 HTTP 连接,而非 HTTPS。通常情况下,镜像仓库使用 HTTPS 来确保数据传输安全,但这里允许通过不安全的 HTTP 进行通信。
  • insecure = false: 表示虽然允许使用 HTTP,但仍然要求一些安全措施,这意味着该配置未完全允许不安全的镜像拉取操作。如果设置为 true,则可能完全忽略安全检查。

参考项目
https://gitcode.com/gh_mirrors/bu/buildkit/overview

用此配置启动服务

buildkitd --config /etc/buildkit/buildkitd.toml & 

把buildkitd配置成系统服务

参考 https://github.com/moby/buildkit/tree/master/examples/systemd/system

  • 增加服务配置文件
vim /usr/lib/systemd/system/buildkitd.service
[Unit]
Description=BuildKitd
ConditionPathExists=/opt/buildkit/buildkitd
After=containerd.service[Service]
Type=simple
ExecStart=/opt/buildkit/buildkitd
User=root
Restart=on-failure
RestartSec=1500ms[Install]
WantedBy=multi-user.target

说明:我的buildkitd目录在/opt/buildkit下面,根据实际情况修改

  • 开机自启动
systemctl daemon-reload && systemctl restart buildkitd && systemctl enable buildkitd
  • 验证运行状态
systemctl status buildkitd

在这里插入图片描述

构建镜像

 buildctl  --addr tcp://10.0.11.66:1234 build  --frontend=dockerfile.v0   --local context=.  --local dockerfile=.  --output type=image,name=registry.opsxlab.cn/rd-mgt/ruoyi-admin:0.0.1

说明:
--addr:表示buildkitd的服务端地址
--frontend可以使用网关做前端,未做其他尝试,这里直接使用dockerfile.0
--local context 指向当前目录,这是Dockerfile执行构建时的路径上下文,比如在从目录中拷贝文件到镜像里
--local dockerfile指向当前目录,表示Dockerfile在此目录
--output 的 name 表示构建的镜像名称
构建完成后镜像会存在本地containerdbuildkit名字空间或配置文件指定的名字空间下

在这里插入图片描述

可以参考:https://gitcode.com/gh_mirrors/bu/buildkit/overview

http://www.lryc.cn/news/466632.html

相关文章:

  • maven jar包二进制文件 invalid stream header: EFBFBDEF 的错误
  • Git绑定Gitee或Github以及Git面试常见题
  • 值得细读的8个视觉大模型生成式预训练方法
  • go 包相关知识
  • 机器学习:opencv--人脸检测以及微笑检测
  • linux系统挂载硬盘
  • MySQL实现主从同步
  • 人工智能--数学基础
  • 2024人工智能技术的普及 如何看待AI技术的应用前景
  • 日常记录:springboot 2.2.5 + es 6.8.12
  • MySQL数据库备份与恢复详解
  • 10.22 MySQL
  • 「AIGC」n8n AI Agent开源的工作流自动化工具
  • Android 中获取和读取短信验证码
  • SQL语句高级查询(适用于新手)
  • main.ts中引入App.vue报错,提示“Cannot find module ‘./App.vue’ or its corresponding type
  • Android15音频进阶之组音量调试(九十)
  • 【Java】常用方法合集
  • 深入了解Vue Router:基本用法、重定向、动态路由与路由守卫的性能优化
  • 深入理解InnoDB底层原理:从数据结构到逻辑架构
  • Linux介绍及操作命令
  • JS | 详解图片懒加载的6种实现方案
  • Java | Leetcode Java题解之第502题IPO
  • JavaWeb学习(3)
  • 【含开题报告+文档+PPT+源码】基于SpringBoot的百货商城管理系统的设计与实现
  • Elasticsearch 实战应用与优化策略研究
  • 植物大战僵尸杂交版游戏分享
  • ProteinMPNN中DecLayer类介绍
  • Flux.all 使用说明书
  • DORA 机器人中间件学习教程(6)——激光点云预处理