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

使用dockerbuildx在x86机器上构建arm版docker镜像

由于使用香橙派上的arm版docker直接build镜像会导致机器长时间占用无响应,所以考虑使用x86机器打包后再传输,这一点类似交叉编译。

一、安装docker

这里使用rockylinux8,参考Rocky Linux8 安装docker_rocky安装docker-CSDN博客进行安装和配置即可

二、安装dockerbuildx

上面的步骤已经按照了dockerbuildx, 离线安装包名是rpm -ivh docker-buildx-plugin-0.14.0-1.el8.x86_64.rpm,对于docker26.1.3 无需启用实验特性。

三、构造自定义的buildkit镜像

因为dockerbuildx不会使用/etc/docker/daemon.json里的镜像,所以在使用官方的buildkit构建镜像时,获取的镜像都是官方的dockerhub镜像,这里进行配置

编辑Dockerfile

# 使用官方的 buildx-stable-1 镜像作为基础镜像
FROM moby/buildkit:buildx-stable-1

# 复制自定义的 buildkitd.toml 文件到镜像中
COPY buildkitd.toml /etc/buildkit/buildkitd.toml

# 设置 BuildKit 的配置文件路径
ENV BUILDKITD_FLAGS="--config /etc/buildkit/buildkitd.toml"

其中使用到的buildkitd.toml

# https://github.com/moby/buildkit/blob/master/docs/buildkitd.toml.md

debug = true

[registry."docker.io"]
mirrors = [
    "docker.1panel.dev",
    "docker.fxxk.dedyn.io",
    "docker.xn--6oq72ry9d5zx.cn",
    "docker.m.daocloud.io",
    "a.ussh.net",
    "docker.zhai.cm"
]
http = false

构建buildkit镜像

docker build -t cn-buildkit:latest -f Dockerfile .

推送到私有镜像或dockerhub,这里以uhub为例

docker login uhub.service.ucloud.cn
docker tag cn-buildkit:latest uhub.service.ucloud.cn/iatc/cn-buildkit:latest
docker push uhub.service.ucloud.cn/iatc/cn-buildkit:latest

四、使用自定义buildkit镜像打包

这里以打包成armv7镜像为例

#docker buildx 使用自己的buildkit镜像
docker buildx create --use --name=mybuilder-cn --driver docker-container --driver-opt image=uhub.service.ucloud.cn/iatc/cn-buildkit:latest
# build使用mybuilder-cn的容器名
docker buildx use mybuilder-cn
#构建镜像
docker buildx build --platform linux/arm/v7 -t iptv-proxy-go-arm:latest . --load
#删除环境
docker buildx rm mybuilder
#查看镜像架构
docker inspect iptv-proxy-go-arm:latest
#结果里 "Architecture": "arm", "Variant": "v7",

注意image=后面的镜像都会从网络下载,所以需要先上传到私有镜像或者dockerhub上,就算本地有也会从远程下载。

在4c4g的虚拟机上编译一个简单的golang程序约500秒。

五、导出导入打包好的镜像

在x86机器上导出,导出后传输到arm机器上进行导入

#在本机上导出
docker save -o iptv-proxy-go-arm.tar iptv-proxy-go-arm:latest
#在arm机器上导入
docker load -i iptv-proxy-go-arm.tar

http://www.dtcms.com/a/113249.html

相关文章:

  • 神经网络基础
  • 嵌入式AI简介
  • java面向对象 - 封装、继承和多态
  • 浅谈ai - Activation Checkpointing - 时间换空间
  • HANA如何在存储过程里执行动态SQL
  • 智慧节能双突破 强力巨彩谷亚VK系列刷新LED屏使用体验
  • 初识Linux-基本常用指令(一篇学会操作指令)
  • 03.unity开发资源 获取
  • 05.unity 游戏开发-3D工程的创建及使用方式和区别
  • Windows程序中计时器WM_TIMER消息的使用
  • Golang的Goroutine(协程)与runtime
  • 使用MATIO库读取Matlab数据文件中的稀疏矩阵
  • JAVA阻塞队列
  • OrangePi入门教程(待更新)
  • C++开发工具全景指南
  • 【java】在 Java 中,获取一个类的`Class`对象有多种方式
  • 6.5.图的基本操作
  • YOLOX 检测头以及后处理
  • 联网汽车陷入网络安全危机
  • 贪心算法之任务选择问题
  • mmap函数的概念和使用方案
  • 爬楼梯问题-动态规划
  • 3536 矩形总面积
  • leetcode4.寻找两个正序数组中的中位数
  • 类 和 对象 的介绍
  • 2024 .11-2025.3 一些新感悟
  • 【33期获取股票数据API接口】如何用Python、Java等五种主流语言实例演示获取股票行情api接口之沪深A股当天逐笔交易数据及接口API说明文档
  • 【2020】【论文笔记】相变材料与超表面——
  • 使用Cusor 生成 Figma UI 设计稿
  • 数据库并发控制问题