Dockerfile 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS base
  2. USER $APP_UID
  3. WORKDIR /app
  4. EXPOSE 8080
  5. EXPOSE 8081
  6. FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
  7. ARG BUILD_CONFIGURATION=Release
  8. WORKDIR /src
  9. COPY ["RackPeek.Web/RackPeek.Web.csproj", "RackPeek.Web/"]
  10. COPY ["RackPeek.Domain/RackPeek.Domain.csproj", "RackPeek.Domain/"]
  11. COPY ["Shared.Rcl/Shared.Rcl.csproj", "Shared.Rcl/"]
  12. COPY ["RackPeek/RackPeek.csproj", "RackPeek/"]
  13. RUN dotnet restore "RackPeek.Web/RackPeek.Web.csproj"
  14. COPY . .
  15. # Build Web
  16. WORKDIR "/src/RackPeek.Web"
  17. RUN dotnet publish "./RackPeek.Web.csproj" -c $BUILD_CONFIGURATION -o /app/web-publish /p:UseAppHost=false
  18. # Build CLI (framework dependent, small)
  19. WORKDIR "/src/RackPeek"
  20. RUN dotnet publish "./RackPeek.csproj" -c $BUILD_CONFIGURATION -o /app/cli-publish /p:UseAppHost=false
  21. FROM base AS final
  22. WORKDIR /app
  23. USER root
  24. # Create shared config dir
  25. RUN mkdir -p /app/config && chown -R $APP_UID /app/config
  26. VOLUME ["/app/config"]
  27. # Copy Web app
  28. COPY --from=build /app/web-publish .
  29. # Copy CLI publish output
  30. COPY --from=build /app/cli-publish /usr/local/bin/rpk-dir
  31. # If AppHost exists, use it. Otherwise create wrapper.
  32. RUN if [ -f /usr/local/bin/rpk-dir/RackPeek ]; then \
  33. mv /usr/local/bin/rpk-dir/RackPeek /usr/local/bin/rpk; \
  34. else \
  35. echo '#!/bin/sh\nexec dotnet /usr/local/bin/rpk-dir/RackPeek.dll "$@"' > /usr/local/bin/rpk && \
  36. chmod +x /usr/local/bin/rpk; \
  37. fi
  38. # Set environment variable so CLI uses shared config
  39. ENV RPK_YAML_DIR=/app/config
  40. USER $APP_UID
  41. ENTRYPOINT ["dotnet", "RackPeek.Web.dll"]