Earthly 多平台构建实战一条命令并行构建 amd64、arm64 与 armv7 镜像【免费下载链接】earthlySuper simple build framework with fast, repeatable builds and an instantly familiar syntax – like Dockerfile and Makefile had a baby.项目地址: https://gitcode.com/gh_mirrors/ea/earthly对于需要同时交付多种 CPU 架构镜像的团队来说Earthly 多平台构建是一个简单高效的选择在 Earthfile 中用一条BUILD命令加上多个--platform标志就能让 Earthly 并行构建 linux/amd64、linux/arm64 与 linux/arm/v7 三种架构的镜像并在导出时自动合并成一个多架构 manifest。本文带你从零配置到实战完成一次完整的多平台构建。为什么选择 Earthly 做多平台镜像构建Earthly 是一个轻量构建框架语法介于 Dockerfile 与 Makefile 之间写一次、到处运行。它做多平台构建有三个天然优势并行执行Earthly 自动把不同平台的构建拆成独立步骤并行运行无需手写脚本缓存复用基于 BuildKit 的分层缓存让相同步骤跨平台复用语法极简不需要docker buildx、binfmt注册脚本或 CI 矩阵配置一个 Earthfile 搞定。多平台构建前的准备配置 QEMU 模拟默认情况下构建运行在主机自身的架构上。要执行非本机的指令如 arm 平台上的RUN命令需要借助 QEMU 模拟各平台的准备工作如下运行环境需要的操作Mac / WindowsDocker Desktop 自带 QEMU开箱即用Apple Silicon (M1/M2)需在 Docker Desktop 中开启 Rosetta 模拟Linux需手动安装 QEMU 相关包CI如 GitHub Actions在 Job 中加入docker/setup-qemu-action步骤Apple Silicon 用户打开 Docker Desktop → Settings → Features in Development勾选 Use Rosetta for x86/amd64 emulationLinux 用户只需一次性执行以 Ubuntu 为例sudo apt-get install qemu-system binfmt-support qemu-user-static docker run --rm --privileged multiarch/qemu-user-static --reset -p yes docker stop earthly-buildkitd || true完整说明见官方文档 docs/guides/multi-platform.md。核心写法一条 BUILD 命令并行构建三种平台多平台构建的关键就是重复使用BUILD --platform标志。仓库自带的 examples/multiplatform/Earthfile 展示了最典型的写法VERSION 0.8 all: BUILD \ --platformlinux/amd64 \ --platformlinux/arm64 \ --platformlinux/arm/v7 \ --platformlinux/arm/v6 \ docker docker: FROM alpine:3.18 RUN uname -m CMD [uname, -m] SAVE IMAGE --push earthly/examples:multiplatformall调用一次docker目标就会同时执行四次分别在四个平台上运行uname -m也可以在命令行直接覆盖平台earthly --platformlinux/arm64 build不带任何--platform时构建按宿主机的原生架构进行。如果项目就在本仓库中克隆后可以直接体验cd examples/multiplatform earthly all自动合并多架构镜像的导出与推送一个容易困惑的问题是多个目标都SAVE IMAGE到同一个标签会互相覆盖吗不会。只要不同目标使用完全相同的镜像标签Earthly 在导出时会自动把它们合并成一个多平台multi-manifest镜像build-all-platforms: BUILD --platformlinux/amd64 --platformlinux/arm64 build build: FROM alpine:3.18 SAVE IMAGE --push org/myimage:latest执行earthly --push build-all-platforms后Docker Registry 里得到的就是一个包含 amd64 与 arm64 两个 manifest 的镜像docker pull时客户端会自动挑选匹配本机的架构。⚠️注意本地 Docker daemon 对多 manifest 镜像支持有限因此导出到本机时Earthly 会为每个架构额外生成带后缀的标签如org/myimage:latest_linux_arm64推送到 Registry 时则是单一的多架构镜像。进阶技巧交叉编译实现零模拟构建并非所有构建都必须在目标架构上执行。像 Go、Rust 这类支持交叉编译的语言可以在本机架构上编译出目标架构的二进制再放入对应平台的最终镜像——整个构建过程无需 QEMU速度更快。仓库中的 examples/multiplatform-cross-compile/Earthfile 是绝佳范例核心思路只有两行build-image: ARG TARGETPLATFORM ARG TARGETARCH ARG TARGETVARIANT FROM --platform$TARGETPLATFORM alpine:3.18 COPY \ --platformlinux/amd64 \ (build/main --GOARCH$TARGETARCH --VARIANT$TARGETVARIANT) ./example/main SAVE IMAGE --push earthly/examples:multiplatform-cross-compile要点build目标始终在linux/amd64上执行 Go 交叉编译用--GOARCH/--VARIANT控制输出架构FROM --platform$TARGETPLATFORM决定最终镜像标记的平台COPY --platformlinux/amd64 (build/main ...)从 amd64 构建产物中取二进制放进目标平台镜像build-image目标内没有任何RUN指令因此不需要模拟。善用内置平台变量让 Earthfile 更简洁Earthly 为多平台构建提供了一组开箱即用的内置参数完整列表见 docs/earthfile/builtin-args.md使用前记得先ARG声明变量示例值用途TARGETPLATFORMlinux/arm/v7当前目标构建的完整平台TARGETARCHarm目标 CPU 架构TARGETVARIANTv7目标架构变体USERPLATFORMlinux/amd64调用 earthly 命令的宿主机平台有了这些变量同一个build目标就能根据平台自动切换交叉编译参数无需为每个架构复制目标定义。常见问题与限制目前仅支持 linux 作为构建平台Windows 容器构建尚在规划中WITH DOCKER的限制包含WITH DOCKER的目标本身必须运行在宿主机原生架构上QEMU 环境暂不支持 docker-in-docker但其内部运行的镜像可以是任意架构# 正确写法build 运行在本机架构内部指定镜像的平台 build: FROM earthly/dind WITH DOCKER --pullearthly/examples:multiplatform RUN docker run --platformlinux/arm64 earthly/examples:multiplatform END构建失败排查不同平台的构建步骤相互隔离构建图DAG中任何一个分支失败都会终止整个构建日志中会清晰标注失败的分支。总结回顾一下 Earthly 多平台构建的完整路径按需配置 QEMU / Rosetta 模拟Apple Silicon 别忘了开 Rosetta用BUILD --platformlinux/amd64 --platformlinux/arm64 --platformlinux/arm/v7 target一条命令触发并行构建让各目标SAVE IMAGE到相同标签自动合并为多架构 manifest 并推送对 Go、Rust 等语言用内置变量TARGETARCH/TARGETVARIANT做交叉编译彻底摆脱模拟开销。从 examples/multiplatform 到 examples/multiplatform-cross-compile官方示例已经覆盖了最常用的两种场景照着修改即可快速接入自己的项目。【免费下载链接】earthlySuper simple build framework with fast, repeatable builds and an instantly familiar syntax – like Dockerfile and Makefile had a baby.项目地址: https://gitcode.com/gh_mirrors/ea/earthly创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
3个技巧搞定画游戏卡顿,面试必问的渲染优化实战 3个技巧搞定画游戏卡顿,面试必问的渲染优化实战 昨晚跑一个画游戏 Demo,画面刚加载完就卡成 PPT。控制台里报错一堆,StackTrace 长到拉不到底,全是 Invalid array length 和… · 2026/9/22 22:13:10
手绘汽车渲染卡顿?这份保姆级教程让你帧率翻倍 手绘汽车渲染卡顿?这份保姆级教程让你帧率翻倍 配置环境就卡半天,鼠标一拖模型直接掉帧到个位数,这种崩溃感做过图形界面开发的朋友都懂。很多新手拿到【手绘汽车】的项目源码,刚跑起来就发现渲染管线里藏着无数性能杀手,要么重新学一遍渲染原理,要么硬… · 2026/9/22 22:13:04
神舟十一号发射直播高并发优化实战: 最佳实践与数据对比 神舟十一号发射直播高并发优化实战: 最佳实践与数据对比 刚毕业时我也卡在这:Python 语法背得滚瓜烂熟, for 循环、字典操作样样会,但一接“神舟十一号发射直播”这种千万级并发的视频流项目,脑子直接死机。不是不懂代码,是不知道… · 2026/9/22 22:12:58
3个红潮网电影下载方案性能优化对比 3个红潮网电影下载方案性能优化对比 官方文档堆砌术语,读完还是不会调参?别急,直接看代码。 做红潮网电影下载这种高并发IO密集型任务,90%的坑都出在性能优化上。很多新手一上来就照抄博客里的单线程脚本,跑起来发现CPU占用低得可怜,带宽却跑… · 2026/9/23 2:20:00
NixOS 16.03 “Emu“ 发布说明全解读:核心升级、新增模块与破坏性变更迁移指南 NixOS 16.03 "Emu" 发布说明全解读:核心升级、新增模块与破坏性变更迁移指南 【免费下载链接】nixpkgs Nix Packages collection & NixOS 项目地址: https://gitcode.com/GitHub_Trending/ni/nixpkgs
NixOS 16.03(代号 "Emu&q… · 2026/9/23 2:20:00
巫妖王攻略实战:3个致命坑与最佳实践指南 巫妖王攻略实战:3个致命坑与最佳实践指南 复制来的代码跑不通,看着满屏的报错信息却不知从何下手?这种绝望感每个开发者都经历过。别再盲目调试了,真正能救你的不是玄学,而是基于巫妖王攻略的核心逻辑与最佳实践。今天不聊虚的,直接拆解那些让新手崩溃… · 2026/9/23 2:20:00
怎么卖二手东西源码解析:3步搞定核心逻辑避坑指南 怎么卖二手东西源码解析:3步搞定核心逻辑避坑指南 官方文档动辄几百页,读起来让人昏昏欲睡,根本抓不住重点。想搞懂怎么卖二手东西背后的技术实现,光看文档是行不通的,必须直接上源码解析。很多开发者卡在“为什么我的上架接口总是报错”,其实问题出在… · 2026/9/23 2:19:54
基于YOLOv8的智慧工厂危险区域闯入识别系统:完整源码、数据集与可视化界面 简介:这份资源面向计算机、人工智能、自动化等专业的在校学生与教师,以及需要完成毕设、课程设计或大作业的学习者,提供一套基于YOLOv8的智慧工厂危险区域闯入识别完整方案。项目围绕目标检测与计算机视觉展开,可用于工厂安全监控… · 2026/9/23 2:19:54
YOLO数据增强实战:六种方法同步更新txt标注坐标 简介:这是一份面向YOLO目标检测训练场景的数据增强工具包,主要解决已标注数据集样本不足、场景单一的问题,适合正在使用YOLO系列模型、需要扩充训练集的研究者与工程人员。资源以Python脚本为核心,围绕.txt格式标注文件实现旋转、… · 2026/9/23 2:19:54
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29