# ========================================== # STAGE 1: Build (Der "Werkzeugkasten") # ========================================== FROM alpine:latest AS builder # Installiere den C-Compiler (nur für diesen Schritt!) RUN apk add --no-cache build-base # Arbeitsverzeichnis setzen WORKDIR /app # Code hineinkopieren COPY . . # Code kompilieren RUN gcc -o deployment deployment.c # ========================================== # STAGE 2: Runtime (Das finale, kleine Image) # ========================================== FROM alpine:latest # 1. Non-Root User anlegen (Sicherheitskriterium) RUN addgroup -S appgroup && adduser -S appuser -G appgroup # Arbeitsverzeichnis setzen WORKDIR /app # 2. Nur das fertige Programm aus STAGE 1 kopieren COPY --from=builder /app/deployment . # 3. Output-Ordner erstellen und dem neuen User die Rechte geben RUN mkdir /output && chown appuser:appgroup /output # 4. Ab hier wird der Container als normaler User (nicht root) ausgeführt! USER appuser # 5. Datavolume deklarieren VOLUME ["/output"] # 6. Healthcheck implementieren # Prüft alle 30s, ob die output.txt existiert. Wenn ja -> healthy HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \ CMD test -f /output/output.txt || exit 1 # 7. Startbefehl (identisch zur alten Version) CMD ["sh", "-c", "./deployment 10 > /output/output.txt && tail -f /output/output.txt"]