# ---- Étape build (SDK) ---- # NOTE : le contexte de build est la RACINE du dépôt (voir docker-compose.yml), # afin de pouvoir embarquer les documents de spécification (.kiro/specs). Les chemins # sont donc relatifs à la racine (préfixe backend/). FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build WORKDIR /src COPY backend/*.sln ./ COPY backend/SchotzIadKmTracker.Api/*.csproj SchotzIadKmTracker.Api/ RUN dotnet restore SchotzIadKmTracker.Api/SchotzIadKmTracker.Api.csproj COPY backend/ . RUN dotnet publish SchotzIadKmTracker.Api/SchotzIadKmTracker.Api.csproj -c Release -o /app/publish # ---- Étape runtime (ASP.NET) ---- FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime WORKDIR /app # curl est requis pour le HEALTHCHECK Docker (l'image aspnet ne l'inclut pas par défaut). RUN apt-get update \ && apt-get install -y --no-install-recommends curl \ && rm -rf /var/lib/apt/lists/* COPY --from=build /app/publish . # Documents de spécification embarqués (lus par SpecsController) : l'application est # ainsi autonome, sans dépendre d'un montage du dépôt à l'exécution. # On copie via un motif *.md (et non 3 sources listées) : forme robuste avec le # classic builder ET BuildKit, qui n'embarque que les Markdown (pas .config.kiro # ni tasks.meta.json). La destination se termine par « / » : dossier créé au besoin. COPY .kiro/specs/schotziad-km-tracker/*.md ./specs/ # Répertoire du volume pour la base SQLite persistée RUN mkdir -p /data VOLUME ["/data"] # La base SQLite est stockée sur le volume monté ; le chemin est fourni via la chaîne de connexion ENV ConnectionStrings__Default="Data Source=/data/trajets.db" ENV ASPNETCORE_URLS="http://+:8080" EXPOSE 8080 # Sonde de santé intégrée à l'image (utilisée aussi par Docker Compose). HEALTHCHECK --interval=30s --timeout=5s --retries=3 --start-period=20s \ CMD curl -f http://localhost:8080/health || exit 1 ENTRYPOINT ["dotnet", "SchotzIadKmTracker.Api.dll"]