upd Dockerfile
This commit is contained in:
parent
79df38a95c
commit
25c896f809
2 changed files with 75 additions and 49 deletions
65
Dockerfile
65
Dockerfile
|
|
@ -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
|
FROM python:3.12-slim
|
||||||
|
|
||||||
# Метки для трекинга
|
# Установка curl для healthcheck
|
||||||
LABEL maintainer="Vic Sergeev" \
|
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
|
||||||
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
|
WORKDIR /app
|
||||||
|
|
||||||
# Копирование зависимостей
|
COPY requirements.txt .
|
||||||
COPY --from=builder --chown=appuser:appuser \
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
/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 . .
|
||||||
COPY --chown=appuser:appuser . .
|
|
||||||
|
|
||||||
# Переключение на пользователя
|
# Создаем non-root пользователя
|
||||||
|
RUN groupadd -r appuser && useradd -r -g appuser appuser
|
||||||
USER appuser
|
USER appuser
|
||||||
|
|
||||||
# Healthcheck
|
EXPOSE 5000
|
||||||
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
|
|
||||||
CMD curl -f http://localhost:8000/health || exit 1
|
|
||||||
|
|
||||||
# Использование tini для правильной обработки сигналов
|
HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
|
||||||
ENTRYPOINT ["/usr/bin/tini", "--"]
|
CMD curl -f http://localhost:5000/health || exit 1
|
||||||
CMD ["python", "main.py"]
|
|
||||||
|
# Вариант 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"]
|
||||||
59
Dockerfile.bak
Normal file
59
Dockerfile.bak
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