From 1ff64cdbad8f4ee25fa57e24982a98cc5d1dbc04 Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 11 Apr 2026 13:47:10 +0200 Subject: [PATCH] multistage --- Dockerfile | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/Dockerfile b/Dockerfile index c578f4f..ec7024c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,22 +1,35 @@ -# Base-Image -FROM ubuntu:resolute-20260404 +# ── Stage 1: Build ─────────────────────────────────────────────────────────── +FROM gcc:14-bookworm AS builder -# Pakete installieren -RUN apt-get update -RUN apt-get install -y build-essential gcc curl vim net-tools +WORKDIR /build +COPY deployment.c . -# Arbeitsverzeichnis setzen +# Statisch linken → kein libc im Runtime-Image nötig +RUN gcc -O2 -static -o deployment deployment.c + +# ── Stage 2: Runtime ───────────────────────────────────────────────────────── +FROM alpine:3.21 + +# Nicht-root-User anlegen +RUN addgroup -S appgroup && adduser -S appuser -G appgroup + +# Output-Verzeichnis mit korrekten Rechten anlegen +RUN mkdir /output && chown appuser:appgroup /output + +# Kompiliertes Binary aus Build-Stage kopieren +COPY --from=builder /build/deployment /app/deployment + +# Volume für Ausgabe-Dateien +VOLUME ["/output"] + +# Als nicht-root laufen +USER appuser WORKDIR /app -# alles kopieren -COPY . . +# Healthcheck: prüft ob das Binary vorhanden und ausführbar ist, +# und ob die Ausgabedatei wächst / existiert +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD test -f /output/output.txt && test -s /output/output.txt || exit 1 -# Code kompilieren -RUN gcc -o deployment deployment.c - -# Verzeichnis für Ausgabe anlegen -RUN mkdir /output - -# Ausgabe wird ins Container-Dateisystem geschrieben -ENTRYPOINT ["/bin/bash", "-c"] +ENTRYPOINT ["/bin/sh", "-c"] CMD ["./deployment 10 > /output/output.txt && tail -f /output/output.txt"] \ No newline at end of file