done
This commit is contained in:
parent
43985b8fe1
commit
ae54f81717
5 changed files with 151 additions and 130 deletions
59
Dockerfile
Normal file
59
Dockerfile
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
# 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"]
|
||||
Loading…
Add table
Add a link
Reference in a new issue