You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Spring Boot构建linux/amd64与linux/arm64多架构原生镜像?

为Spring Boot应用构建多架构原生镜像并通过GitHub Action推送至Docker Hub

核心思路

借助Spring Boot的spring-boot:build-image命令结合GraalVM原生镜像能力,搭配GitHub Action的多平台运行环境与Docker Buildx,分别构建linux/amd64、linux/arm64架构的原生镜像,最后合并推送至Docker Hub。

步骤1:确认项目原生构建配置

确保项目pom.xml中已激活native Profile,Spring Boot Starter Parent默认集成了GraalVM相关依赖,只需保证Profile可正常启用即可。

步骤2:编写GitHub Action工作流

在项目根目录创建.github/workflows/build-native-images.yml文件,内容如下:

name: Build Multi-Arch Native Spring Boot Images

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4

      - name: 配置QEMU(支持交叉编译)
        uses: docker/setup-qemu-action@v3

      - name: 初始化Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: 登录Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_TOKEN }}

      - name: 配置GraalVM环境
        uses: graalvm/setup-graalvm@v1
        with:
          java-version: '17' # 替换为你的项目Java版本
          distribution: 'graalvm'
          github-token: ${{ secrets.GITHUB_TOKEN }}

      - name: 构建并推送linux/amd64原生镜像
        run: |
          mvn spring-boot:build-image -Pnative \
            -Dspring-boot.build-image.imageName=你的DockerHub用户名/你的应用名:latest-amd64 \
            -Dspring-boot.build-image.platform=linux/amd64
          docker push 你的DockerHub用户名/你的应用名:latest-amd64

      - name: 构建并推送linux/arm64原生镜像
        run: |
          mvn spring-boot:build-image -Pnative \
            -Dspring-boot.build-image.imageName=你的DockerHub用户名/你的应用名:latest-arm64 \
            -Dspring-boot.build-image.platform=linux/arm64
          docker push 你的DockerHub用户名/你的应用名:latest-arm64

      - name: 创建并推送多架构镜像清单
        run: |
          docker manifest create 你的DockerHub用户名/你的应用名:latest \
            --amend 你的DockerHub用户名/你的应用名:latest-amd64 \
            --amend 你的DockerHub用户名/你的应用名:latest-arm64
          docker manifest push 你的DockerHub用户名/你的应用名:latest

关键说明

  • GraalVM环境配置:通过官方graalvm/setup-graalvm Action自动搭建对应版本的GraalVM环境,无需手动安装。
  • 指定构建平台:通过-Dspring-boot.build-image.platform参数明确目标架构,QEMU会提供交叉编译所需的模拟支持。
  • 多架构镜像合并:先推送单个架构的镜像,再通过Docker Manifest将它们合并为一个多架构镜像,用户拉取时会自动匹配本地系统架构。

注意事项

  • 在GitHub仓库的Secrets中配置DOCKER_HUB_USERNAME和DOCKER_HUB_TOKEN,用于Docker Hub的身份验证。
  • 将代码中的你的DockerHub用户名和你的应用名替换为实际信息,Java版本需与项目使用的版本保持一致。

内容的提问来源于stack exchange,提问作者Giovanni Lovato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 09:24:59