From 6e1fe61a6501779c0a36a5207dad6c95f33d7838 Mon Sep 17 00:00:00 2001 From: Meysam Hadeli Date: Thu, 26 Feb 2026 23:49:12 +0330 Subject: [PATCH] refactor: refactor dockerfiles --- .../docker-compose/docker-compose.yaml | 10 +-- src/ApiGateway/Dockerfile | 62 ++++++++--------- src/ApiGateway/dev.Dockerfile | 48 -------------- src/Services/Booking/Dockerfile | 65 ++++++++---------- src/Services/Booking/dev.Dockerfile | 51 -------------- src/Services/Flight/Dockerfile | 66 ++++++++----------- src/Services/Flight/dev.Dockerfile | 52 --------------- src/Services/Identity/Dockerfile | 66 ++++++++----------- src/Services/Identity/dev.Dockerfile | 52 --------------- src/Services/Passenger/Dockerfile | 65 ++++++++---------- src/Services/Passenger/dev.Dockerfile | 51 -------------- 11 files changed, 144 insertions(+), 444 deletions(-) delete mode 100644 src/ApiGateway/dev.Dockerfile delete mode 100644 src/Services/Booking/dev.Dockerfile delete mode 100644 src/Services/Flight/dev.Dockerfile delete mode 100644 src/Services/Identity/dev.Dockerfile delete mode 100644 src/Services/Passenger/dev.Dockerfile diff --git a/deployments/docker-compose/docker-compose.yaml b/deployments/docker-compose/docker-compose.yaml index 99e8c9b..69b7893 100644 --- a/deployments/docker-compose/docker-compose.yaml +++ b/deployments/docker-compose/docker-compose.yaml @@ -355,7 +355,7 @@ services: args: Version: "1" context: ../../ - dockerfile: src/ApiGateway/dev.Dockerfile + dockerfile: src/ApiGateway/Dockerfile container_name: api-gateway ports: - "5001:80" @@ -382,7 +382,7 @@ services: args: Version: "1" context: ../../ - dockerfile: src/Services/Flight/dev.Dockerfile + dockerfile: src/Services/Flight/Dockerfile container_name: flight ports: - 5004:80 @@ -408,7 +408,7 @@ services: args: Version: "1" context: ../../ - dockerfile: src/Services/Identity/dev.Dockerfile + dockerfile: src/Services/Identity/Dockerfile container_name: identity ports: - 6005:80 @@ -435,7 +435,7 @@ services: args: Version: "1" context: ../../ - dockerfile: src/Services/Passenger/dev.Dockerfile + dockerfile: src/Services/Passenger/Dockerfile container_name: passenger ports: - 6012:80 @@ -462,7 +462,7 @@ services: args: Version: "1" context: ../../ - dockerfile: src/Services/Booking/dev.Dockerfile + dockerfile: src/Services/Booking/Dockerfile container_name: booking ports: - 6010:80 diff --git a/src/ApiGateway/Dockerfile b/src/ApiGateway/Dockerfile index c4a618e..f70bdb8 100644 --- a/src/ApiGateway/Dockerfile +++ b/src/ApiGateway/Dockerfile @@ -1,46 +1,38 @@ -FROM mcr.microsoft.com/dotnet/sdk:10.0 AS builder -WORKDIR / +# ---------- Build Stage ---------- +FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build +WORKDIR /src -COPY ./.editorconfig ./ -COPY ./global.json ./ -COPY ./Directory.Build.props ./ +# Copy solution-level files +COPY .editorconfig . +COPY global.json . +COPY Directory.Build.props . -# Setup working directory for the project -COPY ./src/BuildingBlocks/BuildingBlocks.csproj ./building-blocks/ -COPY ./src/ApiGateway/src/ApiGateway.csproj ./src/ApiGateway/src/ -COPY ./src/Aspire/src/ServiceDefaults/ServiceDefaults.csproj ./src/Aspire/src/ServiceDefaults/ +# Copy project files first (better Docker caching) +COPY src/BuildingBlocks/BuildingBlocks.csproj src/BuildingBlocks/ +COPY src/ApiGateway/src/ApiGateway.csproj src/ApiGateway/src/ +COPY src/Aspire/src/ServiceDefaults/ServiceDefaults.csproj src/Aspire/src/ServiceDefaults/ -# Restore nuget packages -RUN dotnet restore ./src/ApiGateway/src/ApiGateway.csproj +# Restore dependencies +RUN dotnet restore src/ApiGateway/src/ApiGateway.csproj -# Copy project files -COPY ./src/BuildingBlocks ./src/BuildingBlocks/ -COPY ./src/ApiGateway/src ./src/ApiGateway/src/ -COPY ./src/Aspire/src/ServiceDefaults/ ./src/Aspire/src/ServiceDefaults/ +# Copy the rest of the source code +COPY src ./src -# Build project with Release configuration -# and no restore, as we did it already +# Publish (build included) +RUN dotnet publish src/ApiGateway/src/ApiGateway.csproj \ + -c Release \ + -o /app/publish \ + --no-restore -RUN ls -RUN dotnet build -c Release --no-restore ./src/ApiGateway/src/ApiGateway.csproj +# ---------- Runtime Stage ---------- +FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime +WORKDIR /app -WORKDIR /src/ApiGateway/src +COPY --from=build /app/publish . -# Publish project to output folder -# and no build, as we did it already -RUN dotnet publish -c Release --no-build -o out - -FROM mcr.microsoft.com/dotnet/aspnet:10.0 - -# Setup working directory for the project -WORKDIR / -COPY --from=builder /src/ApiGateway/src/out . - -ENV ASPNETCORE_URLS https://*:443, http://*:80 -ENV ASPNETCORE_ENVIRONMENT docker +ENV ASPNETCORE_URLS=http://+:80 +ENV ASPNETCORE_ENVIRONMENT=docker EXPOSE 80 -EXPOSE 443 - -ENTRYPOINT ["dotnet", "ApiGateway.dll"] +ENTRYPOINT ["dotnet", "ApiGateway.dll"] \ No newline at end of file diff --git a/src/ApiGateway/dev.Dockerfile b/src/ApiGateway/dev.Dockerfile deleted file mode 100644 index c213fe7..0000000 --- a/src/ApiGateway/dev.Dockerfile +++ /dev/null @@ -1,48 +0,0 @@ -FROM mcr.microsoft.com/dotnet/sdk:10.0 AS builder -WORKDIR / - -COPY ./.editorconfig ./ -COPY ./global.json ./ -COPY ./Directory.Build.props ./ - -# Setup working directory for the project -COPY ./src/BuildingBlocks/BuildingBlocks.csproj ./building-blocks/ -COPY ./src/ApiGateway/src/ApiGateway.csproj ./src/ApiGateway/src/ - - -# Restore nuget packages -RUN --mount=type=cache,id=gateway_nuget,target=/root/.nuget/packages \ - dotnet restore ./src/ApiGateway/src/ApiGateway.csproj - -# Copy project files -COPY ./src/BuildingBlocks ./src/BuildingBlocks/ -COPY ./src/ApiGateway/src ./src/ApiGateway/src/ - -# Build project with Release configuration -# and no restore, as we did it already - -RUN ls -RUN --mount=type=cache,id=gateway_nuget,target=/root/.nuget/packages \ - dotnet build -c Release --no-restore ./src/ApiGateway/src/ApiGateway.csproj - -WORKDIR /src/ApiGateway/src - -# Publish project to output folder -# and no build, as we did it already -RUN --mount=type=cache,id=gateway_nuget,target=/root/.nuget/packages \ - dotnet publish -c Release --no-build -o out - -FROM mcr.microsoft.com/dotnet/aspnet:10.0 - -# Setup working directory for the project -WORKDIR / -COPY --from=builder /src/ApiGateway/src/out . - -ENV ASPNETCORE_URLS https://*:443, http://*:80 -ENV ASPNETCORE_ENVIRONMENT docker - -EXPOSE 80 -EXPOSE 443 - -ENTRYPOINT ["dotnet", "ApiGateway.dll"] - diff --git a/src/Services/Booking/Dockerfile b/src/Services/Booking/Dockerfile index deb7cfa..399854b 100644 --- a/src/Services/Booking/Dockerfile +++ b/src/Services/Booking/Dockerfile @@ -1,48 +1,39 @@ -FROM mcr.microsoft.com/dotnet/sdk:10.0 AS builder -WORKDIR / +# ---------- Build Stage ---------- +FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build +WORKDIR /src -COPY ./.editorconfig ./ -COPY ./global.json ./ -COPY ./Directory.Build.props ./ +# Copy solution-level files +COPY .editorconfig . +COPY global.json . +COPY Directory.Build.props . -# Setup working directory for the project -COPY ./src/BuildingBlocks/BuildingBlocks.csproj ./src/BuildingBlocks/ -COPY ./src/Services/Booking/src/Booking/Booking.csproj ./src/Services/Booking/src/Booking/ -COPY ./src/Services/Booking/src/Booking.Api/Booking.Api.csproj ./src/Services/Booking/src/Booking.Api/ -COPY ./src/Aspire/src/ServiceDefaults/ServiceDefaults.csproj ./src/Aspire/src/ServiceDefaults/ +# Copy project files first (for Docker layer caching) +COPY src/BuildingBlocks/BuildingBlocks.csproj src/BuildingBlocks/ +COPY src/Services/Booking/src/Booking/Booking.csproj src/Services/Booking/src/Booking/ +COPY src/Services/Booking/src/Booking.Api/Booking.Api.csproj src/Services/Booking/src/Booking.Api/ +COPY src/Aspire/src/ServiceDefaults/ServiceDefaults.csproj src/Aspire/src/ServiceDefaults/ -# Restore nuget packages -RUN dotnet restore ./src/Services/Booking/src/Booking.Api/Booking.Api.csproj +# Restore dependencies +RUN dotnet restore src/Services/Booking/src/Booking.Api/Booking.Api.csproj -# Copy project files -COPY ./src/BuildingBlocks ./src/BuildingBlocks/ -COPY ./src/Services/Booking/src/Booking/ ./src/Services/Booking/src/Booking/ -COPY ./src/Services/Booking/src/Booking.Api/ ./src/Services/Booking/src/Booking.Api/ -COPY ./src/Aspire/src/ServiceDefaults/ ./src/Aspire/src/ServiceDefaults/ +# Copy the rest of the source +COPY src ./src -# Build project with Release configuration -# and no restore, as we did it already +# Publish (build included) +RUN dotnet publish src/Services/Booking/src/Booking.Api/Booking.Api.csproj \ + -c Release \ + -o /app/publish \ + --no-restore -RUN ls -RUN dotnet build -c Release --no-restore ./src/Services/Booking/src/Booking.Api/Booking.Api.csproj +# ---------- Runtime Stage ---------- +FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime +WORKDIR /app -WORKDIR /src/Services/Booking/src/Booking.Api +COPY --from=build /app/publish . -# Publish project to output folder -# and no build, as we did it already -RUN dotnet publish -c Release --no-build -o out - -FROM mcr.microsoft.com/dotnet/aspnet:10.0 - -# Setup working directory for the project -WORKDIR / -COPY --from=builder /src/Services/Booking/src/Booking.Api/out . - -ENV ASPNETCORE_URLS https://*:443, http://*:80 -ENV ASPNETCORE_ENVIRONMENT docker +ENV ASPNETCORE_URLS=http://+:80 +ENV ASPNETCORE_ENVIRONMENT=docker EXPOSE 80 -EXPOSE 443 - -ENTRYPOINT ["dotnet", "Booking.Api.dll"] +ENTRYPOINT ["dotnet", "Booking.Api.dll"] \ No newline at end of file diff --git a/src/Services/Booking/dev.Dockerfile b/src/Services/Booking/dev.Dockerfile deleted file mode 100644 index e39c890..0000000 --- a/src/Services/Booking/dev.Dockerfile +++ /dev/null @@ -1,51 +0,0 @@ -FROM mcr.microsoft.com/dotnet/sdk:10.0 AS builder -WORKDIR / - -COPY ./.editorconfig ./ -COPY ./global.json ./ -COPY ./Directory.Build.props ./ - -# Setup working directory for the project -COPY ./src/BuildingBlocks/BuildingBlocks.csproj ./src/BuildingBlocks/ -COPY ./src/Services/Booking/src/Booking/Booking.csproj ./src/Services/Booking/src/Booking/ -COPY ./src/Services/Booking/src/Booking.Api/Booking.Api.csproj ./src/Services/Booking/src/Booking.Api/ -COPY ./src/Aspire/src/ServiceDefaults/ServiceDefaults.csproj ./src/Aspire/src/ServiceDefaults/ - -# Restore nuget packages -RUN --mount=type=cache,id=booking_nuget,target=/root/.nuget/packages \ - dotnet restore ./src/Services/Booking/src/Booking.Api/Booking.Api.csproj - -# Copy project files -COPY ./src/BuildingBlocks ./src/BuildingBlocks/ -COPY ./src/Services/Booking/src/Booking/ ./src/Services/Booking/src/Booking/ -COPY ./src/Services/Booking/src/Booking.Api/ ./src/Services/Booking/src/Booking.Api/ -COPY ./src/Aspire/src/ServiceDefaults/ ./src/Aspire/src/ServiceDefaults/ - -# Build project with Release configuration -# and no restore, as we did it already - -RUN ls -RUN --mount=type=cache,id=booking_nuget,target=/root/.nuget/packages\ - dotnet build -c Release --no-restore ./src/Services/Booking/src/Booking.Api/Booking.Api.csproj - -WORKDIR /src/Services/Booking/src/Booking.Api - -# Publish project to output folder -# and no build, as we did it already -RUN --mount=type=cache,id=booking_nuget,target=/root/.nuget/packages\ - dotnet publish -c Release --no-build -o out - -FROM mcr.microsoft.com/dotnet/aspnet:10.0 - -# Setup working directory for the project -WORKDIR / -COPY --from=builder /src/Services/Booking/src/Booking.Api/out . - -ENV ASPNETCORE_URLS https://*:443, http://*:80 -ENV ASPNETCORE_ENVIRONMENT docker - -EXPOSE 80 -EXPOSE 443 - -ENTRYPOINT ["dotnet", "Booking.Api.dll"] - diff --git a/src/Services/Flight/Dockerfile b/src/Services/Flight/Dockerfile index 73cac02..6fabfbd 100644 --- a/src/Services/Flight/Dockerfile +++ b/src/Services/Flight/Dockerfile @@ -1,49 +1,39 @@ -FROM mcr.microsoft.com/dotnet/sdk:10.0 AS builder -WORKDIR / +# ---------- Build Stage ---------- +FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build +WORKDIR /src -COPY ./.editorconfig ./ -COPY ./global.json ./ -COPY ./Directory.Build.props ./ +# Copy solution-level files +COPY .editorconfig . +COPY global.json . +COPY Directory.Build.props . -# Setup working directory for the project -COPY ./src/BuildingBlocks/BuildingBlocks.csproj ./src/BuildingBlocks/ -COPY ./src/Services/Flight/src/Flight/Flight.csproj ./src/Services/Flight/src/Flight/ -COPY ./src/Services/Flight/src/Flight.Api/Flight.Api.csproj ./src/Services/Flight/src/Flight.Api/ -COPY ./src/Aspire/src/ServiceDefaults/ServiceDefaults.csproj ./src/Aspire/src/ServiceDefaults/ +# Copy project files first (better layer caching) +COPY src/BuildingBlocks/BuildingBlocks.csproj src/BuildingBlocks/ +COPY src/Services/Flight/src/Flight/Flight.csproj src/Services/Flight/src/Flight/ +COPY src/Services/Flight/src/Flight.Api/Flight.Api.csproj src/Services/Flight/src/Flight.Api/ +COPY src/Aspire/src/ServiceDefaults/ServiceDefaults.csproj src/Aspire/src/ServiceDefaults/ -# Restore nuget packages -RUN dotnet restore ./src/Services/Flight/src/Flight.Api/Flight.Api.csproj +# Restore dependencies +RUN dotnet restore src/Services/Flight/src/Flight.Api/Flight.Api.csproj -# Copy project files -COPY ./src/BuildingBlocks ./src/BuildingBlocks/ -COPY ./src/Services/Flight/src/Flight/ ./src/Services/Flight/src/Flight/ -COPY ./src/Services/Flight/src/Flight.Api/ ./src/Services/Flight/src/Flight.Api/ -COPY ./src/Aspire/src/ServiceDefaults/ ./src/Aspire/src/ServiceDefaults/ +# Copy remaining source code +COPY src ./src -# Build project with Release configuration -# and no restore, as we did it already +# Publish (build included) +RUN dotnet publish src/Services/Flight/src/Flight.Api/Flight.Api.csproj \ + -c Release \ + -o /app/publish \ + --no-restore -RUN ls -RUN dotnet build -c Release --no-restore ./src/Services/Flight/src/Flight.Api/Flight.Api.csproj +# ---------- Runtime Stage ---------- +FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime +WORKDIR /app -WORKDIR /src/Services/Flight/src/Flight.Api +COPY --from=build /app/publish . -# Publish project to output folder -# and no build, as we did it already -RUN dotnet publish -c Release --no-build -o out - -FROM mcr.microsoft.com/dotnet/aspnet:10.0 - -# Setup working directory for the project -WORKDIR / -COPY --from=builder /src/Services/Flight/src/Flight.Api/out . - - -ENV ASPNETCORE_URLS https://*:443, http://*:80 -ENV ASPNETCORE_ENVIRONMENT docker +ENV ASPNETCORE_URLS=http://+:80 +ENV ASPNETCORE_ENVIRONMENT=docker EXPOSE 80 -EXPOSE 443 - -ENTRYPOINT ["dotnet", "Flight.Api.dll"] +ENTRYPOINT ["dotnet", "Flight.Api.dll"] \ No newline at end of file diff --git a/src/Services/Flight/dev.Dockerfile b/src/Services/Flight/dev.Dockerfile deleted file mode 100644 index 467d9af..0000000 --- a/src/Services/Flight/dev.Dockerfile +++ /dev/null @@ -1,52 +0,0 @@ -FROM mcr.microsoft.com/dotnet/sdk:10.0 AS builder -WORKDIR / - -COPY ./.editorconfig ./ -COPY ./global.json ./ -COPY ./Directory.Build.props ./ - -# Setup working directory for the project -COPY ./src/BuildingBlocks/BuildingBlocks.csproj ./src/BuildingBlocks/ -COPY ./src/Services/Flight/src/Flight/Flight.csproj ./src/Services/Flight/src/Flight/ -COPY ./src/Services/Flight/src/Flight.Api/Flight.Api.csproj ./src/Services/Flight/src/Flight.Api/ -COPY ./src/Aspire/src/ServiceDefaults/ServiceDefaults.csproj ./src/Aspire/src/ServiceDefaults/ - -# Restore nuget packages -RUN --mount=type=cache,id=flight_nuget,target=/root/.nuget/packages \ - dotnet restore ./src/Services/Flight/src/Flight.Api/Flight.Api.csproj - -# Copy project files -COPY ./src/BuildingBlocks ./src/BuildingBlocks/ -COPY ./src/Services/Flight/src/Flight/ ./src/Services/Flight/src/Flight/ -COPY ./src/Services/Flight/src/Flight.Api/ ./src/Services/Flight/src/Flight.Api/ -COPY ./src/Aspire/src/ServiceDefaults/ ./src/Aspire/src/ServiceDefaults/ - -# Build project with Release configuration -# and no restore, as we did it already - -RUN ls -RUN --mount=type=cache,id=flight_nuget,target=/root/.nuget/packages \ - dotnet build -c Release --no-restore ./src/Services/Flight/src/Flight.Api/Flight.Api.csproj - -WORKDIR /src/Services/Flight/src/Flight.Api - -# Publish project to output folder -# and no build, as we did it already -RUN --mount=type=cache,id=flight_nuget,target=/root/.nuget/packages \ - dotnet publish -c Release --no-build -o out - -FROM mcr.microsoft.com/dotnet/aspnet:10.0 - -# Setup working directory for the project -WORKDIR / -COPY --from=builder /src/Services/Flight/src/Flight.Api/out . - - -ENV ASPNETCORE_URLS https://*:443, http://*:80 -ENV ASPNETCORE_ENVIRONMENT docker - -EXPOSE 80 -EXPOSE 443 - -ENTRYPOINT ["dotnet", "Flight.Api.dll"] - diff --git a/src/Services/Identity/Dockerfile b/src/Services/Identity/Dockerfile index 236af34..21ac5ab 100644 --- a/src/Services/Identity/Dockerfile +++ b/src/Services/Identity/Dockerfile @@ -1,49 +1,39 @@ -FROM mcr.microsoft.com/dotnet/sdk:10.0 AS builder +# ---------- Build Stage ---------- +FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build +WORKDIR /src -# Setup working directory for the project -WORKDIR / +# Copy solution-level files +COPY .editorconfig . +COPY global.json . +COPY Directory.Build.props . -COPY ./.editorconfig ./ -COPY ./global.json ./ -COPY ./Directory.Build.props ./ +# Copy project files first (for better Docker layer caching) +COPY src/BuildingBlocks/BuildingBlocks.csproj src/BuildingBlocks/ +COPY src/Services/Identity/src/Identity/Identity.csproj src/Services/Identity/src/Identity/ +COPY src/Services/Identity/src/Identity.Api/Identity.Api.csproj src/Services/Identity/src/Identity.Api/ +COPY src/Aspire/src/ServiceDefaults/ServiceDefaults.csproj src/Aspire/src/ServiceDefaults/ -COPY ./src/BuildingBlocks/BuildingBlocks.csproj ./src/BuildingBlocks/ -COPY ./src/Services/Identity/src/Identity/Identity.csproj ./src/Services/Identity/src/Identity/ -COPY ./src/Services/Identity/src/Identity.Api/Identity.Api.csproj ./src/Services/Identity/src/Identity.Api/ -COPY ./src/Aspire/src/ServiceDefaults/ServiceDefaults.csproj ./src/Aspire/src/ServiceDefaults/ +# Restore dependencies +RUN dotnet restore src/Services/Identity/src/Identity.Api/Identity.Api.csproj -# Restore nuget packages -RUN dotnet restore ./src/Services/Identity/src/Identity.Api/Identity.Api.csproj +# Copy remaining source code +COPY src ./src -# Copy project files -COPY ./src/BuildingBlocks ./src/BuildingBlocks/ -COPY ./src/Services/Identity/src/Identity/ ./src/Services/Identity/src/Identity/ -COPY ./src/Services/Identity/src/Identity.Api/ ./src/Services/Identity/src/Identity.Api/ -COPY ./src/Aspire/src/ServiceDefaults/ ./src/Aspire/src/ServiceDefaults/ +# Publish (build included, no separate build step needed) +RUN dotnet publish src/Services/Identity/src/Identity.Api/Identity.Api.csproj \ + -c Release \ + -o /app/publish \ + --no-restore -# Build project with Release configuration -# and no restore, as we did it already +# ---------- Runtime Stage ---------- +FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime +WORKDIR /app -RUN ls -RUN dotnet build -c Release --no-restore ./src/Services/Identity/src/Identity.Api/Identity.Api.csproj +COPY --from=build /app/publish . -WORKDIR /src/Services/Identity/src/Identity.Api - -# Publish project to output folder -# and no build, as we did it already -RUN dotnet publish -c Release --no-build -o out - -FROM mcr.microsoft.com/dotnet/aspnet:10.0 - -# Setup working directory for the project -WORKDIR / -COPY --from=builder /src/Services/Identity/src/Identity.Api/out . - -ENV ASPNETCORE_URLS https://*:443, http://*:80 -ENV ASPNETCORE_ENVIRONMENT docker +ENV ASPNETCORE_URLS=http://+:80 +ENV ASPNETCORE_ENVIRONMENT=docker EXPOSE 80 -EXPOSE 443 - -ENTRYPOINT ["dotnet", "Identity.Api.dll"] +ENTRYPOINT ["dotnet", "Identity.Api.dll"] \ No newline at end of file diff --git a/src/Services/Identity/dev.Dockerfile b/src/Services/Identity/dev.Dockerfile deleted file mode 100644 index 778838b..0000000 --- a/src/Services/Identity/dev.Dockerfile +++ /dev/null @@ -1,52 +0,0 @@ -FROM mcr.microsoft.com/dotnet/sdk:10.0 AS builder - -# Setup working directory for the project -WORKDIR / - -COPY ./.editorconfig ./ -COPY ./global.json ./ -COPY ./Directory.Build.props ./ - -COPY ./src/BuildingBlocks/BuildingBlocks.csproj ./src/BuildingBlocks/ -COPY ./src/Services/Identity/src/Identity/Identity.csproj ./src/Services/Identity/src/Identity/ -COPY ./src/Services/Identity/src/Identity.Api/Identity.Api.csproj ./src/Services/Identity/src/Identity.Api/ -COPY ./src/Aspire/src/ServiceDefaults/ServiceDefaults.csproj ./src/Aspire/src/ServiceDefaults/ - -# Restore nuget packages -RUN --mount=type=cache,id=identity_nuget,target=/root/.nuget/packages \ - dotnet restore ./src/Services/Identity/src/Identity.Api/Identity.Api.csproj - -# Copy project files -COPY ./src/BuildingBlocks ./src/BuildingBlocks/ -COPY ./src/Services/Identity/src/Identity/ ./src/Services/Identity/src/Identity/ -COPY ./src/Services/Identity/src/Identity.Api/ ./src/Services/Identity/src/Identity.Api/ -COPY ./src/Aspire/src/ServiceDefaults/ ./src/Aspire/src/ServiceDefaults/ - -# Build project with Release configuration -# and no restore, as we did it already - -RUN ls -RUN --mount=type=cache,id=identity_nuget,target=/root/.nuget/packages \ - dotnet build -c Release --no-restore ./src/Services/Identity/src/Identity.Api/Identity.Api.csproj - -WORKDIR /src/Services/Identity/src/Identity.Api - -# Publish project to output folder -# and no build, as we did it already -RUN --mount=type=cache,id=identity_nuget,target=/root/.nuget/packages \ - dotnet publish -c Release --no-build -o out - -FROM mcr.microsoft.com/dotnet/aspnet:10.0 - -# Setup working directory for the project -WORKDIR / -COPY --from=builder /src/Services/Identity/src/Identity.Api/out . - -ENV ASPNETCORE_URLS https://*:443, http://*:80 -ENV ASPNETCORE_ENVIRONMENT docker - -EXPOSE 80 -EXPOSE 443 - -ENTRYPOINT ["dotnet", "Identity.Api.dll"] - diff --git a/src/Services/Passenger/Dockerfile b/src/Services/Passenger/Dockerfile index cbaa44d..bb4c41c 100644 --- a/src/Services/Passenger/Dockerfile +++ b/src/Services/Passenger/Dockerfile @@ -1,48 +1,39 @@ -FROM mcr.microsoft.com/dotnet/sdk:10.0 AS builder -WORKDIR / +# ---------- Build Stage ---------- +FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build +WORKDIR /src -COPY ./.editorconfig ./ -COPY ./global.json ./ -COPY ./Directory.Build.props ./ +# Copy solution-level files +COPY .editorconfig . +COPY global.json . +COPY Directory.Build.props . -# Setup working directory for the project -COPY ./src/BuildingBlocks/BuildingBlocks.csproj ./src/BuildingBlocks/ -COPY ./src/Services/Passenger/src/Passenger/Passenger.csproj ./src/Services/Passenger/src/Passenger/ -COPY ./src/Services/Passenger/src/Passenger.Api/Passenger.Api.csproj ./src/Services/Passenger/src/Passenger.Api/ -COPY ./src/Aspire/src/ServiceDefaults/ServiceDefaults.csproj ./src/Aspire/src/ServiceDefaults/ +# Copy project files first (better Docker layer caching) +COPY src/BuildingBlocks/BuildingBlocks.csproj src/BuildingBlocks/ +COPY src/Services/Passenger/src/Passenger/Passenger.csproj src/Services/Passenger/src/Passenger/ +COPY src/Services/Passenger/src/Passenger.Api/Passenger.Api.csproj src/Services/Passenger/src/Passenger.Api/ +COPY src/Aspire/src/ServiceDefaults/ServiceDefaults.csproj src/Aspire/src/ServiceDefaults/ -# Restore nuget packages -RUN dotnet restore ./src/Services/Passenger/src/Passenger.Api/Passenger.Api.csproj +# Restore dependencies +RUN dotnet restore src/Services/Passenger/src/Passenger.Api/Passenger.Api.csproj -# Copy project files -COPY ./src/BuildingBlocks ./src/BuildingBlocks/ -COPY ./src/Services/Passenger/src/Passenger/ ./src/Services/Passenger/src/Passenger/ -COPY ./src/Services/Passenger/src/Passenger.Api/ ./src/Services/Passenger/src/Passenger.Api/ -COPY ./src/Aspire/src/ServiceDefaults/ ./src/Aspire/src/ServiceDefaults/ +# Copy remaining source code +COPY src ./src -# Build project with Release configuration -# and no restore, as we did it already +# Publish (build included) +RUN dotnet publish src/Services/Passenger/src/Passenger.Api/Passenger.Api.csproj \ + -c Release \ + -o /app/publish \ + --no-restore -RUN ls -RUN dotnet build -c Release --no-restore ./src/Services/Passenger/src/Passenger.Api/Passenger.Api.csproj +# ---------- Runtime Stage ---------- +FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime +WORKDIR /app -WORKDIR /src/Services/Passenger/src/Passenger.Api +COPY --from=build /app/publish . -# Publish project to output folder -# and no build, as we did it already -RUN dotnet publish -c Release --no-build -o out - -FROM mcr.microsoft.com/dotnet/aspnet:10.0 - -# Setup working directory for the project -WORKDIR / -COPY --from=builder /src/Services/Passenger/src/Passenger.Api/out . - -ENV ASPNETCORE_URLS https://*:443, http://*:80 -ENV ASPNETCORE_ENVIRONMENT docker +ENV ASPNETCORE_URLS=http://+:80 +ENV ASPNETCORE_ENVIRONMENT=docker EXPOSE 80 -EXPOSE 443 - -ENTRYPOINT ["dotnet", "Passenger.Api.dll"] +ENTRYPOINT ["dotnet", "Passenger.Api.dll"] \ No newline at end of file diff --git a/src/Services/Passenger/dev.Dockerfile b/src/Services/Passenger/dev.Dockerfile deleted file mode 100644 index 1f11ecf..0000000 --- a/src/Services/Passenger/dev.Dockerfile +++ /dev/null @@ -1,51 +0,0 @@ -FROM mcr.microsoft.com/dotnet/sdk:10.0 AS builder -WORKDIR / - -COPY ./.editorconfig ./ -COPY ./global.json ./ -COPY ./Directory.Build.props ./ - -# Setup working directory for the project -COPY ./src/BuildingBlocks/BuildingBlocks.csproj ./src/BuildingBlocks/ -COPY ./src/Services/Passenger/src/Passenger/Passenger.csproj ./src/Services/Passenger/src/Passenger/ -COPY ./src/Services/Passenger/src/Passenger.Api/Passenger.Api.csproj ./src/Services/Passenger/src/Passenger.Api/ -COPY ./src/Aspire/src/ServiceDefaults/ServiceDefaults.csproj ./src/Aspire/src/ServiceDefaults/ - -# Restore nuget packages -RUN --mount=type=cache,id=passenger_nuget,target=/root/.nuget/packages \ - dotnet restore ./src/Services/Passenger/src/Passenger.Api/Passenger.Api.csproj - -# Copy project files -COPY ./src/BuildingBlocks ./src/BuildingBlocks/ -COPY ./src/Services/Passenger/src/Passenger/ ./src/Services/Passenger/src/Passenger/ -COPY ./src/Services/Passenger/src/Passenger.Api/ ./src/Services/Passenger/src/Passenger.Api/ -COPY ./src/Aspire/src/ServiceDefaults/ ./src/Aspire/src/ServiceDefaults/ - -# Build project with Release configuration -# and no restore, as we did it already - -RUN ls -RUN --mount=type=cache,id=passenger_nuget,target=/root/.nuget/packages \ - dotnet build -c Release --no-restore ./src/Services/Passenger/src/Passenger.Api/Passenger.Api.csproj - -WORKDIR /src/Services/Passenger/src/Passenger.Api - -# Publish project to output folder -# and no build, as we did it already -RUN --mount=type=cache,id=passenger_nuget,target=/root/.nuget/packages \ - dotnet publish -c Release --no-build -o out - -FROM mcr.microsoft.com/dotnet/aspnet:10.0 - -# Setup working directory for the project -WORKDIR / -COPY --from=builder /src/Services/Passenger/src/Passenger.Api/out . - -ENV ASPNETCORE_URLS https://*:443, http://*:80 -ENV ASPNETCORE_ENVIRONMENT docker - -EXPOSE 80 -EXPOSE 443 - -ENTRYPOINT ["dotnet", "Passenger.Api.dll"] -