[docker] Add cache mounts to Dockerfile
This commit is contained in:
parent
04ec9ec5fd
commit
ed767ecaff
1 changed files with 91 additions and 9 deletions
100
Dockerfile
100
Dockerfile
|
@ -16,7 +16,17 @@ COPY Iceshrimp.Shared/*.csproj /src/Iceshrimp.Shared/
|
|||
|
||||
WORKDIR /src/Iceshrimp.Backend
|
||||
ARG VIPS=true
|
||||
RUN dotnet restore -p:BundleNativeDeps=$VIPS -p:EnableLibVips=$VIPS
|
||||
RUN --mount=type=cache,target=/root/.nuget \
|
||||
--mount=type=cache,target=/root/.dotnet \
|
||||
--mount=type=cache,id=Iceshrimp/Backend/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Backend/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Backend/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Backend/obj \
|
||||
--mount=type=cache,id=Iceshrimp/Frontend/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Frontend/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Frontend/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Frontend/obj \
|
||||
--mount=type=cache,id=Iceshrimp/Shared/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Shared/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Shared/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Shared/obj \
|
||||
--mount=type=cache,id=Iceshrimp/Parsing/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Parsing/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Parsing/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Parsing/obj \
|
||||
dotnet restore -p:BundleNativeDeps=$VIPS -p:EnableLibVips=$VIPS
|
||||
|
||||
# copy build files
|
||||
COPY Iceshrimp.Backend/ /src/Iceshrimp.Backend/
|
||||
|
@ -25,20 +35,52 @@ COPY Iceshrimp.Frontend/ /src/Iceshrimp.Frontend/
|
|||
COPY Iceshrimp.Shared/ /src/Iceshrimp.Shared/
|
||||
|
||||
# build without architecture set, allowing for reuse of the majority of the compiled IL between architectures
|
||||
RUN dotnet publish --no-restore -c Release -o /build -p:BundleNativeDeps=$VIPS -p:EnableLibVips=$VIPS
|
||||
RUN --mount=type=cache,target=/root/.nuget \
|
||||
--mount=type=cache,target=/root/.dotnet \
|
||||
--mount=type=cache,id=Iceshrimp/Backend/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Backend/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Backend/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Backend/obj \
|
||||
--mount=type=cache,id=Iceshrimp/Frontend/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Frontend/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Frontend/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Frontend/obj \
|
||||
--mount=type=cache,id=Iceshrimp/Shared/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Shared/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Shared/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Shared/obj \
|
||||
--mount=type=cache,id=Iceshrimp/Parsing/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Parsing/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Parsing/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Parsing/obj \
|
||||
dotnet publish --no-restore -c Release -o /build -p:BundleNativeDeps=$VIPS -p:EnableLibVips=$VIPS
|
||||
|
||||
# if architecture doesn't match, build with architecture set, otherwise use existing compile output
|
||||
ARG TARGETPLATFORM
|
||||
ARG TARGETARCH
|
||||
RUN if [[ "$TARGETPLATFORM" != "$BUILDPLATFORM" ]]; then dotnet restore -a $TARGETARCH -p:BundleNativeDeps=$VIPS -p:EnableLibVips=$VIPS; fi
|
||||
RUN if [[ "$TARGETPLATFORM" != "$BUILDPLATFORM" ]]; then dotnet publish --no-restore -c Release -a $TARGETARCH -o /app-$TARGETARCH -p:BundleNativeDeps=$VIPS -p:EnableLibVips=$VIPS; fi
|
||||
RUN --mount=type=cache,target=/root/.nuget \
|
||||
--mount=type=cache,target=/root/.dotnet \
|
||||
--mount=type=cache,id=Iceshrimp/Backend/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Backend/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Backend/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Backend/obj \
|
||||
--mount=type=cache,id=Iceshrimp/Frontend/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Frontend/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Frontend/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Frontend/obj \
|
||||
--mount=type=cache,id=Iceshrimp/Shared/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Shared/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Shared/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Shared/obj \
|
||||
--mount=type=cache,id=Iceshrimp/Parsing/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Parsing/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Parsing/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Parsing/obj \
|
||||
if [[ "$TARGETPLATFORM" != "$BUILDPLATFORM" ]]; then dotnet restore -a $TARGETARCH -p:BundleNativeDeps=$VIPS -p:EnableLibVips=$VIPS; fi
|
||||
RUN --mount=type=cache,target=/root/.nuget \
|
||||
--mount=type=cache,target=/root/.dotnet \
|
||||
--mount=type=cache,id=Iceshrimp/Backend/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Backend/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Backend/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Backend/obj \
|
||||
--mount=type=cache,id=Iceshrimp/Frontend/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Frontend/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Frontend/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Frontend/obj \
|
||||
--mount=type=cache,id=Iceshrimp/Shared/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Shared/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Shared/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Shared/obj \
|
||||
--mount=type=cache,id=Iceshrimp/Parsing/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Parsing/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Parsing/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Parsing/obj \
|
||||
if [[ "$TARGETPLATFORM" != "$BUILDPLATFORM" ]]; then dotnet publish --no-restore -c Release -a $TARGETARCH -o /app-$TARGETARCH -p:BundleNativeDeps=$VIPS -p:EnableLibVips=$VIPS; fi
|
||||
RUN if [[ "$TARGETPLATFORM" != "$BUILDPLATFORM" ]]; then mv /app-$TARGETARCH /app; else mv /build /app; fi
|
||||
|
||||
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0 AS builder-aot
|
||||
ARG BUILDPLATFORM
|
||||
WORKDIR /src
|
||||
|
||||
RUN dotnet workload install wasm-tools
|
||||
RUN --mount=type=cache,target=/root/.nuget \
|
||||
--mount=type=cache,target=/root/.dotnet \
|
||||
dotnet workload install wasm-tools
|
||||
RUN apt-get update && apt-get install python3 -y
|
||||
|
||||
# copy csproj/fsproj & nuget config, then restore as distinct layers
|
||||
|
@ -50,7 +92,17 @@ COPY Iceshrimp.Shared/*.csproj /src/Iceshrimp.Shared/
|
|||
|
||||
WORKDIR /src/Iceshrimp.Backend
|
||||
ARG VIPS=true
|
||||
RUN dotnet restore -p:BundleNativeDeps=$VIPS -p:EnableLibVips=$VIPS
|
||||
RUN --mount=type=cache,target=/root/.nuget \
|
||||
--mount=type=cache,target=/root/.dotnet \
|
||||
--mount=type=cache,id=Iceshrimp/Backend/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Backend/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Backend/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Backend/obj \
|
||||
--mount=type=cache,id=Iceshrimp/Frontend/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Frontend/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Frontend/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Frontend/obj \
|
||||
--mount=type=cache,id=Iceshrimp/Shared/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Shared/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Shared/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Shared/obj \
|
||||
--mount=type=cache,id=Iceshrimp/Parsing/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Parsing/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Parsing/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Parsing/obj \
|
||||
dotnet restore -p:BundleNativeDeps=$VIPS -p:EnableLibVips=$VIPS
|
||||
|
||||
# copy build files
|
||||
COPY Iceshrimp.Backend/ /src/Iceshrimp.Backend/
|
||||
|
@ -59,13 +111,43 @@ COPY Iceshrimp.Frontend/ /src/Iceshrimp.Frontend/
|
|||
COPY Iceshrimp.Shared/ /src/Iceshrimp.Shared/
|
||||
|
||||
# build without architecture set, allowing for reuse of the majority of the compiled IL between architectures
|
||||
RUN dotnet publish --no-restore -c Release -o /build -p:EnableAOT=true -p:BundleNativeDeps=$VIPS -p:EnableLibVips=$VIPS
|
||||
RUN --mount=type=cache,target=/root/.nuget \
|
||||
--mount=type=cache,target=/root/.dotnet \
|
||||
--mount=type=cache,id=Iceshrimp/Backend/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Backend/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Backend/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Backend/obj \
|
||||
--mount=type=cache,id=Iceshrimp/Frontend/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Frontend/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Frontend/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Frontend/obj \
|
||||
--mount=type=cache,id=Iceshrimp/Shared/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Shared/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Shared/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Shared/obj \
|
||||
--mount=type=cache,id=Iceshrimp/Parsing/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Parsing/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Parsing/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Parsing/obj \
|
||||
dotnet publish --no-restore -c Release -o /build -p:EnableAOT=true -p:BundleNativeDeps=$VIPS -p:EnableLibVips=$VIPS
|
||||
|
||||
# if architecture doesn't match, build with architecture set, otherwise use existing compile output
|
||||
ARG TARGETPLATFORM
|
||||
ARG TARGETARCH
|
||||
RUN if [[ "$TARGETPLATFORM" != "$BUILDPLATFORM" ]]; then dotnet restore -a $TARGETARCH -p:EnableAOT=true -p:BundleNativeDeps=$VIPS -p:EnableLibVips=$VIPS; fi
|
||||
RUN if [[ "$TARGETPLATFORM" != "$BUILDPLATFORM" ]]; then dotnet publish --no-restore -c Release -a $TARGETARCH -o /app-$TARGETARCH -p:EnableAOT=true -p:BundleNativeDeps=$VIPS -p:EnableLibVips=$VIPS; fi
|
||||
RUN --mount=type=cache,target=/root/.nuget \
|
||||
--mount=type=cache,target=/root/.dotnet \
|
||||
--mount=type=cache,id=Iceshrimp/Backend/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Backend/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Backend/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Backend/obj \
|
||||
--mount=type=cache,id=Iceshrimp/Frontend/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Frontend/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Frontend/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Frontend/obj \
|
||||
--mount=type=cache,id=Iceshrimp/Shared/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Shared/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Shared/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Shared/obj \
|
||||
--mount=type=cache,id=Iceshrimp/Parsing/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Parsing/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Parsing/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Parsing/obj \
|
||||
if [[ "$TARGETPLATFORM" != "$BUILDPLATFORM" ]]; then dotnet restore -a $TARGETARCH -p:EnableAOT=true -p:BundleNativeDeps=$VIPS -p:EnableLibVips=$VIPS; fi
|
||||
RUN --mount=type=cache,target=/root/.nuget \
|
||||
--mount=type=cache,target=/root/.dotnet \
|
||||
--mount=type=cache,id=Iceshrimp/Backend/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Backend/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Backend/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Backend/obj \
|
||||
--mount=type=cache,id=Iceshrimp/Frontend/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Frontend/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Frontend/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Frontend/obj \
|
||||
--mount=type=cache,id=Iceshrimp/Shared/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Shared/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Shared/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Shared/obj \
|
||||
--mount=type=cache,id=Iceshrimp/Parsing/bin/$BUILDPLATFORM,target=/src/Iceshrimp.Parsing/bin \
|
||||
--mount=type=cache,id=Iceshrimp/Parsing/obj/$BUILDPLATFORM,target=/src/Iceshrimp.Parsing/obj \
|
||||
if [[ "$TARGETPLATFORM" != "$BUILDPLATFORM" ]]; then dotnet publish --no-restore -c Release -a $TARGETARCH -o /app-$TARGETARCH -p:EnableAOT=true -p:BundleNativeDeps=$VIPS -p:EnableLibVips=$VIPS; fi
|
||||
RUN if [[ "$TARGETPLATFORM" != "$BUILDPLATFORM" ]]; then mv /app-$TARGETARCH /app; else mv /build /app; fi
|
||||
|
||||
# Enable globalization and time zones:
|
||||
|
|
Loading…
Add table
Reference in a new issue