diff --git a/Dockerfile.customJRE b/Dockerfile.customJRE new file mode 100644 index 0000000..c7dab28 --- /dev/null +++ b/Dockerfile.customJRE @@ -0,0 +1,41 @@ +FROM alpine:3.17 as BUILD +RUN apk add --no-cache binutils maven openjdk17-jdk +WORKDIR /build +COPY pom.xml . +RUN mvn dependency:go-offline +COPY src/ /build/src/ +RUN export BUILD_DIRECTORY="$(mvn help:evaluate -Dexpression='project.build.directory' -q -DforceStdout)" && \ + export BUILD_NAME="$(mvn help:evaluate -Dexpression='project.build.finalName' -q -DforceStdout)" && \ + mvn package && \ + mkdir unpacked && \ + cd unpacked && \ + unzip /build/target/${BUILD_NAME}.jar && \ + cd .. && \ + mkdir -p /build/unpacked/BOOT-INF/lib && \ + cp ${BUILD_DIRECTORY}/${BUILD_NAME}.lib/*.jar /build/unpacked/BOOT-INF/lib/ && \ + jdeps \ + --ignore-missing-deps \ + --print-module-deps \ + -q \ + --recursive \ + --multi-release 17 \ + --class-path="./unpacked/BOOT-INF/lib/*" \ + --module-path="./unpacked/BOOT-INF/lib/*" \ + ${BUILD_DIRECTORY}/${BUILD_NAME}.jar > ${BUILD_DIRECTORY}/deps.info && \ + jlink \ + --verbose \ + --add-modules $(cat ${BUILD_DIRECTORY}/deps.info) \ + --strip-debug \ + --no-man-pages \ + --no-header-files \ + --compress=2 \ + --output ./jre && \ + echo -e "#!/bin/sh\n" \ + "/opt/jre/bin/java -jar ${BUILD_NAME}.jar" \ + > ${BUILD_DIRECTORY}/run.sh && \ + chmod 700 ${BUILD_DIRECTORY}/run.sh +FROM alpine:3.17 +COPY --from=BUILD /build/target/ /opt/target/ +COPY --from=BUILD /build/jre /opt/jre +WORKDIR /opt/target +ENTRYPOINT ["./run.sh"] diff --git a/README.md b/README.md index 6b122ee..fd1e998 100644 --- a/README.md +++ b/README.md @@ -6,3 +6,4 @@ All compose files assume that the containers are run behind a reverse proxy, tha * **gitea** - Git repository server * **thea** - Online IDE * **wallabag** - Read later app +* **Dockerfile.customJRE** - Create a image from a maven java project with custom JRE