Using micronuat gradle docker plugin to generate docker file with below gradle config
plugins {
id("com.github.johnrengelman.shadow") version "8.1.1"
id("io.micronaut.application") version "4.4.2"
id("io.micronaut.aot") version "4.4.2"
}
repositories {
mavenCentral()
}
dependencies {
....
}
application {
mainClass = "fete.bird.Assessment"
}
java {
sourceCompatibility = JavaVersion.toVersion("21")
targetCompatibility = JavaVersion.toVersion("21")
}
graalvmNative.toolchainDetection = false
micronaut {
runtime("netty")
testRuntime("junit5")
processing {
incremental(true)
annotations("fete.bird.*")
}
aot {
optimizeServiceLoading = false
convertYamlToJava = false
precomputeOperations = true
cacheEnvironment = true
optimizeClassLoading = true
deduceEnvironment = true
optimizeNetty = true
replaceLogbackXml = true
}
}
tasks.named<io.micronaut.gradle.docker.NativeImageDockerfile>("dockerfileNative") {
jdkVersion = "21"
baseImage("gcr.io/distroless/static-debian12")
args("-H:+StaticExecutableWithDynamicLibC")
}
When running ./gradlew dockerfileNative
it generates the below docker file. I did run ./gradlew nativeCompile
before running dockerfileNative
FROM ghcr.io/graalvm/native-image-community:21-ol9 AS graalvm
WORKDIR /home/app
COPY --link layers/libs /home/app/libs
COPY --link layers/app /home/app/
COPY --link layers/resources /home/app/resources
RUN mkdir /home/app/config-dirs
RUN mkdir -p /home/app/config-dirs/generateResourcesConfigFile
RUN mkdir -p /home/app/config-dirs/com.fasterxml.jackson.core/jackson-databind/2.15.2
RUN mkdir -p /home/app/config-dirs/io.netty/netty-common/4.1.80.Final
RUN mkdir -p /home/app/config-dirs/io.grpc/grpc-netty/1.51.0
RUN mkdir -p /home/app/config-dirs/ch.qos.logback/logback-classic/1.4.9
RUN mkdir -p /home/app/config-dirs/org.postgresql/postgresql/42.3.4
RUN mkdir -p /home/app/config-dirs/com.zaxxer/HikariCP/5.0.1
COPY --link config-dirs/generateResourcesConfigFile /home/app/config-dirs/generateResourcesConfigFile
COPY --link config-dirs/com.fasterxml.jackson.core/jackson-databind/2.15.2 /home/app/config-dirs/com.fasterxml.jackson.core/jackson-databind/2.15.2
COPY --link config-dirs/io.netty/netty-common/4.1.80.Final /home/app/config-dirs/io.netty/netty-common/4.1.80.Final
COPY --link config-dirs/io.grpc/grpc-netty/1.51.0 /home/app/config-dirs/io.grpc/grpc-netty/1.51.0
COPY --link config-dirs/ch.qos.logback/logback-classic/1.4.9 /home/app/config-dirs/ch.qos.logback/logback-classic/1.4.9
COPY --link config-dirs/org.postgresql/postgresql/42.3.4 /home/app/config-dirs/org.postgresql/postgresql/42.3.4
COPY --link config-dirs/com.zaxxer/HikariCP/5.0.1 /home/app/config-dirs/com.zaxxer/HikariCP/5.0.1
RUN native-image --exclude-config .*/libs/netty-handler-4.1.111.Final.jar ^/META-INF/native-image/.* --exclude-config .*/libs/grpc-netty-1.64.0.jar ^/META-INF/native-image/.* --exclude-config .*/libs/netty-buffer-4.1.111.Final.jar ^/META-INF/native-image/.* --exclude-config .*/libs/netty-common-4.1.111.Final.jar ^/META-INF/native-image/.* --exclude-config .*/libs/netty-codec-http-4.1.111.Final.jar ^/META-INF/native-image/.* --exclude-config .*/libs/netty-transport-4.1.111.Final.jar ^/META-INF/native-image/.* --exclude-config .*/libs/netty-codec-http2-4.1.111.Final.jar ^/META-INF/native-image/.* -cp /home/app/libs/*.jar:/home/app/resources:/home/app/application.jar --no-fallback -o application -H:ConfigurationFileDirectories=/home/app/config-dirs/generateResourcesConfigFile,/home/app/config-dirs/com.fasterxml.jackson.core/jackson-databind/2.15.2,/home/app/config-dirs/io.netty/netty-codec-http/4.1.80.Final,/home/app/config-dirs/io.netty/netty-common/4.1.80.Final,/home/app/config-dirs/io.netty/netty-buffer/4.1.80.Final,/home/app/config-dirs/io.netty/netty-transport/4.1.80.Final,/home/app/config-dirs/io.netty/netty-handler/4.1.80.Final,/home/app/config-dirs/io.netty/netty-codec-http2/4.1.80.Final,/home/app/config-dirs/io.grpc/grpc-netty/1.51.0,/home/app/config-dirs/ch.qos.logback/logback-classic/1.4.9,/home/app/config-dirs/org.postgresql/postgresql/42.3.4,/home/app/config-dirs/com.zaxxer/HikariCP/5.0.1 fete.bird.Assessment -H:+StaticExecutableWithDynamicLibC
FROM gcr.io/distroless/static-debian12
EXPOSE 8080
COPY --link --from=graalvm /home/app/application /app/application
ENTRYPOINT ["/app/application", "-H:+StaticExecutableWithDynamicLibC"]
However, config-dirs
and layers
are not present. How to generate those directory. If I run a docker build for this file, I faced the folder not found issue