34 lines
1.7 KiB
Docker
34 lines
1.7 KiB
Docker
# syntax=docker/dockerfile:1
|
|
|
|
# Build: docker build -t datatransfer .
|
|
# Run: docker run -d --name datatransfer --restart unless-stopped -p 8080:8080 \
|
|
# -e AllowedHosts=transfer.example.ch \
|
|
# -e ForwardedHeaders__KnownNetworks__0=172.16.0.0/12 \
|
|
# datatransfer
|
|
#
|
|
# Put a reverse proxy with HTTPS in front of the container: browsers only allow the end-to-end encryption on HTTPS
|
|
# pages. Any setting of appsettings.json can be overridden with environment variables ("Section__Key").
|
|
|
|
# The build runs on the build machine's architecture. Its output is portable .NET code, so the same Dockerfile also
|
|
# produces arm64 images, e.g. for a Raspberry Pi: docker buildx build --platform linux/arm64 -t datatransfer .
|
|
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:10.0 AS build
|
|
WORKDIR /src
|
|
|
|
# Restore first, so the package layer stays cached until a project file changes. The SDK only restores the package with
|
|
# blazor.web.js when it sees .razor files, which are not copied yet, so it is requested explicitly.
|
|
COPY DataTransfer/DataTransfer.csproj DataTransfer/
|
|
COPY DataTransfer.Client/DataTransfer.Client.csproj DataTransfer.Client/
|
|
RUN dotnet restore DataTransfer/DataTransfer.csproj -p:RequiresAspNetWebAssets=true
|
|
|
|
COPY . .
|
|
RUN dotnet publish DataTransfer/DataTransfer.csproj -c Release -o /app --no-restore -p:UseAppHost=false
|
|
|
|
# Minimal runtime image: no shell or package manager, runs as the non-root user "app".
|
|
FROM mcr.microsoft.com/dotnet/aspnet:10.0-noble-chiseled AS final
|
|
WORKDIR /app
|
|
COPY --from=build /app .
|
|
|
|
# The base image sets ASPNETCORE_HTTP_PORTS=8080 and ASPNETCORE_ENVIRONMENT defaults to Production.
|
|
USER $APP_UID
|
|
EXPOSE 8080
|
|
ENTRYPOINT ["dotnet", "DataTransfer.dll"]
|