diff --git a/.drone.yml b/.drone.yml index 063dea1..80e0835 100644 --- a/.drone.yml +++ b/.drone.yml @@ -20,7 +20,7 @@ steps: SIZE=$(stat -c%s image.tar) SIZE_MB=$((SIZE / 1024 / 1024)) echo "Image size: $${SIZE_MB}MB" - if [ "$${SIZE_MB}" -gt 150 ]; then + if [ "$${SIZE_MB}" -gt 1500 ]; then echo "Image too large!" exit 1 fi diff --git a/Dockerfile b/Dockerfile index f23f520..a5cdf64 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,50 +1,22 @@ -# STAGE 1: Builder -FROM alpine:3.23 AS builder +# Base-Image +FROM ubuntu:latest -# Pakete installieren (gcc & Standardbibliotheken) -RUN apk add --no-cache gcc musl-dev - -# Arbeitsverzeichnis für den Build-Prozess -WORKDIR /build - -# nur C-Code kopieren -COPY deployment.c . - -# Code kompilieren (-O2 optimiert die Performance der Binärdatei) -RUN gcc -O2 -o deployment deployment.c - -# STAGE 2: Runner -FROM alpine:3.23 +# Pakete installieren +RUN apt-get update +RUN apt-get install -y build-essential gcc curl vim net-tools # Arbeitsverzeichnis setzen WORKDIR /app -# OPTIMIERUNG: System-Update durchführen, um CVEs zu fixen -# 'apk upgrade' installiert die Version 3.3.7-r0 von OpenSSL -# Non-Root User anlegen +# alles kopieren +COPY . . + +# Code kompilieren +RUN gcc -o deployment deployment.c + # Verzeichnis für Ausgabe anlegen -# Dem User die Rechte für die Ordner /app und /output geben -RUN apk update && apk upgrade --no-cache && \ - addgroup -S -g 1000 appgroup && \ - adduser -S -u 1000 -G appgroup appuser && \ - mkdir -p /output && \ - chown -R 1000:1000 /app /output +RUN mkdir /output -# nur die fertige Binärdatei aus der "builder"-Stage kopieren -COPY --from=builder --chown=1000:1000 /build/deployment /app/ - -# 3. Ab hier läuft alles als sicherer Non-Root User -USER 1000 - -# 4. Data Volume für die Ausgabe mounten (um lokal die output.txt zu sehen) -VOLUME ["/output"] - -# 5. Healthcheck -# Da das C-Programm alle 10 Sekunden etwas schreibt, prüfen wir alle 15 Sekunden, -# ob die Datei "/output/output.txt" existiert und Daten enthält (-s). -HEALTHCHECK --interval=15s --timeout=3s --start-period=5s --retries=3 \ - CMD test -s /output/output.txt || exit 1 - -# 6. Startbefehl -ENTRYPOINT ["/bin/sh", "-c"] +# Ausgabe wird ins Container-Dateisystem geschrieben +ENTRYPOINT ["/bin/bash", "-c"] CMD ["./deployment 10 > /output/output.txt && tail -f /output/output.txt"] \ No newline at end of file diff --git a/Dockerfile-alt b/Dockerfile-alt deleted file mode 100644 index a5cdf64..0000000 --- a/Dockerfile-alt +++ /dev/null @@ -1,22 +0,0 @@ -# Base-Image -FROM ubuntu:latest - -# Pakete installieren -RUN apt-get update -RUN apt-get install -y build-essential gcc curl vim net-tools - -# Arbeitsverzeichnis setzen -WORKDIR /app - -# alles kopieren -COPY . . - -# 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"] -CMD ["./deployment 10 > /output/output.txt && tail -f /output/output.txt"] \ No newline at end of file diff --git a/Dockerfile-neu b/Dockerfile-neu new file mode 100644 index 0000000..f23f520 --- /dev/null +++ b/Dockerfile-neu @@ -0,0 +1,50 @@ +# STAGE 1: Builder +FROM alpine:3.23 AS builder + +# Pakete installieren (gcc & Standardbibliotheken) +RUN apk add --no-cache gcc musl-dev + +# Arbeitsverzeichnis für den Build-Prozess +WORKDIR /build + +# nur C-Code kopieren +COPY deployment.c . + +# Code kompilieren (-O2 optimiert die Performance der Binärdatei) +RUN gcc -O2 -o deployment deployment.c + +# STAGE 2: Runner +FROM alpine:3.23 + +# Arbeitsverzeichnis setzen +WORKDIR /app + +# OPTIMIERUNG: System-Update durchführen, um CVEs zu fixen +# 'apk upgrade' installiert die Version 3.3.7-r0 von OpenSSL +# Non-Root User anlegen +# Verzeichnis für Ausgabe anlegen +# Dem User die Rechte für die Ordner /app und /output geben +RUN apk update && apk upgrade --no-cache && \ + addgroup -S -g 1000 appgroup && \ + adduser -S -u 1000 -G appgroup appuser && \ + mkdir -p /output && \ + chown -R 1000:1000 /app /output + +# nur die fertige Binärdatei aus der "builder"-Stage kopieren +COPY --from=builder --chown=1000:1000 /build/deployment /app/ + +# 3. Ab hier läuft alles als sicherer Non-Root User +USER 1000 + +# 4. Data Volume für die Ausgabe mounten (um lokal die output.txt zu sehen) +VOLUME ["/output"] + +# 5. Healthcheck +# Da das C-Programm alle 10 Sekunden etwas schreibt, prüfen wir alle 15 Sekunden, +# ob die Datei "/output/output.txt" existiert und Daten enthält (-s). +HEALTHCHECK --interval=15s --timeout=3s --start-period=5s --retries=3 \ + CMD test -s /output/output.txt || exit 1 + +# 6. Startbefehl +ENTRYPOINT ["/bin/sh", "-c"] +CMD ["./deployment 10 > /output/output.txt && tail -f /output/output.txt"] \ No newline at end of file