一、引入graalvm组件
在任意SpringBoot项目的基础上,引入以下graalvm的maven插件:
<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
</plugin>
二、使用SpringBoot插件构建镜像
spring-boot-maven-plugin
插件下的build-image
执行目标提供了一键生成镜像的功能,如下所示:
mvn -Pnative spring-boot:build-image
执行该命令需要先启动Docker,执行完成后,会自动生成Docker镜像。
在构建镜像的过程中,会自动下载
paketobuildpacks/builder-jammy-tiny
和paketobuildpacks/run-jammy-tiny
这两个辅助镜像。
ARM架构的MacBook电脑可能会执行失败,推测是当前(20231209)还没有完成适配,可暂时使用x86机器,或采用GraalVM插件完成构建。
spring-boot-maven-plugin
插件使用Buildpacks完成镜像构建。上述命令中的native
配置参数由spring-boot-starter-parent
提供,其引入了两个maven执行目标:spring-boot-maven-plugin
下的process-aot
和native-maven-plugin
下的add-reachability-metadata
,具体内容可详见spring-boot-starter-parent
的pom.xml文件。如果不想引入spring-boot-starter-parent
,也可手动配置process-ao
和add-reachability-metadata
。
执行完上述命令后,运行容器,并验证应用:
docker run --rm -p 8080:8080 app:1.0-SNAPSHOT
curl http://localhost:8080
三、使用GraalVM插件构建镜像
native-maven-plugin
插件下的compile
执行目标提供了一键生成二进制可执行文件的功能,如下所示:
mvn -Pnative native:compile
执行该命令需要先下载并配置参考GraalVM:首先,在GraalVM官方网站下载并安装GraalVM,随后设置JAVA_HOME环境变量。执行完成后,会在target目录下生成二进制可执行文件。
Windwos系统可能需要下载VisualStudio才能执行成功,可使用Linux或Mac操作系统完成构建。
运行可执行文件,并验证应用:
./target/app
curl http://localhost:8080
后续也可将该二进制可执行文件打入Docker镜像,当前暂不支持交叉编译,建议在Linux操作系统下完成构建。
参考文档