PassFront
  1. PassFront
  2. База знаний
  3. Dockerfile и образы

Как работает кеш слоёв Docker и в каком порядке писать инструкции?

Dockerfile и образы

Каждая инструкция Dockerfile создаёт слой. Docker переиспользует слой из кеша, если инструкция и входные файлы не изменились, а при изменении пересобирает этот слой и все следующие.

Правило порядка

Редко меняющееся ставят выше, часто меняющееся ниже.

# плохо: любая правка кода сбрасывает установку зависимостей
COPY . .
RUN npm ci

# хорошо: зависимости ставятся из кеша, пока не менялся package.json
COPY package*.json ./
RUN npm ci
COPY . .

Дополнительные приёмы

  • Файл .dockerignore исключает node_modules, .git, логи и временные файлы из контекста сборки: сборка быстрее, а кеш не ломается лишними изменениями.
  • Объединять связанные команды в один RUN, чтобы не создавать лишних слоёв и убирать кеш пакетного менеджера в той же команде.
  • Использовать кеш-монтирование BuildKit: RUN --mount=type=cache,target=/root/.npm npm ci.

Коротко для собеседования

Порядок инструкций определяет эффективность кеша: сначала манифесты и установка зависимостей, потом исходники. .dockerignore обязателен.

Другие вопросы раздела