Files
AnonBot/Dockerfile

65 lines
2.2 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
###########################################
# Этап 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++ \
# Добавляем glibc для совместимости с пакетами, собранными на Ubuntu/Debian
gcompat \
# Дополнительные библиотеки для pydantic-core
libc6-compat
# Создаем пользователя (в 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"]