diff --git a/build/package/Dockerfile b/build/package/Dockerfile new file mode 100644 index 0000000..81d6011 --- /dev/null +++ b/build/package/Dockerfile @@ -0,0 +1,35 @@ +# MC Java Docker container +FROM debian:stable-slim + +ARG TARGETOS +ARG TARGETARCH +ARG TARGETVARIANT + +RUN apt-get update +RUN apt-get install -y curl openjdk-17-jre-headless + +RUN groupadd -g 1000 minecraft &&\ + useradd -r -s /bin/false -u 1000 -g 1000 -m minecraft + +RUN mkdir -m 755 /data + #chown minecraft:minecraft /data + +RUN curl -sfL -o /server.jar https://launcher.mojang.com/v1/objects/c8f83c5655308435b3dcf03c06d9fe8740a77469/server.jar + +COPY scripts/start.sh /start.sh + +RUN chmod +x /start.sh +RUN echo "eula=true" > eula.txt + +ENV MEMORY="1G" + +#USER minecraft +EXPOSE 25565/tcp +CMD ["/start.sh"] + + +# To build +# docker buildx build \ + # -t mc-server \ + # -f ./build/package/Dockerfile . \ + # --load \ No newline at end of file diff --git a/scripts/start.sh b/scripts/start.sh new file mode 100644 index 0000000..c523fb2 --- /dev/null +++ b/scripts/start.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +umask 0002 +chmod g+w /data + +# Utils +isTrue() { + result= + + case $1 in + true | on) + result=0 + ;; + *) + result=1 + ;; + esac + + return ${result} +} + +# Copy content from /run/data/ to /data/. +# This is useful for mounting read-only filesystem such as ConfigMaps in Kubernetes. +if [ -d /run/data ]; then + cp -rf /run/data/ / +fi + +# Environment variables +INIT_MEMORY=${INIT_MEMORY:-${MEMORY}} +MAX_MEMORY=${MAX_MEMORY:-${MEMORY}} + +JVM_XX_OPTS=${JVM_XX_OPTS:-"-XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1"} +JVM_OPTS="-Xms$INIT_MEMORY -Xmx$MAX_MEMORY" +D_OPTS=${D_OPTS:-"-DPaper.IgnoreJavaVersion=true -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true"} + +if isTrue "$EULA"; then + D_OPTS="$D_OPTS -Dcom.mojang.eula.agree=true" +fi + +# Start the server +# shellcheck disable=SC2086 disable=SC2068 +exec java $JVM_XX_OPTS $JVM_OPTS $D_OPTS -jar /server.jar $@ \ No newline at end of file