diff --git a/Dockerfile b/Dockerfile index 372ddff8..186bee70 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,6 @@ +ARG TARGETPLATFORM=linux/amd64 +ARG BUILDPLATFORM=${TARGETPLATFORM} + FROM --platform=${BUILDPLATFORM} mcr.microsoft.com/dotnet/sdk:6.0 AS builder ARG TARGETPLATFORM @@ -9,17 +12,18 @@ COPY . ./ # Build and package release based on target architecture RUN dotnet build -v m WORKDIR /TShock/TShockLauncher -RUN case "${TARGETPLATFORM}" in \ - "linux/amd64") export ARCH="linux-x64" \ - ;; \ - "linux/arm64") export ARCH="linux-arm64" \ - ;; \ - "linux/arm/v7") export ARCH="linux-arm" \ - ;; \ - "windows/amd64") export ARCH="win-x64" \ - ;; \ - *) echo "Error: Unsupported platform ${TARGETPLATFORM}" && exit 1 \ - ;; \ +RUN \ + case "${TARGETPLATFORM}" in \ + "linux/amd64") export ARCH="linux-x64" \ + ;; \ + "linux/arm64") export ARCH="linux-arm64" \ + ;; \ + "linux/arm/v7") export ARCH="linux-arm" \ + ;; \ + "windows/amd64") export ARCH="win-x64" \ + ;; \ + *) echo "Error: Unsupported platform ${TARGETPLATFORM}" && exit 1 \ + ;; \ esac && \ dotnet publish -o output/ -r "${ARCH}" -v m -f net6.0 -c Release -p:PublishSingleFile=true --self-contained false diff --git a/docs/docker.md b/docs/docker.md index 5b8ce54b..89fea25b 100644 --- a/docs/docker.md +++ b/docs/docker.md @@ -1,12 +1,45 @@ # Docker Setup -## Build Image: -`docker build -t tshock .` -## and run: +In order to run TShock in a docker container, you would need to have mountpoints for + - `/tshock` (TShock config files, logs and crash reports) + - `/worlds` + - `/plugins` + - `/server` (optional, if you want to mount TShock's cwd) + +These folders can be mounted using `-v :` + +Open ports can also be passed through using `-p :`. + - `7777` for Terraria + - `7878` for TShock's REST API + +For Example: ```bash +# Building the image +docker build -t tshock:linux-x64 --build-arg TARGETPLATFORM=linux-x64 . + +# Running the image docker run -p 7777:7777 -p 7878:7878 \ - -v :/tshock \ - -v :/worlds \ - -v :/plugins \ - --rm -it tshock [-world /worlds/] + -v /home/cider/tshock/:/tshock \ + -v /home/cider/.local/share/Terraria/Worlds:/worlds \ + -v /home/cider/tshock/plugins:/plugins \ + --rm -it tshock:linux-x64 \ + -world /worlds/backflip.wld -motd "OMFG DOCKER" +``` + +## Building for Other Platforms + +Using `docker buildx`, you could build [multi-platform images](https://docs.docker.com/build/building/multi-platform/) for TShock. + +For Example: +```bash +# Building the image using buildx and loading it into docker +sudo docker buildx build -t tshock:linux-arm64 --platform linux/arm64 --load . + +# Running the image +docker run -p 7777:7777 -p 7878:7878 \ + -v /home/cider/tshock/:/tshock \ + -v /home/cider/.local/share/Terraria/Worlds:/worlds \ + -v /home/cider/tshock/plugins:/plugins \ + --rm -it tshock:linux-arm64 \ + -world /worlds/backflip.wld -motd "ARM64 ftw" ``` \ No newline at end of file