我想创建一个多架构Docker映像,其中包含Micronaut应用程序的本机映像二进制文件。
运行./gradlew dockerfileNative
时,Micronaut使用多阶段构建生成Dockerfile
,以创建Micronaut应用程序的本机映像。
FROM ghcr.io/graalvm/native-image:ol7-java17-22.2.0 AS graalvm
WORKDIR /home/app
COPY layers/libs /home/app/libs
COPY layers/classes /home/app/classes
COPY layers/resources /home/app/resources
COPY layers/application.jar /home/app/application.jar
RUN mkdir /home/app/config-dirs
COPY config-dirs/generateResourcesConfigFile /home/app/config-dirs/generateResourcesConfigFile
RUN native-image -cp /home/app/libs/*.jar:/home/app/resources:/home/app/application.jar --no-fallback -H:Name=application -J--add-exports=org.graalvm.nativeimage.builder/com.oracle.svm.core.configure=ALL-UNNAMED -J--add-exports=org.graalvm.nativeimage.builder/com.oracle.svm.core.jdk=ALL-UNNAMED -J--add-exports=org.graalvm.nativeimage.builder/com.oracle.svm.core.jni=ALL-UNNAMED -J--add-exports=org.graalvm.sdk/org.graalvm.nativeimage.impl=ALL-UNNAMED -H:ConfigurationFileDirectories=/home/app/config-dirs/generateResourcesConfigFile -H:Class=ch.onstructive.salessystem.Application
FROM frolvlad/alpine-glibc:alpine-3.12
RUN apk --no-cache update && apk add libstdc++
EXPOSE 8080
HEALTHCHECK CMD curl -s localhost:8080/endpoints/health | grep '"status":"UP"'
COPY --from=graalvm /home/app/application /app/application
ENTRYPOINT ["/app/application"]
Micronaut使用ghcr.io/graalvm/native-image:ol7-java17-22.2.0
作为多阶段构建的基础映像,检查我的MacBook M1上的基础映像,我发现基础映像支持arm64
架构。
❯ docker image inspect --format "{{.RepoTags}} {{.Architecture}}" ghcr.io/graalvm/native-image:ol7-java17-22.2.0
[ghcr.io/graalvm/native-image:ol7-java17-22.2.0] arm64
在第二阶段,Micronaut使用frolvlad/alpine-glibc:alpine-3.12
并将原生映像二进制文件复制到其中。这个Docker映像的问题是,它只支持amd64
,因此无法在Mac M1或其他基于arm64
的系统上运行。
❯ docker image inspect --format "{{.RepoTags}} {{.Architecture}}" frolvlad/alpine-glibc:alpine-3.12
[frolvlad/alpine-glibc:alpine-3.12] amd64
是否有一个替代的Docker映像,它同时支持arm64
(又名aarch64
)和amd64
?
1条答案
按热度按时间ycl3bljg1#
我在Micronaut Gradle插件文档中偶然发现了Docker图像
此映像适用于
arm64
和amd64
。