ARG IMAGE_VERSION ARG JAVA_VERSION_MAJOR FROM docker.io/rockdrilla/graalvm-debian:base-${IMAGE_VERSION} AS base FROM docker.io/rockdrilla/graalvm-debian:jdk-${JAVA_VERSION_MAJOR}-${IMAGE_VERSION} AS jdk ## --- FROM jdk as jdk-to-jre SHELL [ "/bin/sh", "-ec" ] RUN rm -rf /jre ; \ jlink \ --add-modules ALL-MODULE-PATH \ --no-man-pages \ --no-header-files \ --compress=1 \ --output /jre \ ; \ cd /jre ; \ rm -rf \ lib/security/cacerts \ lib/security/krb5.conf \ ; \ cp -f "${JAVA_HOME}/lib/security/public_suffix_list.dat" lib/security/ ; \ ln -sv /etc/ssl/certs/java/cacerts lib/security/ ; \ ln -sv /etc/krb5.conf lib/security/ ; \ chmod -R go-w /jre RUN rm -rf "${JAVA_HOME}" ; \ mkdir -p "${JAVA_HOME}" ; \ tar -C /jre -cf - . | tar -C "${JAVA_HOME}" -xf - ; \ rm -rf /jre ; \ find "${JAVA_HOME}/" -name '*.so' -exec dirname '{}' '+' \ | sort -uV > ld.so.conf ; \ chmod -R go-w "${JAVA_HOME}/" WORKDIR ${JAVA_HOME} ## https://github.com/docker-library/openjdk/issues/212#issuecomment-420979840 ## https://openjdk.java.net/jeps/341 RUN ldconfig ; \ java -Xshare:dump RUN find /tmp/ -mindepth 1 -ls -delete ## deduplicate (!) RUN apt-install.sh jdupes ; \ apt-clean.sh ; \ echo ; \ du -xd1 "${PWD}/" | sort -Vk2 ; \ echo ; \ jdupes -1LSpr "${PWD}/" ; \ echo ; \ du -xd1 "${PWD}/" | sort -Vk2 ; \ echo ## --- FROM base AS jre SHELL [ "/bin/sh", "-ec" ] COPY /Dockerfile.jre /usr/local/share/ COPY /scripts/* /usr/local/sbin/ ENV JAVA_HOME=/opt/graalvm COPY --from=jdk-to-jre "${JAVA_HOME}/" "${JAVA_HOME}/" RUN ln -s "${JAVA_HOME}/ld.so.conf" /etc/ld.so.conf.d/graalvm.conf ; \ ldconfig ENV PATH="${JAVA_HOME}/bin:${PATH}" \ MALLOC_ARENA_MAX=4 ## qa/smoke RUN set -xv ; java -version ; \ find /tmp/ -mindepth 1 -ls -delete