68 lines
3.3 KiB
Docker
68 lines
3.3 KiB
Docker
# ─────────────────────────────────────────────────────────────────────────────
|
|
# FinlyticFundamentals — Application Dockerfile
|
|
#
|
|
# Prerequisite: The Playwright base image must exist locally.
|
|
# docker build -f FinlyticNews/Dockerfile.playwright-base `
|
|
# -t finlytic-playwright-base:1.49.0 `
|
|
# FinlyticNews
|
|
#
|
|
# Then build this image as normal:
|
|
# docker compose build finlyticfundamentals
|
|
# — or —
|
|
# docker build -f FinlyticFundamentals/Dockerfile -t finlyticfundamentals .
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
# ── Stage 1: Build ────────────────────────────────────────────────────────────
|
|
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
|
|
ARG BUILD_CONFIGURATION=Release
|
|
WORKDIR /src
|
|
|
|
# Restore dependencies first (cached until .csproj changes)
|
|
COPY ["FinlyticFundamentals/FinlyticFundamentals.csproj", "FinlyticFundamentals/"]
|
|
COPY ["FinlyticCore/FinlyticCore.csproj", "FinlyticCore/"]
|
|
RUN dotnet restore "FinlyticFundamentals/FinlyticFundamentals.csproj"
|
|
|
|
# Build
|
|
COPY . .
|
|
WORKDIR "/src/FinlyticFundamentals"
|
|
RUN dotnet build "./FinlyticFundamentals.csproj" -c $BUILD_CONFIGURATION -o /app/build
|
|
|
|
# ── Stage 2: Publish ──────────────────────────────────────────────────────────
|
|
FROM build AS publish
|
|
ARG BUILD_CONFIGURATION=Release
|
|
# PlaywrightCopyPlaywrightFilesToOutput copies the Node driver + CLI into /app/publish/.playwright
|
|
# We only need this to get the playwright CLI script; browsers come from the base image.
|
|
RUN dotnet publish "./FinlyticFundamentals.csproj" \
|
|
-c $BUILD_CONFIGURATION \
|
|
-o /app/publish \
|
|
/p:UseAppHost=false \
|
|
/p:PlaywrightCopyPlaywrightFilesToOutput=true
|
|
|
|
# ── Stage 3: Final ────────────────────────────────────────────────────────────
|
|
# Use the pre-built base image that already has Chromium + all OS dependencies.
|
|
# This layer is cached on Docker Desktop and NOT re-downloaded on code changes.
|
|
FROM finlytic-playwright-base:1.49.0 AS final
|
|
|
|
USER root
|
|
WORKDIR /app
|
|
|
|
# Copy published application
|
|
COPY --from=publish /app/publish .
|
|
|
|
# The Playwright CLI + Node driver are published into .playwright by the build above.
|
|
# Verify the driver is present (sanity check — doesn't install anything).
|
|
RUN test -d /app/.playwright && \
|
|
test -f /app/.playwright/node/linux-x64/node && \
|
|
chmod +x /app/.playwright/node/linux-x64/node && \
|
|
echo "✅ Playwright driver present"
|
|
|
|
# Browsers are already in /opt/ms-playwright from the base image — nothing to download.
|
|
ENV PLAYWRIGHT_BROWSERS_PATH=/opt/ms-playwright
|
|
|
|
# Fix ownership
|
|
RUN chown -R $APP_UID:$APP_UID /app /opt/ms-playwright
|
|
|
|
USER $APP_UID
|
|
|
|
ENTRYPOINT ["dotnet", "FinlyticFundamentals.dll"]
|