|
|
|
@ -1,7 +1,16 @@
|
|
|
|
|
# -- Build
|
|
|
|
|
# Use the same platform for the build image as the runtime image, so that it's easier
|
|
|
|
|
# to produce a self-contained assembly for the right platform.
|
|
|
|
|
FROM mcr.microsoft.com/dotnet/sdk:7.0-runtime AS build
|
|
|
|
|
# Specify the platform here so that we pull the SDK image matching the host platform,
|
|
|
|
|
# instead of the target platform specified during build by the `--platform` option.
|
|
|
|
|
# Use the .NET 8.0 preview because the `--arch` option is only available in that version.
|
|
|
|
|
# https://github.com/dotnet/dotnet-docker/issues/4388#issuecomment-1459038566
|
|
|
|
|
# TODO: switch images to Alpine once .NET 8.0 is released.
|
|
|
|
|
# Currently, the correct preview version is only available on Debian.
|
|
|
|
|
# https://github.com/dotnet/dotnet-docker/blob/main/samples/selecting-tags.md
|
|
|
|
|
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0-preview AS build
|
|
|
|
|
|
|
|
|
|
# Expose the target architecture set by the `docker build --platform` option, so that
|
|
|
|
|
# we can build the assembly for the correct platform.
|
|
|
|
|
ARG TARGETARCH
|
|
|
|
|
|
|
|
|
|
WORKDIR /build
|
|
|
|
|
|
|
|
|
@ -13,33 +22,24 @@ COPY DiscordChatExporter.Cli ./DiscordChatExporter.Cli
|
|
|
|
|
|
|
|
|
|
# Publish a self-contained assembly so we can use a slimmer runtime image
|
|
|
|
|
RUN dotnet publish DiscordChatExporter.Cli \
|
|
|
|
|
--configuration Release \
|
|
|
|
|
--self-contained \
|
|
|
|
|
--use-current-runtime \
|
|
|
|
|
--configuration Release \
|
|
|
|
|
--arch $TARGETARCH \
|
|
|
|
|
--output ./publish
|
|
|
|
|
|
|
|
|
|
# -- Run
|
|
|
|
|
# Use Alpine for the runtime image due to its smaller size.
|
|
|
|
|
# Use `runtime-deps` instead of `runtime` since we're running a self-contained assembly.
|
|
|
|
|
# https://github.com/dotnet/dotnet-docker/blob/main/samples/selecting-tags.md
|
|
|
|
|
FROM mcr.microsoft.com/dotnet/runtime-deps:7.0-alpine
|
|
|
|
|
|
|
|
|
|
# Alpine image doesn't include timezone data, which is needed for certain date/time operations
|
|
|
|
|
# https://github.com/dotnet/dotnet-docker/blob/main/samples/enable-globalization.md
|
|
|
|
|
RUN apk add --no-cache tzdata
|
|
|
|
|
# Use `runtime-deps` instead of `runtime` because we have a self-contained assembly
|
|
|
|
|
FROM --platform=$TARGETPLATFORM mcr.microsoft.com/dotnet/runtime-deps:7.0 AS run
|
|
|
|
|
|
|
|
|
|
# Create a non-root user to run the app, so that the output files can be accessed by the host
|
|
|
|
|
# https://github.com/Tyrrrz/DiscordChatExporter/issues/851
|
|
|
|
|
RUN adduser --disabled-password --no-create-home dce
|
|
|
|
|
USER dce
|
|
|
|
|
|
|
|
|
|
COPY --from=build /build/publish /opt/dce
|
|
|
|
|
|
|
|
|
|
# Add the app directory to the PATH so that it's easier to run the app via `docker exec`
|
|
|
|
|
ENV PATH="$PATH:/opt/dce"
|
|
|
|
|
|
|
|
|
|
# This directory is exposed to the user for mounting purposes, so it's important
|
|
|
|
|
# that it stays the same for backwards compatibility.
|
|
|
|
|
# This directory is exposed to the user for mounting purposes, so it's important that it always
|
|
|
|
|
# stays the same for backwards compatibility.
|
|
|
|
|
WORKDIR /out
|
|
|
|
|
|
|
|
|
|
ENTRYPOINT ["DiscordChatExporter.Cli"]
|
|
|
|
|
COPY --from=build /build/publish /opt/dce
|
|
|
|
|
ENTRYPOINT ["/opt/dce/DiscordChatExporter.Cli"]
|