From 2583ba49062a8cd08ff2e888c38e0658e0bb5ad6 Mon Sep 17 00:00:00 2001 From: Tobias Niegratschka Date: Sat, 25 Apr 2026 14:01:43 +0000 Subject: [PATCH] Dockerfile aktualisiert --- Dockerfile | 43 ++++++++++++++++++------------------------- 1 file changed, 18 insertions(+), 25 deletions(-) diff --git a/Dockerfile b/Dockerfile index 592a9fb..734e858 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,47 +1,40 @@ # syntax=docker/dockerfile:1 +############################ +# 1) Builder: compilen +############################ FROM alpine:3.20 AS builder WORKDIR /app -# Build-Tools installieren +# Build-Tools nur im Builder RUN apk add --no-cache build-base -# C-Datei kopieren und statisch kompilieren +# Nur die C-Datei kopieren COPY deployment.c . + +# Kompilieren (statisch linken) RUN gcc -O2 -static -s -o deployment deployment.c -# Wir nehmen das kleinste mögliche Image (ca. 2MB) +############################ +# 2) Runtime: Minimaler Footprint +############################ FROM alpine:3.20 -# 1. Metadaten (optional aber gut für CI/CD) -LABEL maintainer="Security-Task" - -# 2. Non-Root User erstellen -# Wir erstellen eine Gruppe und einen User ohne Passwort -RUN addgroup -S appgroup && adduser -S appuser -G appgroup - -# 3. Arbeitsverzeichnis vorbereiten WORKDIR /app -# 4. Binary vom Builder kopieren +# Binary vom Builder kopieren COPY --from=builder /app/deployment . -# 5. Output-Verzeichnis für das Volume erstellen -# Wir müssen dem appuser die Rechte geben, damit er dort schreiben darf -RUN mkdir /output && chown appuser:appgroup /output +# Verzeichnis für das Volume erstellen +RUN mkdir /output -# 6. Auf den Non-Root User wechseln -USER appuser - -# 7. HEALTHCHECK implementieren -HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \ - CMD ls -s /output/output.txt | grep -qE '^[1-9][0-9]*' || exit 1 - -# 8. Volume definieren -# Damit die Daten permanent gespeichert werden können +# Datavolume mounten (leitet die Ausgabe nach außen) VOLUME ["/output"] -# 9. Startbefehl +# Healthcheck: Prüft, ob die Datei existiert und nicht leer ist +HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \ + CMD test -s /output/output.txt || exit 1 + ENTRYPOINT ["/bin/sh", "-c"] CMD ["./deployment 10 > /output/output.txt && tail -f /output/output.txt"] \ No newline at end of file