removespread / Docker
DOCKER · МОДУЛЬ 06 · УРОК 1

Сборка, которую не страшно повторить

20 мин

Зависимости слоёв, кэш, фиксированные версии и границы многостадийной сборки.

Образ для команды~20 мин
После урока вы сможете
  • Объяснять промах кэша после COPY
  • Различать тег и digest
  • Читать COPY --from в многостадийном Dockerfile

Порядок отражает частоту изменений

В большом проекте установка зависимостей может занимать минуты, а исходник меняется несколько раз в час. Если сначала копировать весь проект, изменение одной строки кода заставит пересмотреть и следующие шаги сборки. Поэтому файлы зависимостей часто копируют раньше исходников.

# Схема для проекта с зависимостями, не для офлайн-лаборатории:
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY app.py .

BuildKit переиспользует подходящий результат из кэша, когда инструкция и её зависимости не изменились. Указанный у pip параметр относится к кэшу самого pip, а не отключает кэш Docker. В нашем сервере сторонних зависимостей нет — добавлять requirements.txt ради этой схемы не нужно.

В учебной проверке каждая попытка получает отдельную машину, поэтому нельзя рассчитывать на кэш прошлой попытки. Оптимизация не должна быть условием корректности: правильный проект собирается и на чистой машине.

Подробнее: оптимизация кэша в документации Docker.

Шаг 1 из 5