# -------------------------------------------------------------------------------------- # 1. ETAPA DE CONSTRUCCIÓN (BUILD STAGE) # Utiliza la imagen SDK para compilar la aplicación. # -------------------------------------------------------------------------------------- FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build WORKDIR /src COPY NuGet.Config . # Copia los archivos de proyecto (.csproj) de cada subdirectorio y restáuralos. # Esto aprovecha el caché de Docker si solo cambian los paquetes, no el código. COPY ["adas-core/adas-core.csproj", "adas-core/"] COPY ["adas-core.Application/adas-core.Application.csproj", "adas-core.Application/"] COPY ["adas-core.Authentication/adas-core.Authentication.csproj", "adas-core.Authentication/"] COPY ["adas-core.Domain/adas-core.Domain.csproj", "adas-core.Domain/"] COPY ["adas-core.Infrastructure/adas-core.Infrastructure.csproj", "adas-core.Infrastructure/"] COPY ["adas-core.LdapLogin/adas-core.LdapLogin.csproj", "adas-core.LdapLogin/"] COPY ["adas-core.LocalLogin/adas-core.LocalLogin.csproj", "adas-core.LocalLogin/"] COPY ["adas-core.module.LightBeacons/adas-core.module.LightBeacons.csproj", "adas-core.module.LightBeacons/"] COPY ["adas-core.module.ProxyDevices/adas-core.module.ProxyDevices.csproj", "adas-core.module.ProxyDevices/"] COPY ["adas-core.module.Relays/adas-core.module.Relays.csproj", "adas-core.module.Relays/"] COPY ["adas-core.Test/adas-core.Test.csproj", "adas-core.Test/"] # ... (Añade COPY para el resto de proyectos .csproj: LdapLogin, LocalLogin, modules, Test si son dependencias) # Copia el archivo de solución (.sln) si existe, si no, usa el siguiente comando con los .csproj # En este caso, asumiremos que se restaura y compila por proyecto principal. # Si tienes un archivo de solución, es mejor copiarlo aquí. # Restaura las dependencias (NuGet) RUN dotnet restore "adas-core/adas-core.csproj" # Copia el resto de los archivos fuente (todo el código) COPY . . # Cambia al directorio del proyecto principal WORKDIR /src/adas-core # Publica la aplicación final en modo Release # El argumento -o /app/publish indica dónde se guardará el resultado de la publicación. RUN dotnet publish "adas-core.csproj" -c Release -o /app/publish /p:UseAppHost=false # -------------------------------------------------------------------------------------- # 2. ETAPA FINAL (RUNTIME STAGE) # Utiliza la imagen de ejecución, que es más pequeña y no contiene herramientas de compilación. # -------------------------------------------------------------------------------------- FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final WORKDIR /app # Copia los archivos publicados desde la etapa 'build' COPY --from=build /app/publish . # Define el punto de entrada de la aplicación # Este es el nombre del ensamblado DLL principal ENTRYPOINT ["dotnet", "adas-core.dll"] # El puerto de escucha por defecto de ASP.NET Core en Docker es el 8080 (o 80 en versiones anteriores) ENV ASPNETCORE_URLS=http://+:80 EXPOSE 80