From d7da885a8fab10fad77aff1d5d1c0868fcf78750 Mon Sep 17 00:00:00 2001 From: AeonLucid Date: Wed, 30 Sep 2020 23:34:12 +0200 Subject: [PATCH] Multiarch dockerfile --- .github/workflows/docker.yml | 2 +- Dockerfile | 29 +++++++++++++++++----- src/Impostor.Server/Impostor.Server.csproj | 1 - 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index cf1b936..54e67cb 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -67,6 +67,6 @@ jobs: with: context: . file: ./Dockerfile - platforms: linux/amd64,linux/arm/v7,linux/arm64 + platforms: linux/amd64,linux/arm/v7 push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.prep.outputs.tags }} diff --git a/Dockerfile b/Dockerfile index 472694a..656237d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,9 @@ -FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build +FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build + +# See for all possible platforms +# https://github.com/containerd/containerd/blob/master/platforms/platforms.go#L17 +ARG TARGETARCH + WORKDIR /source # Copy csproj and restore. @@ -6,17 +11,29 @@ COPY src/Impostor.Server/Impostor.Server.csproj ./src/Impostor.Server/Impostor.S COPY src/Impostor.Shared/Impostor.Shared.csproj ./src/Impostor.Shared/Impostor.Shared.csproj COPY submodules/Hazel-Networking/Hazel/Hazel.csproj ./submodules/Hazel-Networking/Hazel/Hazel.csproj -RUN dotnet restore -r linux-musl-x64 ./src/Impostor.Server/Impostor.Server.csproj && \ - dotnet restore -r linux-musl-x64 ./src/Impostor.Shared/Impostor.Shared.csproj && \ - dotnet restore -r linux-musl-x64 ./submodules/Hazel-Networking/Hazel/Hazel.csproj +RUN case "$TARGETARCH" in \ + amd64) NETCORE_PLATFORM='linux-x64';; \ + arm64) NETCORE_PLATFORM='linux-arm64';; \ + arm) NETCORE_PLATFORM='linux-arm';; \ + *) echo "unsupported architecture"; exit 1 ;; \ + esac && \ + dotnet restore -r "$NETCORE_PLATFORM" ./src/Impostor.Server/Impostor.Server.csproj && \ + dotnet restore -r "$NETCORE_PLATFORM" ./src/Impostor.Shared/Impostor.Shared.csproj && \ + dotnet restore -r "$NETCORE_PLATFORM" ./submodules/Hazel-Networking/Hazel/Hazel.csproj # Copy everything else. COPY submodules/. ./submodules/ COPY src/. ./src/ -RUN dotnet publish -c release -o /app -r linux-musl-x64 --no-restore ./src/Impostor.Server/Impostor.Server.csproj +RUN case "$TARGETARCH" in \ + amd64) NETCORE_PLATFORM='linux-x64';; \ + arm64) NETCORE_PLATFORM='linux-arm64';; \ + arm) NETCORE_PLATFORM='linux-arm';; \ + *) echo "unsupported architecture"; exit 1 ;; \ + esac && \ + dotnet publish -c release -o /app -r "$NETCORE_PLATFORM" --no-restore ./src/Impostor.Server/Impostor.Server.csproj # Final image. -FROM mcr.microsoft.com/dotnet/core/runtime-deps:3.1-alpine +FROM mcr.microsoft.com/dotnet/core/runtime-deps:3.1 WORKDIR /app COPY --from=build /app ./ EXPOSE 22023/udp diff --git a/src/Impostor.Server/Impostor.Server.csproj b/src/Impostor.Server/Impostor.Server.csproj index 0387f84..617d290 100644 --- a/src/Impostor.Server/Impostor.Server.csproj +++ b/src/Impostor.Server/Impostor.Server.csproj @@ -3,7 +3,6 @@ Exe netcoreapp3.1 - win-x64;linux-x64;linux-musl-x64 true Impostor.Server Impostor.Server -- 2.39.5