# Base-Image #FROM ubuntu:latest # Pakete installieren #RUN apt-get update && apt-get install -y build-essential gcc curl vim net-tools # Stage 1: Bauen (mit Alpine + gcc) FROM alpine:3.19 AS build-env # Pakete installieren RUN apk add --no-cache gcc musl-dev # Arbeitsverzeichnis setzen WORKDIR /app # alles kopieren --> nur noch deployment.c kopieren! COPY deployment.c . # Code kompilieren RUN gcc -o deployment deployment.c # Stage 2: Schlankes Runtime-Image FROM alpine:3.19 # Verzeichnis für Ausgabe anlegen RUN mkdir /output # Nicht-Root-User anlegen RUN addgroup -S appgroup && adduser -S appuser -G appgroup RUN chown appuser:appgroup /output # Nur die fertige Binary aus Stage 1 übernehmen COPY --from=build-env /app/deployment /app/deployment # Volume für Ausgabe VOLUME ["/output"] # Non-root User setzen USER appuser # Healthcheck: prüft ob das Output-Verzeichnis erreichbar ist HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \ CMD test -d /output || exit 1 # Ausgabe wird ins Container-Dateisystem geschrieben ENTRYPOINT ["/bin/bash", "-c"] CMD ["./deployment 10 > /output/output.txt && tail -f /output/output.txt"]