From fb496c5e3492674cddd2193bbad9b7b6676bfe0d Mon Sep 17 00:00:00 2001 From: Benjamin Admin Date: Thu, 26 Feb 2026 17:43:24 +0100 Subject: [PATCH] perf(klausur-service): split Dockerfile into base + app layer Tesseract OCR + 70 Debian packages + pip dependencies are now in a separate base image (klausur-base:latest) that is built once and reused. A --no-cache build now only rebuilds the code layer (~seconds) instead of re-downloading 33 MB of system packages (~9 minutes). Rebuild base when requirements.txt or system deps change: docker build -f klausur-service/Dockerfile.base -t klausur-base:latest klausur-service/ Co-Authored-By: Claude Opus 4.6 --- klausur-service/Dockerfile | 21 ++++++--------------- klausur-service/Dockerfile.base | 24 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 15 deletions(-) create mode 100644 klausur-service/Dockerfile.base diff --git a/klausur-service/Dockerfile b/klausur-service/Dockerfile index 48fe6a2..9577b93 100644 --- a/klausur-service/Dockerfile +++ b/klausur-service/Dockerfile @@ -8,24 +8,15 @@ RUN npm install COPY frontend/ ./ RUN npm run build -# Production stage -FROM python:3.11-slim +# Production stage — uses pre-built base with Tesseract + Python deps. +# Base image contains: python:3.11-slim + tesseract-ocr + all pip packages. +# Rebuild base only when requirements.txt or system deps change: +# docker build -f klausur-service/Dockerfile.base -t klausur-base:latest klausur-service/ +FROM klausur-base:latest WORKDIR /app -# Install system dependencies (incl. Tesseract OCR for bounding-box extraction) -RUN apt-get update && apt-get install -y --no-install-recommends \ - curl \ - tesseract-ocr \ - tesseract-ocr-deu \ - tesseract-ocr-eng \ - && rm -rf /var/lib/apt/lists/* - -# Install Python dependencies -COPY backend/requirements.txt ./ -RUN pip install --no-cache-dir -r requirements.txt - -# Copy backend code +# Copy backend code (this is the only layer that changes on code edits) COPY backend/ ./ # Copy built frontend to the expected path diff --git a/klausur-service/Dockerfile.base b/klausur-service/Dockerfile.base new file mode 100644 index 0000000..7e37728 --- /dev/null +++ b/klausur-service/Dockerfile.base @@ -0,0 +1,24 @@ +# Base image with system dependencies + Python packages. +# These change rarely — build once, reuse on every --no-cache. +# +# Rebuild manually when requirements.txt or system deps change: +# docker build -f klausur-service/Dockerfile.base -t klausur-base:latest klausur-service/ +# +FROM python:3.11-slim + +WORKDIR /app + +# System dependencies (Tesseract OCR, curl for healthcheck) +RUN apt-get update && apt-get install -y --no-install-recommends \ + curl \ + tesseract-ocr \ + tesseract-ocr-deu \ + tesseract-ocr-eng \ + && rm -rf /var/lib/apt/lists/* + +# Python dependencies +COPY backend/requirements.txt ./ +RUN pip install --no-cache-dir -r requirements.txt + +# Clean up pip cache +RUN rm -rf /root/.cache/pip