########################################### # Этап 1: Сборщик (Builder) ########################################### FROM python:3.9-slim as builder # Устанавливаем ВСЁ для сборки RUN apt-get update && apt-get install -y \ gcc \ g++ \ python3-dev \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY requirements.txt . # Устанавливаем зависимости в отдельную папку RUN pip install --no-cache-dir --target /install -r requirements.txt ########################################### # Этап 2: Финальный образ (Runtime) ########################################### FROM python:3.9-alpine as runtime # Устанавливаем ТОЛЬКО НЕОБХОДИМЫЕ рантайм-зависимости # curl НЕ НУЖЕН - используем встроенный Python для healthcheck RUN apk add --no-cache \ # Минимальные библиотеки для работы Python-пакетов libstdc++ # Создаем пользователя (в Alpine Linux другие команды) RUN addgroup -g 1001 app && \ adduser -D -u 1001 -G app app WORKDIR /app # Копируем зависимости из сборщика COPY --from=builder --chown=1001:1001 /install /usr/local/lib/python3.9/site-packages # Создаем директории для данных RUN mkdir -p database logs && \ chown -R 1001:1001 /app # Копируем исходный код COPY --chown=1001:1001 . . USER 1001:1001 # Открываем порты EXPOSE 8081 # Устанавливаем переменные окружения ENV PYTHONPATH=/app ENV PYTHONUNBUFFERED=1 # Healthcheck БЕЗ curl - используем встроенный Python HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \ CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8081/health', timeout=5)" || exit 1 # Команда по умолчанию CMD ["python", "main.py"]