Files
watcher/Dockerfile

50 lines
1.3 KiB
Docker

# 1. Build-Phase: SDK-Image
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /app
# Projektdateien kopieren und Abhängigkeiten wiederherstellen
COPY *.sln .
COPY Watcher/*.csproj ./Watcher/
RUN dotnet restore
# Restliche Dateien kopieren und Build ausführen
COPY Watcher/. ./Watcher/
WORKDIR /app/Watcher
RUN dotnet publish -c Release -o /app/publish /p:UseAppHost=false
# 2. Laufzeit-Phase: ASP.NET Core Runtime
FROM mcr.microsoft.com/dotnet/aspnet:8.0
# Build-Argument für Version (wird zur Build-Zeit vom CI/CD gesetzt)
ARG VERSION=latest
# Install curl for health checks
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
# Create non-root user
RUN groupadd -r watcher -g 1000 && useradd -r -g watcher -u 1000 watcher
WORKDIR /app
COPY --from=build /app/publish .
# Stelle sicher, dass Verzeichnisse existieren und Berechtigungen gesetzt sind
RUN mkdir -p /app/persistence /app/wwwroot/downloads/sqlite /app/logs && \
chown -R watcher:watcher /app
# Volumes
VOLUME ["/app/persistence", "/app/wwwroot/downloads/sqlite", "/app/logs"]
# Switch to non-root user
USER watcher
# Expose Port 5000
EXPOSE 5000
ENV ASPNETCORE_URLS=http://*:5000
ENV ASPNETCORE_ENVIRONMENT=Production
# Version als Environment Variable setzen
ENV WATCHER_VERSION=${VERSION}
# Anwendung starten
ENTRYPOINT ["dotnet", "Watcher.dll"]