From 108b19970b640bb984b11cfb9c14f18e46b97f7b Mon Sep 17 00:00:00 2001 From: Joseph Goh Date: Sun, 23 Oct 2022 06:10:36 +0800 Subject: [PATCH] Add support for multi-platform builds with docker buildx - also added docs --- .dockerignore | 2 +- Dockerfile | 38 +++++++++++++++++++------------------- docs/_sidebar.md | 1 + docs/docker.md | 12 ++++++++++++ 4 files changed, 33 insertions(+), 20 deletions(-) create mode 100644 docs/docker.md diff --git a/.dockerignore b/.dockerignore index 002067b4..b20ac5b6 100644 --- a/.dockerignore +++ b/.dockerignore @@ -12,4 +12,4 @@ # but exclude build artifacts */bin/ -*/obj/ \ No newline at end of file +*/obj/ diff --git a/Dockerfile b/Dockerfile index 00a6f3e2..372ddff8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,32 +1,32 @@ +FROM --platform=${BUILDPLATFORM} mcr.microsoft.com/dotnet/sdk:6.0 AS builder -# Docker Instructions -# Build Image: -# docker build -t tshock . -# and run: -# docker run -p 7777:7777 -p 7878:7878 \ -# -v :/tshock \ -# -v :/worlds \ -# -v :/plugins \ -# --rm -it tshock -world /worlds/ - -FROM mcr.microsoft.com/dotnet/sdk:6.0 AS builder - -ARG ARCH=linux-x64 +ARG TARGETPLATFORM # Copy build context WORKDIR /TShock COPY . ./ -# Build and package release -RUN dotnet build +# Build and package release based on target architecture +RUN dotnet build -v m WORKDIR /TShock/TShockLauncher -RUN dotnet publish -o output/ -r ${ARCH} -f net6.0 -c Release -p:PublishSingleFile=true --self-contained false +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 # Runtime image -FROM mcr.microsoft.com/dotnet/runtime:6.0 AS runner +FROM --platform=${TARGETPLATFORM} mcr.microsoft.com/dotnet/runtime:6.0 AS runner WORKDIR /server COPY --from=builder /TShock/TShockLauncher/output ./ -RUN mkdir -p /tshock /worlds /plugins VOLUME ["/tshock", "/worlds", "/plugins"] EXPOSE 7777 7878 @@ -38,4 +38,4 @@ ENTRYPOINT [ \ "-crashdir", "/tshock/crashes", \ "-worldselectpath", "/worlds", \ "-additionalplugins", "/plugins" \ -] \ No newline at end of file +] diff --git a/docs/_sidebar.md b/docs/_sidebar.md index c352829e..56c82447 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -1,6 +1,7 @@ * [☕️⚡️ TShock documentation home](/) * [Changelog](/changelog.md) * [Command line parameters](/command-line-parameters.md) +* [Docker Setup](/docker.md) * Subsystems * [Tile providers](/tile-providers.md) diff --git a/docs/docker.md b/docs/docker.md new file mode 100644 index 00000000..5b8ce54b --- /dev/null +++ b/docs/docker.md @@ -0,0 +1,12 @@ +# Docker Setup + +## Build Image: +`docker build -t tshock .` +## and run: +```bash +docker run -p 7777:7777 -p 7878:7878 \ + -v :/tshock \ + -v :/worlds \ + -v :/plugins \ + --rm -it tshock [-world /worlds/] +``` \ No newline at end of file