Одна из частых ошибок в Dockerfile:
COPY . .
RUN npm install
или:
COPY . .
RUN go mod download
Проблема в том, что Docker cache ломается при любом изменении любого файла.
Поменял README, тест, конфиг или один исходник — слой
COPY . . изменился, значит зависимости снова скачиваются и билд становится медленным.Правильный подход: сначала копировать только dependency manifest, установить зависимости, а уже потом копировать остальной код.
Для Node.js:
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
Для Go:
COPY go.mod go.sum ./
RUN go mod download
COPY . .
Для Python:
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
Так Docker будет переиспользовать слой с зависимостями, пока реально не изменились
package-lock.json, go.sum или requirements.txt.Ещё сильнее помогает
.dockerignore.Туда стоит добавить:
.git
node_modules
dist
build
coverage
.env
*.log
Итог: меньше контекста, меньше лишних invalidated layers, быстрее CI/CD, стабильнее кеши.
Хороший Dockerfile - это не просто “собрать image”.
Это управлять слоями так, чтобы сборка не начиналась с нуля при каждом чихе.