没有arm64 cpu, 在本地amd64环境上如何制作arm64架构下可用的镜像

Docker Buildx 并启用 QEMU 用户态模拟

一句话流程:

  1. 在 amd64 机器上安装 qemu-user-static 并注册 binfmt

    bash 复制代码
    sudo apt install -y qemu qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager
    usermod -aG libvirt,kvm root
    sudo apt install -y qemu-user-static binfmt-support
    docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
  2. 创建并启用一个支持多平台的 buildx 构建器

    bash 复制代码
    docker buildx create --name cross-builder --driver docker-container --use
    docker buildx inspect --bootstrap
  3. 写 Dockerfile 时把基础镜像写成 多平台官方镜像 (如 python:3.11-slim),或者自己在 FROM 后加 --platform=$TARGETPLATFORM,让 buildx 自动拉对应架构的基础层。

  4. 执行跨平台构建

    bash 复制代码
    docker buildx build \
      --platform linux/arm64 \
      -t your.repo/app:arm64 \
      --push .          # 或 --load 本地加载(单平台)
      
      
      # 或者 (我本人使用的方法)
      docker build -t test1 --platform linux/arm64 .
  5. 构建完成后,可以直接运行,它就是一个arm64镜像

bash 复制代码
root@76:~# uname -m
x86_64

root@76:~# docker run -it test1:latest uname -m
WARNING: The requested image's platform (linux/arm64) does not match the detected host platform (linux/amd64/v2) and no specific platform was requested
aarch64

尽管有一个warning信息,但是在最后你可以看到一个表示cpu构架是arm64的 aarch64信息

关键点

  • 不是"amd64 的 Docker"本身能编译出 arm64,而是 buildx + QEMU 把 arm64 指令集翻译成 amd64 指令,交叉编译/交叉打包完成。
  • 如果 Dockerfile 里包含 RUN go buildnpm install 等编译步骤,只要基础镜像提供的是跨平台工具链(Go、Node、Rust 等都支持),就能直接编译出 arm64 二进制;否则需要显式安装交叉工具链。
  • 性能比原生慢 5--10 倍,但只做打包 CI 完全够用;生产镜像建议 push 到仓库后,在 arm64 机器上再跑测试。

结论:
amd64 主机完全可以构建出 arm64 原生镜像, 并且也可以运行,只要用 Docker Buildx 并提前装好 QEMU 用户态模拟即可。

相关推荐
IT_陈寒1 小时前
Vite热更新失效?可能你在用Windows
前端·人工智能·后端
椰椰椰耶3 小时前
[SpringCloud][14]OpenFeign参数传递方法
后端·spring·spring cloud
onething3653 小时前
Spring Boot + Spring AI 从入门到实战:7天转型计划 Day 3 —— 消息表设计 + 级联删除 + 事务管理
人工智能·后端
荣江3 小时前
Hermes Agent 代码仓库打包工具使用指南(repomix-rs 高性能版)
后端
王某某人3 小时前
LangChain4j 入门:Java 程序员的第一个 AI 对话程序
人工智能·后端
码农刚子3 小时前
从零开始:在 Windows 服务器上部署 Node.js 项目(小白实战教程)
后端·node.js
Cache技术分享3 小时前
435. Java 日期时间 API - Clock 灵活获取当前时间
前端·后端
浩子coding3 小时前
通过 Spring AI Alibaba 源码,看如何玩转 ReAct 智能体范式
人工智能·后端
星浩AI3 小时前
合规项目大模型如何部署?硬件选型 + vLLM/LMDeploy 实战
pytorch·后端·llm
摇滚侠3 小时前
SpringMVC 入门到实战 DispatcherServlet 源码解读 92-95
java·后端·spring·maven·intellij-idea