From 290a2c1eab66b17ce19027c0dd587a61b0db021c Mon Sep 17 00:00:00 2001 From: Tobias Niegratschka Date: Sat, 25 Apr 2026 13:56:46 +0000 Subject: [PATCH] Dockerfile aktualisiert --- Dockerfile | 59 ++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 20 deletions(-) diff --git a/Dockerfile b/Dockerfile index 177329d..592a9fb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,28 +1,47 @@ -# Base-Image (Bleibt Alpine 3.15 für deine Aufgabe) -FROM alpine:3.23.3 +# syntax=docker/dockerfile:1 -# Pakete installieren (Hier lag der Fehler: apk statt apt-get) -# 'build-base' ist das Alpine-Äquivalent zu 'build-essential' -RUN apk add --no-cache \ - build-base \ - gcc \ - curl \ - vim \ - net-tools \ - bash +FROM alpine:3.20 AS builder -# Arbeitsverzeichnis setzen WORKDIR /app -# alles kopieren -COPY . . +# Build-Tools installieren +RUN apk add --no-cache build-base -# Code kompilieren -RUN gcc -o deployment deployment.c +# C-Datei kopieren und statisch kompilieren +COPY deployment.c . +RUN gcc -O2 -static -s -o deployment deployment.c -# Verzeichnis für Ausgabe anlegen -RUN mkdir /output +# Wir nehmen das kleinste mögliche Image (ca. 2MB) +FROM alpine:3.20 -# Wichtig: Alpine hat standardmäßig keine bash, daher oben mit installiert -ENTRYPOINT ["/bin/bash", "-c"] +# 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 +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 + +# 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 +VOLUME ["/output"] + +# 9. Startbefehl +ENTRYPOINT ["/bin/sh", "-c"] CMD ["./deployment 10 > /output/output.txt && tail -f /output/output.txt"] \ No newline at end of file