diff --git a/Dockerfile b/Dockerfile index 141e36a..831f799 100644 --- a/Dockerfile +++ b/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 -# Метки для трекинга -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"] \ No newline at end of file +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"] \ No newline at end of file diff --git a/Dockerfile.bak b/Dockerfile.bak new file mode 100644 index 0000000..141e36a --- /dev/null +++ b/Dockerfile.bak @@ -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"] \ No newline at end of file