From eb6da3d9cfc3be2f0a102096ed3022f681620de1 Mon Sep 17 00:00:00 2001 From: Rene Luria Date: Tue, 7 Oct 2025 07:58:08 +0200 Subject: [PATCH] feat: multi-stage build for slim image --- Dockerfile | 42 ++++++++++++++++++++---------------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3a5ca57..2d79c38 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,28 +1,27 @@ # Use Python 3.13 slim image as base -FROM python:3.13-slim +FROM python:3.13-slim AS builder # Set working directory WORKDIR /app -# Set environment variables -ENV PYTHONDONTWRITEBYTECODE=1 \ - PYTHONUNBUFFERED=1 \ - POETRY_NO_INTERACTION=1 \ - POETRY_VENV_IN_PROJECT=1 \ - POETRY_CACHE_DIR=/tmp/poetry_cache - -# Install system dependencies -RUN apt-get update && apt-get install -y \ - build-essential \ - curl \ - && rm -rf /var/lib/apt/lists/* +# # Install system dependencies +# RUN apt-get update && apt-get install -y \ +# build-essential \ +# curl \ +# && rm -rf /var/lib/apt/lists/* # Copy requirements file COPY requirements.txt . # Install Python dependencies -RUN pip install --no-cache-dir --upgrade pip && \ - pip install --no-cache-dir -r requirements.txt +RUN pip install --no-cache-dir --no-deps \ + --disable-pip-version-check \ + --target=/app/site-packages \ + -r requirements.txt + +FROM python:3.13-slim + +COPY --from=builder /app/site-packages /app/site-packages # Create a non-root user RUN adduser --disabled-password --gecos '' appuser @@ -31,8 +30,11 @@ RUN adduser --disabled-password --gecos '' appuser COPY ./app /app/app COPY ./generate_math_exercises.py /app/ -# Change ownership of the app directory to the non-root user -RUN chown -R appuser:appuser /app +ENV PYTHONPATH=/app/site-packages +ENV PATH=/app/site-packages/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + +# Set working directory +WORKDIR /app # Switch to non-root user USER appuser @@ -40,9 +42,5 @@ USER appuser # Expose port EXPOSE 8000 -# Health check -HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \ - CMD curl -f http://localhost:8000/health || exit 1 - # Run the application -CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"] \ No newline at end of file +CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]