diff --git a/Dockerfile b/Dockerfile index e1fbd64..7838d8e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,43 +1,17 @@ -FROM debian:stable-slim AS builder +# syntax=docker/dockerfile:1 -RUN apt-get update && apt-get install -y \ - build-essential \ - gcc \ - && rm -rf /var/lib/apt/lists/* +############################ +# 1) Builder: compilen +############################ +FROM alpine:3.20 AS builder -# Arbeitsverzeichnis für den Bau -WORKDIR /build +WORKDIR /app -# Kopiere NUR die Quelldatei deployment.c +# Build-Tools nur im Builder +RUN apk add --no-cache build-base + +# Nur die C-Datei kopieren (kleinerer Build-Context / besserer Cache) COPY deployment.c . -RUN gcc -o deployment deployment.c -static - - -FROM alpine:latest - -RUN addgroup -S appgroup && adduser -S appuser -G appgroup - -# 2. Arbeitsverzeichnis und Mount-Point vorbereiten -WORKDIR /app -# Erstelle das /output Verzeichnis IM Container und übergebe die Rechte an appuser -RUN mkdir /output && chown appuser:appgroup /output - -COPY --from=builder /build/deployment . -# Rechte anpassen -RUN chown appuser:appgroup deployment - -# Wechsel zum Non-Root User -USER appuser - -# 4. Datavolume definieren (Mount-Point) -VOLUME ["/output"] - -# 5. HEALTHCHECK implementieren -# Wir prüfen alle 30s, ob die App überhaupt läuft. -HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \ - CMD pgrep deployment || exit 1 - -# Startbefehl anpassen (für sh statt bash, was in alpine standard ist) -ENTRYPOINT ["/bin/sh", "-c"] -CMD ["./deployment 10 > /output/output.txt && tail -f /output/output.txt"] \ No newline at end of file +# Kompilieren (statisch linken -> runtime braucht keine libc) +RUN gcc -O2 -static -s -o deployment deployment.c \ No newline at end of file