当前位置: 首页 > 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

相关文章:

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

背景 因为K8s抛弃Docker了,所以就只装了个containerd,这样就需要一个单独的镜像构建工具了,就用了buildkit,这也是Docker公司扶持的,他们公司的人出来搞的开源工具,官网在 https://github.com/moby/buildkit 简介 服务端为buildkitd,负责和runc或containerd后端连接干活,目前…...

maven jar包二进制文件 invalid stream header: EFBFBDEF 的错误

背景: 将jasper模板文件导入jar包后,生成文件报错 org.springframework.core.io.Resource resource new ClassPathResource("/template/XXXX.jasper");jasperPrint JasperFillManager.fillReport(resource.getInputStream(), paramentMap, …...

Git绑定Gitee或Github以及Git面试常见题

1.绑定Git或Gitee Git绑定Gitee或GitHub的过程相对简单,以下是详细的步骤说明: 一、绑定Gitee仓库 在Gitee上创建仓库 登录Gitee官网,点击首页右上角的“”号,选择“新建仓库”。在新建仓库页面,输入仓库的名称、描述…...

值得细读的8个视觉大模型生成式预训练方法

写在前面 大语言模型的进展催生出了ChatGPT这样的应用,让大家对“第四次工业革命”和“AGI”的来临有了一些期待,也作为部分原因共同造就了美股2023年的繁荣。LLM和视觉的结合也越来越多:比如把LLM作为一种通用的接口,把视觉特征…...

go 包相关知识

在Go语言中,包的引用和搜索路径是由环境变量GOPATH和GO111MODULE共同决定的。 GOPATH环境变量:这个变量定义了默认的工作目录,Go命令行工具将会在这个目录下查找包文件。这个目录通常包含三个子目录:src、bin和pkg。 src目录包含…...

机器学习:opencv--人脸检测以及微笑检测

目录 前言 一、人脸检测的原理 1.特征提取 2.分类器 二、代码实现 1.图片预处理 2.加载分类器 3.进行人脸识别 4.标注人脸及显示 三、微笑检测 前言 人脸检测是计算机视觉中的一个重要任务,旨在自动识别图像或视频中的人脸。它可以用于多种应用&#xff0…...

linux系统挂载硬盘

参考链接:https://www.cnblogs.com/wenhainan/p/12292823.html (1)lsblk命令查看磁盘挂载情况 (2)使用fdisk分区新磁盘 如果要分多个分区需指定每个分区的大小 (3)格式化新分区 mkfs命令格…...

MySQL实现主从同步

一、首先我们准备3台mysql 分别为: 主服务器:test-mysql-master,端口3306 从服务器:test-mysql-slave1,端口3307 从服务器:test-mysql-slave2,端口3308 注意:如果防火墙是开着的记得把关掉,并且重启docker…...

人工智能--数学基础

目录 ​编辑2.1 线性代数基础 2.2 微积分及优化理论 2.3 概率论与统计学 2.4 信息论简介 2.1 线性代数基础 线性代数是处理向量空间(包括有限维或无限维)以及这些空间上的线性映射的一门数学分支。在线性代数中,最核心的概念包括向量、矩…...

2024人工智能技术的普及 如何看待AI技术的应用前景

AI 技术的应用前景十分广阔,但也面临着一些挑战,以下是对其应用前景的一些看法: 积极方面: 多行业深度融合与效率提升5: 医疗领域:AI 在医疗影像分析、辅助诊断、疾病预测等方面具有巨大潜力。例如&#xf…...

日常记录:springboot 2.2.5 + es 6.8.12

前言 最近有用到搜索引擎的功能,这不得把之前的es过程实践一遍,但发现过程坎坷,因为版本太低了。 一、安装es 6.8.12 安装过程跟之前写那章日常记录:elasticsearch 在linux安装_elasticsearch linux安装-CSDN博客一样&#xff0…...

MySQL数据库备份与恢复详解

文章目录 一、为什么需要备份数据库?二、MySQL数据库的备份方式1. 逻辑备份2. 物理备份3. 二进制日志备份 三、恢复数据库1. 使用mysqldump备份文件恢复2. 使用物理备份恢复3. 使用二进制日志恢复 四、备份与恢复的最佳实践五、结语 在日常的数据库运维中&#xff0…...

10.22 MySQL

存储过程 存储函数 存储函数是有返回值的存储过程,存储函数的参数只能是in类型的。具体语法如下: characteristic 特性 练习: 从1到n的累加 ​​​​​​ create function fun1(n int) returns int deterministic begindeclare total i…...

「AIGC」n8n AI Agent开源的工作流自动化工具

n8n AI Agent 是一个利用大型语言模型(LLMs)来设计和构建智能体(agents)的工具,这些智能体能够执行一系列复杂的任务,如理解指令、模仿类人推理,以及从用户命令中理解隐含意图。n8n AI Agent 的核心在于构建一系列提示(prompts),使 LLM 能够模拟自主行为。 传送门→ …...

Android 中获取和读取短信验证码

方法一:通过 SMS Retriever API SMS Retriever API 是 Google 提供的一种安全的方式,可以从系统中获取不需要权限的短信验证码。这种方式不需要请求 READ_SMS 权限,非常适合处理短信验证码的情况。 1. 在 build.gradle 中添加依赖 dependen…...

SQL语句高级查询(适用于新手)

SQL查询语句的下载脚本链接!!! 【免费】SQL练习资源-具体练习操作可以查看我发布的文章资源-CSDN文库https://download.csdn.net/download/Z0412_J0103/89908378 本文旨在为那些编程基础相对薄弱的朋友们提供一份详尽的指南,特别聚…...

main.ts中引入App.vue报错,提示“Cannot find module ‘./App.vue’ or its corresponding type

原因 代码编辑器:vscode ,使用vue3,所以安装了 Volar 插件,可以使 vue 代码高亮显示,不同颜色区分代码块,以及语法错误提示等 提示:如果使用的是vue2,则使用 Vetur 插件&#xff1…...

Android15音频进阶之组音量调试(九十)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+…...

【Java】常用方法合集

以 DemoVo 为实体 import lombok.Data; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;Data ExcelIgnoreUnannotated public class ExportPromoteUnitResult {private String id;ExcelProperty(value &qu…...

深入了解Vue Router:基本用法、重定向、动态路由与路由守卫的性能优化

文章目录 1. 引言2. Vue Router的基本用法2.1 基本配置 3. 重定向和命名路由的使用3.1 重定向3.2 命名路由 4. 在Vue Router中如何处理动态路由4.1 动态路由的概念4.2 如何处理动态路由4.3 动态路由的懒加载 5. 路由守卫的实现与性能影响5.1 什么是路由守卫?5.2 路由…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...