# Multi-Stage Build # ============================================ # Build Stage # ============================================ FROM alpine:latest AS build # Nur die benötigten Pakete installieren mit --no-chache RUN apk add --no-cache gcc musl-dev # WORKDIR setzen WORKDIR /app # Source Code kopieren COPY . . # Compile RUN gcc -o deployment deployment.c # ============================================ # Runtime Stage # ============================================ FROM alpine:latest AS runtime # Curl für den HEALTHCHECK RUN apk add --no-cache curl # Das output directory erstellen RUN mkdir -p /output # User ohne Root-Rechte erstellen RUN adduser -D 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/sh", "-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 [ -f /output/output.txt ] && \ [ $(find /output/output.txt -mmin -1 | wc -l) -gt 0 ] || exit 1