# Dockerfile per Windows # Multi-stage build per ottimizzare le dimensioni dell'immagine finale # Stage 1: Build FROM mcr.microsoft.com/dotnet/sdk:9.0-nanoserver-ltsc2022 AS build WORKDIR /src # Copia i file di progetto e ripristina le dipendenze COPY ["Data_Coupler/Data_Coupler.csproj", "Data_Coupler/"] COPY ["DataConnection/DataConnection.csproj", "DataConnection/"] COPY ["CredentialManager/CredentialManager.csproj", "CredentialManager/"] COPY ["Components/Components.csproj", "Components/"] COPY ["nuget.config", "./"] # Ripristina le dipendenze per tutti i progetti RUN dotnet restore "Data_Coupler/Data_Coupler.csproj" # Copia tutto il codice sorgente COPY . . # Build del progetto principale WORKDIR "/src/Data_Coupler" RUN dotnet build "Data_Coupler.csproj" -c Release -o /app/build # Stage 2: Publish FROM build AS publish RUN dotnet publish "Data_Coupler.csproj" -c Release -o /app/publish /p:UseAppHost=false # Stage 3: Runtime FROM mcr.microsoft.com/dotnet/aspnet:9.0-nanoserver-ltsc2022 AS final WORKDIR /app # Crea la directory per il database RUN mkdir C:\ProgramData\Data_Coupler # Copia i file pubblicati COPY --from=publish /app/publish . # Configura le variabili d'ambiente ENV ASPNETCORE_URLS=http://+:7550 ENV DOTNET_RUNNING_IN_CONTAINER=true ENV ASPNETCORE_ENVIRONMENT=Production # Espone la porta dell'applicazione EXPOSE 7550 # Health check HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \ CMD powershell -Command "try { $response = Invoke-WebRequest -Uri http://localhost:7550/health -UseBasicParsing -TimeoutSec 5; if ($response.StatusCode -eq 200) { exit 0 } else { exit 1 } } catch { exit 1 }" # Punto di ingresso ENTRYPOINT ["dotnet", "Data_Coupler.dll"]