# Stage 1: Builder FROM python:3.12-slim AS builder # Аргументы для сборки ARG PIP_INDEX_URL=https://pypi.org/simple ARG BUILD_ENV=production WORKDIR /app # Оптимизация слоев: сначала копируем только зависимости COPY requirements.txt . # Кэширование зависимостей RUN --mount=type=cache,target=/root/.cache/pip \ pip install --no-cache-dir \ --index-url ${PIP_INDEX_URL} \ -r requirements.txt # Stage 2: Final FROM python:3.12-slim # Метки для трекинга LABEL maintainer="Vic Sergeev" \ version="1.0.0" \ build-date="${BUILD_DATE}" \ git-commit="${GIT_COMMIT}" # Создание пользователя RUN groupadd -r appuser && useradd -r -g appuser appuser # Установка системных пакетов RUN apt-get update && apt-get install -y \ curl \ tini \ && rm -rf /var/lib/apt/lists/* WORKDIR /app # Копирование зависимостей COPY --from=builder --chown=appuser:appuser \ /usr/local/lib/python3.12/site-packages \ /usr/local/lib/python3.12/site-packages COPY --from=builder --chown=appuser:appuser \ /usr/local/bin \ /usr/local/bin # Копирование приложения COPY --chown=appuser:appuser . . # Переключение на пользователя USER appuser # Healthcheck HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ CMD curl -f http://localhost:8000/health || exit 1 # Использование tini для правильной обработки сигналов ENTRYPOINT ["/usr/bin/tini", "--"] CMD ["python", "main.py"]