From 1bfd977d6f76ccb64d9cd1840c72a632b89517b9 Mon Sep 17 00:00:00 2001 From: Johannes Date: Sat, 11 Apr 2026 12:49:10 +0000 Subject: [PATCH] Dockerfile changed according to task --- Dockerfile | 57 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 45 insertions(+), 12 deletions(-) diff --git a/Dockerfile b/Dockerfile index a5cdf64..5d250ef 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,22 +1,55 @@ -# Base-Image -FROM ubuntu:latest +# Multi-Stage Build -# Pakete installieren -RUN apt-get update -RUN apt-get install -y build-essential gcc curl vim net-tools +# ============================================ +# Build Stage +# ============================================ +FROM debian:bookworm-slim AS build -# Arbeitsverzeichnis setzen +# 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 -# alles kopieren +# Source Code kopieren COPY . . -# Code kompilieren +# Compile RUN gcc -o deployment deployment.c -# Verzeichnis für Ausgabe anlegen -RUN mkdir /output +# ============================================ +# Runtime Stage +# ============================================ +FROM debian:bookworm-slim AS runtime -# Ausgabe wird ins Container-Dateisystem geschrieben +# 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 +USER app + +# Das Binary aus der Build-Stage kopieren +COPY --from=build /app/deployment /app/deployment + +# WORKDIR setzen +WORKDIR /app + +#output als Mount angeben +VOLUME ["/output"] + +# Programm starten ENTRYPOINT ["/bin/bash", "-c"] -CMD ["./deployment 10 > /output/output.txt && tail -f /output/output.txt"] \ No newline at end of file +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 +