From 51fdd7e8a51318e9e03fd3e09c81aa3434d53b3c Mon Sep 17 00:00:00 2001 From: Daniel Quinlan Date: Mon, 16 Jan 2023 16:56:31 -0800 Subject: [PATCH] move builds steps inside Dockerfile - add build stage from #1, and extend - optionally build from source. COMPILE=true - automate copying build artifact from ci.opencollab.dev. COMPILE=false - update baseimages to use eclipse-temurin as openjdk image is deprecated - run as nobody, not root (security) - add docker-compose.yml - update docker/README.md --- docker-compose.yml | 22 ++++++++++++++++++++++ docker/Dockerfile | 33 ++++++++++++++++++++++++++++++--- docker/README.md | 23 ++++++++++++++++++----- 3 files changed, 70 insertions(+), 8 deletions(-) create mode 100644 docker-compose.yml diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..b0e505e --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,22 @@ +version: "3.5" + +services: + geyser-connect: + image: geyser-connect + container_name: geyser-connect + restart: "unless-stopped" + build: + context: . + dockerfile: docker/Dockerfile + args: + JDK_IMG: eclipse-temurin + JDK_VER: 17-jdk-alpine + MAVEN_VER: 3.8.7-eclipse-temurin-17-alpine + COMPILE: "false" # if false, fetch from repo + GC_VER: "latest" # if COMPILE=false + ports: + - 19132/udp + stdin_open: true # docker run -i + tty: true # docker run -t + volumes: + - $(pwd)/data:/gsc diff --git a/docker/Dockerfile b/docker/Dockerfile index 2415c64..a5c2ae2 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,5 +1,32 @@ -FROM openjdk:8-jre-slim -RUN mkdir /gsc +ARG JDK_IMG=eclipse-temurin +ARG JDK_VER=17-jdk-alpine +ARG MAVEN_VER=3.8.7-eclipse-temurin-17-alpine +# -=-=-=-=-=-=-=-=-=-=- +FROM maven:$MAVEN_VER AS build + +ARG COMPILE=false # if false, fetch from repo +# TODO workout correct URL for a specific version +#ARG GC_VER="1.0-SNAPSHOT" +#ARG GC_URL="https://repo.opencollab.dev/artifactory/maven-snapshots/org/geysermc/geyser-connect/$GC_VER/geyser-connect-${GC_VER}.jar" +ARG GC_VER="latest" +ARG GC_URL="https://ci.opencollab.dev//job/GeyserMC/job/GeyserConnect/job/master/lastSuccessfulBuild/artifact/target/GeyserConnect.jar" + +WORKDIR /target +COPY . . +RUN [ "$COMPILE" = "true" ] \ + && (echo "Compiling from source..." ; mvn package ) \ + || wget -O "/target/geyser-connect-${GC_VER}.jar" "${GC_URL}" +# Result is in /target/geyser-connect-(...).jar + +# -=-=-=-=-=-=-=-=-=-=- +FROM $JDK_IMG:$JDK_VER + +WORKDIR /app +COPY --from=build /target/geyser-connect-*.jar GeyserConnect.jar + WORKDIR /gsc +VOLUME ["/gsc"] +# do not run as root +USER nobody EXPOSE 19132/udp -CMD ["java", "-Xms1G", "-jar", "GeyserConnect.jar"] \ No newline at end of file +CMD ["java", "-Xms1G", "-jar", "/app/GeyserConnect.jar"] diff --git a/docker/README.md b/docker/README.md index 7ef8aff..7f371d9 100644 --- a/docker/README.md +++ b/docker/README.md @@ -1,10 +1,23 @@ # GeyserConnect using Docker -This contains the docker image and a basic way of running GeyserConnect +This contains the Docker image and a basic way of running GeyserConnect ## Setup -1. Download GeyserConnect to a subfolder called `data` -2. Build the docker file using `docker build -t geyser-connect .` -3. Start geyser using this: +1. Make a directory for data: `mkdir -m 1777 data` +2. Set the owner: `chown nobody data` + This matches the user that geyser-connect runs as inside the Docker + container. +3. Then use either `docker-compose` or `docker` below + +## Docker Compose +1. Build with `docker-compose build` +2. Start Geyser `docker-compose up -d` + +* To check logs `docker-compose logs` +* To stop `docker-compose down` + +## Docker +1. Build the Dockerfile using `docker build -t geyser-connect -f docker/Dockerfile .` +2. Start geyser using this: ``` docker run --name "geyser-c" -d --restart always -p 19132:19132/udp -v $(pwd)/data:/gsc geyser-connect -``` \ No newline at end of file +```