Dockerfile: COPY, lock-файл, DEBUG и воспроизводимый образ

Исправьте COPY, зафиксируйте образ и зависимости, отключите DEBUG и запускайте процесс непривилегированным пользователем. Для полной воспроизводимости нужны digest и lock-файл с хешами.

Короткий ответ

Что ответить на собеседовании

Исправьте COPY, зафиксируйте образ и зависимости, отключите DEBUG и запускайте процесс непривилегированным пользователем. Для полной воспроизводимости нужны digest и lock-файл с хешами.

Подробный разбор

Ответ с пояснениями

Условие

Практическое задание

AI подготовил Dockerfile для FastAPI. Проведи ревью и предложи исправленную версию: сделай сборку воспроизводимой, не запускай приложение с отладочными настройками и учти запуск контейнера без привилегий.

FROM python:3.12
WORKDIR /app
COPY .
RUN pip install -r requirements.txt
ENV DEBUG=true
EXPOSE 8000
CMD ["uvicorn", "app:app", "--host", "0.0.0.0"]

Ответ

Исправьте COPY, зафиксируйте образ и зависимости, отключите DEBUG и запускайте процесс непривилегированным пользователем. Для полной воспроизводимости нужны digest и lock-файл с хешами.

Пример требует передать проверенный образ python:3.12-slim@sha256:... через build-arg и подготовить requirements.lock с точными версиями всех зависимостей и хешами:

ARG PYTHON_IMAGE
FROM ${PYTHON_IMAGE}
WORKDIR /app
ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1 DEBUG=false
COPY requirements.lock ./
RUN pip install --no-cache-dir --require-hashes -r requirements.lock \
    && groupadd --gid 10001 app \
    && useradd --uid 10001 --gid app --no-create-home app
COPY --chown=10001:10001 . .
USER 10001:10001
EXPOSE 8000
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]

Исключите секреты и .git через .dockerignore. Код приложения должен интерпретировать DEBUG=false корректно. Дополнительно ограничьте capabilities и запись в файловую систему настройками запуска контейнера.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее