upd Dockerfile

This commit is contained in:
Norvicdev 2026-08-04 16:52:09 +03:00
parent 79df38a95c
commit 25c896f809
2 changed files with 75 additions and 49 deletions

View file

@ -1,59 +1,26 @@
# 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/*
# Установка curl для healthcheck
RUN apt-get update && apt-get install -y curl && 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 requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Копирование приложения
COPY --chown=appuser:appuser . .
COPY . .
# Переключение на пользователя
# Создаем non-root пользователя
RUN groupadd -r appuser && useradd -r -g appuser appuser
USER appuser
# Healthcheck
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
CMD curl -f http://localhost:8000/health || exit 1
EXPOSE 5000
# Использование tini для правильной обработки сигналов
ENTRYPOINT ["/usr/bin/tini", "--"]
CMD ["python", "main.py"]
HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
CMD curl -f http://localhost:5000/health || exit 1
# Вариант 1: Запуск через Python
CMD ["python", "-c", "from main import app; app.run(host='0.0.0.0', port=5000)"]
# Вариант 2: Если используете gunicorn
# CMD ["gunicorn", "--bind", "0.0.0.0:5000", "main:app"]