docker: optimize dockerfiles for multi platform builds
This commit is contained in:
1 parent
483be74fa1
commit
c730a77b41
4 files changed
+126
-36
No files matched your search
@@ -37,11 +37,28 @@ jobs:
|
|||||||
- name: Check out the repo
|
- name: Check out the repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
# Setup Buildx
|
||||||
|
- name: Docker Setup Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
with:
|
||||||
|
platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v8
|
||||||
|
|
||||||
- name: Log in to Docker Hub
|
- name: Log in to Docker Hub
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
ecr: auto
|
||||||
|
logout: true
|
||||||
|
|
||||||
|
# Pull previous image from docker hub to use it as cache to improve the image build time.
|
||||||
|
- name: docker pull cache image
|
||||||
|
continue-on-error: true
|
||||||
|
run: docker pull ${{ matrix.repos.image }}:latest
|
||||||
|
|
||||||
|
# Setup QEMU
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v2
|
||||||
|
|
||||||
- name: Extract metadata (tags, labels) for Docker
|
- name: Extract metadata (tags, labels) for Docker
|
||||||
id: meta
|
id: meta
|
||||||
@@ -58,6 +75,7 @@ jobs:
|
|||||||
push: true
|
push: true
|
||||||
platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v8
|
platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v8
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
|
cache-from: ${{ matrix.repos.image }}:latest
|
||||||
|
|
||||||
- name: Generate artifact attestation
|
- name: Generate artifact attestation
|
||||||
uses: actions/attest-build-provenance@v1
|
uses: actions/attest-build-provenance@v1
|
||||||
|
|||||||
+36
-12
@@ -1,26 +1,50 @@
|
|||||||
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
|
FROM mcr.microsoft.com/dotnet/runtime-deps:8.0-alpine AS base
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
EXPOSE 80
|
||||||
|
EXPOSE 443
|
||||||
|
|
||||||
|
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0-alpine AS build
|
||||||
|
ARG TARGETARCH
|
||||||
|
ARG BUILDPLATFORM
|
||||||
|
ENV DOTNET_TC_QuickJitForLoops="1" DOTNET_ReadyToRun="0" DOTNET_TieredPGO="1" DOTNET_SYSTEM_GLOBALIZATION_INVARIANT="true"
|
||||||
|
|
||||||
|
WORKDIR /src
|
||||||
|
|
||||||
# copy projects
|
|
||||||
COPY Streetwriters.Data/*.csproj ./Streetwriters.Data/
|
COPY Streetwriters.Data/*.csproj ./Streetwriters.Data/
|
||||||
COPY Streetwriters.Common/*.csproj ./Streetwriters.Common/
|
COPY Streetwriters.Common/*.csproj ./Streetwriters.Common/
|
||||||
COPY Notesnook.API/*.csproj ./Notesnook.API/
|
COPY Notesnook.API/*.csproj ./Notesnook.API/
|
||||||
|
|
||||||
# restore dependencies
|
# restore dependencies
|
||||||
RUN dotnet restore -v d /app/Notesnook.API/Notesnook.API.csproj --use-current-runtime
|
RUN dotnet restore -v d /src/Notesnook.API/Notesnook.API.csproj --use-current-runtime
|
||||||
|
|
||||||
# copy everything else
|
|
||||||
COPY Streetwriters.Data/ ./Streetwriters.Data/
|
COPY Streetwriters.Data/ ./Streetwriters.Data/
|
||||||
COPY Streetwriters.Common/ ./Streetwriters.Common/
|
COPY Streetwriters.Common/ ./Streetwriters.Common/
|
||||||
COPY Notesnook.API/ ./Notesnook.API/
|
COPY Notesnook.API/ ./Notesnook.API/
|
||||||
|
|
||||||
WORKDIR /app/Notesnook.API/
|
WORKDIR /src/Notesnook.API/
|
||||||
ENV DOTNET_TC_QuickJitForLoops="1" DOTNET_ReadyToRun="0" DOTNET_TieredPGO="1" DOTNET_SYSTEM_GLOBALIZATION_INVARIANT="true"
|
|
||||||
RUN dotnet publish -c Release -o /app/out --use-current-runtime --self-contained false --no-restore
|
|
||||||
|
|
||||||
# final stage/image
|
RUN dotnet build -c Release -o /app/build -a $TARGETARCH
|
||||||
FROM mcr.microsoft.com/dotnet/aspnet:8.0
|
|
||||||
|
FROM build AS publish
|
||||||
|
RUN dotnet publish -c Release -o /app/publish \
|
||||||
|
#--runtime alpine-x64 \
|
||||||
|
--self-contained true \
|
||||||
|
/p:PublishTrimmed=true \
|
||||||
|
/p:PublishSingleFile=true \
|
||||||
|
-a $TARGETARCH
|
||||||
|
|
||||||
|
FROM --platform=$BUILDPLATFORM base AS final
|
||||||
|
ARG TARGETARCH
|
||||||
|
ARG BUILDPLATFORM
|
||||||
|
|
||||||
|
# create a new user and change directory ownership
|
||||||
|
RUN adduser --disabled-password \
|
||||||
|
--home /app \
|
||||||
|
--gecos '' dotnetuser && chown -R dotnetuser /app
|
||||||
|
|
||||||
|
# impersonate into the new user
|
||||||
|
USER dotnetuser
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
COPY --from=build /app/out .
|
|
||||||
ENTRYPOINT ["dotnet", "Notesnook.API.dll"]
|
COPY --from=publish /app/publish .
|
||||||
|
ENTRYPOINT ["./Notesnook.API"]
|
||||||
@@ -1,26 +1,50 @@
|
|||||||
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
|
FROM mcr.microsoft.com/dotnet/runtime-deps:8.0-alpine AS base
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
EXPOSE 80
|
||||||
|
EXPOSE 443
|
||||||
|
|
||||||
|
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0-alpine AS build
|
||||||
|
ARG TARGETARCH
|
||||||
|
ARG BUILDPLATFORM
|
||||||
|
ENV DOTNET_TC_QuickJitForLoops="1" DOTNET_ReadyToRun="0" DOTNET_TieredPGO="1" DOTNET_SYSTEM_GLOBALIZATION_INVARIANT="true"
|
||||||
|
|
||||||
|
WORKDIR /src
|
||||||
|
|
||||||
# copy projects
|
|
||||||
COPY Streetwriters.Data/*.csproj ./Streetwriters.Data/
|
COPY Streetwriters.Data/*.csproj ./Streetwriters.Data/
|
||||||
COPY Streetwriters.Common/*.csproj ./Streetwriters.Common/
|
COPY Streetwriters.Common/*.csproj ./Streetwriters.Common/
|
||||||
COPY Streetwriters.Identity/*.csproj ./Streetwriters.Identity/
|
COPY Streetwriters.Identity/*.csproj ./Streetwriters.Identity/
|
||||||
|
|
||||||
# restore dependencies
|
# restore dependencies
|
||||||
RUN dotnet restore -v d /app/Streetwriters.Identity/Streetwriters.Identity.csproj --use-current-runtime
|
RUN dotnet restore -v d /src/Streetwriters.Identity/Streetwriters.Identity.csproj --use-current-runtime
|
||||||
|
|
||||||
# copy everything else
|
|
||||||
COPY Streetwriters.Data/ ./Streetwriters.Data/
|
COPY Streetwriters.Data/ ./Streetwriters.Data/
|
||||||
COPY Streetwriters.Common/ ./Streetwriters.Common/
|
COPY Streetwriters.Common/ ./Streetwriters.Common/
|
||||||
COPY Streetwriters.Identity/ ./Streetwriters.Identity/
|
COPY Streetwriters.Identity/ ./Streetwriters.Identity/
|
||||||
|
|
||||||
WORKDIR /app/Streetwriters.Identity/
|
WORKDIR /src/Streetwriters.Identity/
|
||||||
ENV DOTNET_TC_QuickJitForLoops="1" DOTNET_ReadyToRun="0" DOTNET_TieredPGO="1" DOTNET_SYSTEM_GLOBALIZATION_INVARIANT="true"
|
|
||||||
RUN dotnet publish -c Release -o /app/out --use-current-runtime --self-contained false --no-restore
|
|
||||||
|
|
||||||
# final stage/image
|
RUN dotnet build -c Release -o /app/build -a $TARGETARCH
|
||||||
FROM mcr.microsoft.com/dotnet/aspnet:8.0
|
|
||||||
|
FROM build AS publish
|
||||||
|
RUN dotnet publish -c Release -o /app/publish \
|
||||||
|
#--runtime alpine-x64 \
|
||||||
|
--self-contained true \
|
||||||
|
/p:PublishTrimmed=true \
|
||||||
|
/p:PublishSingleFile=true \
|
||||||
|
-a $TARGETARCH
|
||||||
|
|
||||||
|
FROM --platform=$BUILDPLATFORM base AS final
|
||||||
|
ARG TARGETARCH
|
||||||
|
ARG BUILDPLATFORM
|
||||||
|
|
||||||
|
# create a new user and change directory ownership
|
||||||
|
RUN adduser --disabled-password \
|
||||||
|
--home /app \
|
||||||
|
--gecos '' dotnetuser && chown -R dotnetuser /app
|
||||||
|
|
||||||
|
# impersonate into the new user
|
||||||
|
USER dotnetuser
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
COPY --from=build /app/out .
|
|
||||||
ENTRYPOINT ["dotnet", "Streetwriters.Identity.dll"]
|
COPY --from=publish /app/publish .
|
||||||
|
ENTRYPOINT ["./Streetwriters.Identity"]
|
||||||
@@ -1,26 +1,50 @@
|
|||||||
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
|
FROM mcr.microsoft.com/dotnet/runtime-deps:8.0-alpine AS base
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
EXPOSE 80
|
||||||
|
EXPOSE 443
|
||||||
|
|
||||||
|
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:8.0-alpine AS build
|
||||||
|
ARG TARGETARCH
|
||||||
|
ARG BUILDPLATFORM
|
||||||
|
ENV DOTNET_TC_QuickJitForLoops="1" DOTNET_ReadyToRun="0" DOTNET_TieredPGO="1" DOTNET_SYSTEM_GLOBALIZATION_INVARIANT="true"
|
||||||
|
|
||||||
|
WORKDIR /src
|
||||||
|
|
||||||
# copy projects
|
|
||||||
COPY Streetwriters.Data/*.csproj ./Streetwriters.Data/
|
COPY Streetwriters.Data/*.csproj ./Streetwriters.Data/
|
||||||
COPY Streetwriters.Common/*.csproj ./Streetwriters.Common/
|
COPY Streetwriters.Common/*.csproj ./Streetwriters.Common/
|
||||||
COPY Streetwriters.Messenger/*.csproj ./Streetwriters.Messenger/
|
COPY Streetwriters.Messenger/*.csproj ./Streetwriters.Messenger/
|
||||||
|
|
||||||
# restore dependencies
|
# restore dependencies
|
||||||
RUN dotnet restore -v d /app/Streetwriters.Messenger/Streetwriters.Messenger.csproj --use-current-runtime
|
RUN dotnet restore -v d /src/Streetwriters.Messenger/Streetwriters.Messenger.csproj --use-current-runtime
|
||||||
|
|
||||||
# copy everything else
|
|
||||||
COPY Streetwriters.Data/ ./Streetwriters.Data/
|
COPY Streetwriters.Data/ ./Streetwriters.Data/
|
||||||
COPY Streetwriters.Common/ ./Streetwriters.Common/
|
COPY Streetwriters.Common/ ./Streetwriters.Common/
|
||||||
COPY Streetwriters.Messenger/ ./Streetwriters.Messenger/
|
COPY Streetwriters.Messenger/ ./Streetwriters.Messenger/
|
||||||
|
|
||||||
WORKDIR /app/Streetwriters.Messenger/
|
WORKDIR /src/Streetwriters.Messenger/
|
||||||
ENV DOTNET_TC_QuickJitForLoops="1" DOTNET_ReadyToRun="0" DOTNET_TieredPGO="1" DOTNET_SYSTEM_GLOBALIZATION_INVARIANT="true"
|
|
||||||
RUN dotnet publish -c Release -o /app/out --use-current-runtime --self-contained false --no-restore
|
|
||||||
|
|
||||||
# final stage/image
|
RUN dotnet build -c Release -o /app/build -a $TARGETARCH
|
||||||
FROM mcr.microsoft.com/dotnet/aspnet:8.0
|
|
||||||
|
FROM build AS publish
|
||||||
|
RUN dotnet publish -c Release -o /app/publish \
|
||||||
|
#--runtime alpine-x64 \
|
||||||
|
--self-contained true \
|
||||||
|
/p:PublishTrimmed=true \
|
||||||
|
/p:PublishSingleFile=true \
|
||||||
|
-a $TARGETARCH
|
||||||
|
|
||||||
|
FROM --platform=$BUILDPLATFORM base AS final
|
||||||
|
ARG TARGETARCH
|
||||||
|
ARG BUILDPLATFORM
|
||||||
|
|
||||||
|
# create a new user and change directory ownership
|
||||||
|
RUN adduser --disabled-password \
|
||||||
|
--home /app \
|
||||||
|
--gecos '' dotnetuser && chown -R dotnetuser /app
|
||||||
|
|
||||||
|
# impersonate into the new user
|
||||||
|
USER dotnetuser
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
COPY --from=build /app/out .
|
|
||||||
ENTRYPOINT ["dotnet", "Streetwriters.Messenger.dll"]
|
COPY --from=publish /app/publish .
|
||||||
|
ENTRYPOINT ["./Streetwriters.Messenger"]
|
||||||
Reference in new issue
Block a user