docker-minecraft/Dockerfile

49 lines
1.4 KiB
Docker

# Args
ARG MINECRAFT_VERSION="1.16.5"
ARG FORGE_VERSION="36.2.26"
ARG JRE_VERSION="openjdk8-jre"
ARG UID=1520
ARG USER=minecraft
ARG GID=1520
ARG GROUP=minecraft
# The first stage just builds up the modpack
FROM alpine:latest AS build
# Use all of our arguments
ARG MINECRAFT_VERSION
ARG FORGE_VERSION
ARG JRE_VERSION
# Build us up the basics of the Minecraft server environment
COPY start-server.sh /minecraft/start-server.sh
WORKDIR /minecraft
RUN apk add curl "${JRE_VERSION}" &&\
curl -L "https://files.minecraftforge.net/maven/net/minecraftforge/forge/${MINECRAFT_VERSION}-${FORGE_VERSION}/forge-${MINECRAFT_VERSION}-${FORGE_VERSION}-installer.jar" -o installer.jar &&\
java -jar installer.jar --installServer &&\
echo "eula=true" > eula.txt &&\
rm installer.jar installer.jar.log && \
ln -s "forge-${MINECRAFT_VERSION}-${FORGE_VERSION}.jar" server.jar
# Stuff them in a smaller container with fewer layers
FROM alpine:latest AS final
# Use only a subset of arguments
ARG JRE_VERSION
ARG UID
ARG USER
ARG GID
ARG GROUP
# Build the thing up
RUN apk add bash curl findutils rsync screen "${JRE_VERSION}"
WORKDIR /minecraft
COPY --from=build /minecraft .
RUN addgroup -g "${GID}" "${GROUP}" && \
adduser -h /minecraft -s /bin/sh -D -H -u "${UID}" -G "${GROUP}" "${USER}" && \
chown "${USER}:${GROUP}" /minecraft
USER $USER
CMD [ "bash", "start-server.sh" ]
EXPOSE 25565