# Multi-Stage Build # ============================================ # Build Stage # ============================================ FROM debian:bookworm-slim AS build # Nur die benötigten Pakete installieren und danach Metadaten löschen die man nur für die INstallation braucht RUN apt-get update \ && apt-get install -y --no-install-recommends gcc libc6-dev \ && rm -rf /var/lib/apt/lists/* # WORKDIR setzen WORKDIR /app # Source Code kopieren COPY . . # Compile RUN gcc -o deployment deployment.c # ============================================ # Runtime Stage # ============================================ FROM debian:bookworm-slim AS runtime # Curl für den HEALTHCHECK RUN apt-get update \ && apt-get install -y --no-install-recommends curl \ && rm -rf /var/lib/apt/lists/* # Das output directory erstellen RUN mkdir -p /output # User ohne Root-Rechte erstellen RUN useradd -m app # Der User app braucht die Rechte für den Ordner output RUN chown -R app:app /output # Das Binary aus der Build-Stage kopieren COPY --from=build /app/deployment /app/deployment # WORKDIR setzen WORKDIR /app #output als Mount angeben VOLUME ["/output"] # Auf den app User wechseln USER app # Programm starten ENTRYPOINT ["/bin/bash", "-c"] CMD ["./deployment 10 > /output/output.txt && tail -f /output/output.txt"] # prüfen ob output.txt existiert und aktualisiert wird HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD test -f /output/output.txt && test $(find /output/output.txt -mmin -1) && echo "healthy" || exit 1