# ---------------------------------- # Pterodactyl Core Dockerfile # Environment: Java # Minimum Panel Version: 1.7.0 # ---------------------------------- # Copyright (c) 2021 Matthew Penner # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # ---------------------------------- ## HOWTO: ## debug image with local bash session: ## ## docker run -it --entrypoint bash zogg/graalvm:latest ## # 2023-08-14 # -------------------------------------------------- # Intermediary Build # -------------------------------------------------- FROM bitnami/minideb:latest AS build # Arguments from Docker build ARG TARGETPLATFORM ARG TARGETOS ARG TARGETARCH ARG BUILDPLATFORM ARG BUILDOS ARG BUILDARCH ARG BUILDVARIANT ARG TZ ARG CONCURRENCY # Arguments to build specified version ARG GRAALVM_YEAR_VERSION=20 ARG GRAALVM_MAJOR_VERSION=0 ARG GRAALVM_MINOR_VERSION=2 ARG JAVA_VERSION=20 ARG SDKMAN=/root/.sdkman # Define environement variables ENV GRAALVERSION $GRAALVM_YEAR_VERSION.$GRAALVM_MAJOR_VERSION.$GRAALVM_MINOR_VERSION-graal # Update & upgrade APK + Install required packages USER root WORKDIR / RUN set -eux \ && apt update \ && apt-get install -y --no-install-recommends locales p11-kit openssl tar sqlite3 fontconfig tzdata bash wget curl zip unzip ca-certificates iproute2 \ && echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen \ && locale-gen en_US.UTF-8 \ && rm -rf /var/lib/apt/lists/* \ && apt autoremove -y # Set bash as default shell interpreter SHELL ["/bin/bash", "-c"] # Used by Docker build to set platform dependent variables COPY platform.sh . RUN chmod +x platform.sh \ && ./platform.sh \ && rm -rf platform.sh # Copy Pterodactyl necessary files COPY docker-java-home /usr/local/bin/docker-java-home COPY bashrc /home/container/.bashrc COPY entrypoint.sh /entrypoint.sh # Setup execution rights RUN chmod +x /usr/local/bin/docker-java-home \ && chmod +x /entrypoint.sh # Install SDKMAN! & GraalVM specified version RUN curl -s "https://get.sdkman.io" | bash \ && echo "sdkman_auto_answer=true" > $SDKMAN/etc/config \ && echo "sdkman_auto_selfupdate=false" >> $SDKMAN/etc/config \ && echo "sdkman_insecure_ssl=true" >> $SDKMAN/etc/config \ && chmod +x $SDKMAN/bin/sdkman-init.sh RUN source "$SDKMAN/bin/sdkman-init.sh" \ && sdk install java $GRAALVERSION # Copy GraalVM files to /usr/java/default RUN mkdir -p /usr/java/default/ \ && cp -rfLu $SDKMAN/candidates/java/$GRAALVERSION/. /usr/java/default/ # Uninstall SDKMAN! RUN source "$SDKMAN/bin/sdkman-init.sh" \ && sdk uninstall java $GRAALVERSION --force \ && sdk flush \ && rm -rf $SDKMAN # Set GraalVM as default Java interpreter RUN ln -sf /usr/java/default /usr/java/latest \ && for bin in "/usr/java/default/bin/"*; do base="$(basename "$bin")"; \ [ ! -e "/usr/bin/$base" ]; \ update-alternatives --install "/usr/bin/$base" "$base" "$bin" 20000; \ done # -------------------------------------------------- # Final Docker Image # -------------------------------------------------- FROM bitnami/minideb:latest USER root WORKDIR / # Copy from build COPY --from=build /usr/bin /usr/bin/ COPY --from=build /usr/lib /usr/lib/ COPY --from=build /usr/lib64 /usr/lib64/ COPY --from=build /usr/java/default /usr/java/default/ COPY --from=build /usr/local/bin/docker-java-home /usr/local/bin/ COPY --from=build /home/container/.bashrc /home/container/ COPY --from=build /entrypoint.sh / # Set bash as default shell interpreter SHELL ["/bin/bash", "-c"] # Setup 'container' user and group (with home folder) RUN useradd -d /home/container -m container -s /bin/bash -p 'none' \ && passwd -d container # Disable Watchtower image check LABEL com.centurylinklabs.watchtower.enable false # Define author's informations LABEL org.opencontainers.image.title "GraalVM Special Edition" LABEL author "Olivier Le Bris" LABEL maintainer "tech@zogg.fr" LABEL org.opencontainers.image.source "https://zogg.fr" LABEL org.opencontainers.image.licenses MIT # Define environement variables ENV LANG C.UTF-8 ENV TZ $TZ ENV JAVA_HOME /usr/java/default ENV GRAALVERSION $GRAALVM_YEAR_VERSION.$GRAALVM_MAJOR_VERSION.$GRAALVM_MINOR_VERSION-graal ENV GRAALVM_YEAR_VERSION $GRAALVM_YEAR_VERSION ENV GRAALVM_MAJOR_VERSION $GRAALVM_MAJOR_VERSION ENV GRAALVM_MINOR_VERSION $GRAALVM_MINOR_VERSION ENV JAVA_VERSION $JAVA_VERSION ENV PATH $JAVA_HOME/bin:${PATH} # Setup Pterodactyl necessary context USER container WORKDIR /home/container ENV USER container ENV HOME /home/container # Run Pterodactyl entrypoint CMD ["/bin/bash", "/entrypoint.sh"]