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