[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
|
WORKDIR /src/Iceshrimp.Backend
|
||||||
ARG VIPS=true
|
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 build files
|
||||||
COPY Iceshrimp.Backend/ /src/Iceshrimp.Backend/
|
COPY Iceshrimp.Backend/ /src/Iceshrimp.Backend/
|
||||||
|
@ -25,20 +35,52 @@ COPY Iceshrimp.Frontend/ /src/Iceshrimp.Frontend/
|
||||||
COPY Iceshrimp.Shared/ /src/Iceshrimp.Shared/
|
COPY Iceshrimp.Shared/ /src/Iceshrimp.Shared/
|
||||||
|
|
||||||
# build without architecture set, allowing for reuse of the majority of the compiled IL between architectures
|
# 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
|
# if architecture doesn't match, build with architecture set, otherwise use existing compile output
|
||||||
ARG TARGETPLATFORM
|
ARG TARGETPLATFORM
|
||||||
ARG TARGETARCH
|
ARG TARGETARCH
|
||||||
RUN if [[ "$TARGETPLATFORM" != "$BUILDPLATFORM" ]]; then dotnet restore -a $TARGETARCH -p:BundleNativeDeps=$VIPS -p:EnableLibVips=$VIPS; fi
|
RUN --mount=type=cache,target=/root/.nuget \
|
||||||
RUN if [[ "$TARGETPLATFORM" != "$BUILDPLATFORM" ]]; then dotnet publish --no-restore -c Release -a $TARGETARCH -o /app-$TARGETARCH -p:BundleNativeDeps=$VIPS -p:EnableLibVips=$VIPS; fi
|
--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
|
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
|
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0 AS builder-aot
|
||||||
ARG BUILDPLATFORM
|
ARG BUILDPLATFORM
|
||||||
WORKDIR /src
|
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
|
RUN apt-get update && apt-get install python3 -y
|
||||||
|
|
||||||
# copy csproj/fsproj & nuget config, then restore as distinct layers
|
# 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
|
WORKDIR /src/Iceshrimp.Backend
|
||||||
ARG VIPS=true
|
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 build files
|
||||||
COPY Iceshrimp.Backend/ /src/Iceshrimp.Backend/
|
COPY Iceshrimp.Backend/ /src/Iceshrimp.Backend/
|
||||||
|
@ -59,13 +111,43 @@ COPY Iceshrimp.Frontend/ /src/Iceshrimp.Frontend/
|
||||||
COPY Iceshrimp.Shared/ /src/Iceshrimp.Shared/
|
COPY Iceshrimp.Shared/ /src/Iceshrimp.Shared/
|
||||||
|
|
||||||
# build without architecture set, allowing for reuse of the majority of the compiled IL between architectures
|
# 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
|
# if architecture doesn't match, build with architecture set, otherwise use existing compile output
|
||||||
ARG TARGETPLATFORM
|
ARG TARGETPLATFORM
|
||||||
ARG TARGETARCH
|
ARG TARGETARCH
|
||||||
RUN 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 \
|
||||||
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
|
--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
|
RUN if [[ "$TARGETPLATFORM" != "$BUILDPLATFORM" ]]; then mv /app-$TARGETARCH /app; else mv /build /app; fi
|
||||||
|
|
||||||
# Enable globalization and time zones:
|
# Enable globalization and time zones:
|
||||||
|
|
Loading…
Add table
Reference in a new issue