Docker BuildKit: кэш npm между сборками образа

Категория: docker · Язык: Dockerfile · Обновлено:

BuildKit cache mount сохраняет кэш пакетного менеджера между сборками и помогает ускорить повторный npm ci. В отличие от обычного слоя Docker, содержимое mount не попадает в итоговый образ. Для этого синтаксиса нужен BuildKit; используйте его, если сборки повторно устанавливают зависимости.

Добавить кэш npm в Dockerfile

Dockerfile
# syntax=docker/dockerfile:1
FROM node:22-alpine AS deps
WORKDIR /app

COPY package.json package-lock.json ./
RUN --mount=type=cache,target=/root/.npm \
    npm ci

target должен совпадать с каталогом кэша npm для пользователя внутри build stage. Если инструкции выполняются не от root, задайте соответствующий путь и, при необходимости, uid и gid в параметрах mount. При изменении lock-файла npm ci всё равно проверит и установит нужные версии, а подходящие архивы сможет взять из кэша.

Кэш принадлежит build cache и может быть очищен сборщиком; он не является хранилищем данных приложения. Для закрытых пакетов не добавляйте токены в ARG или ENV: используйте отдельный BuildKit secret mount.

Официальная документация: Dockerfile RUN --mount и оптимизация кэша сборки.