Недавно столкнулся с тем, что пайплайн на GitLab CI начал тормозить при сборке Docker-образов. Типа 7–10 минут на каждый пуш — слишком дорого. Начал копать и нашёл несколько простых, но эффективных трюков:
1. Мультистейдж-сборка
Убрал всё лишнее из финального образа. Разделил билд и рантайм. Теперь в конечный образ не попадают dev-зависимости и тулзы типа
curl, gcc, make.2. Кэш на уровне CI
Прописал в
.gitlab-ci.yml использование docker build --cache-from. Сохраняю промежуточные образы в GitLab Registry — reuse слоёв реально работает.3. Оптимизация Dockerfile
Самое простое: сначала
COPY package*.json, потом RUN npm install, и только потом COPY . . — уменьшает количество слоёв, которые нужно пересобирать.4. Переход на BuildKit
Включил
DOCKER_BUILDKIT=1. Поддержка параллельных билдов и продвинутый кэш сделали своё дело.5. Анализ с dive
Прогнал образы через
dive — нашёл пару мест, где слои были гигантские из-за временных файлов и неправильного порядка команд.💡 В итоге время сборки упало с ~9 минут до 3. С учётом количества пушей в день - это как снять кирпич с сервера.
Подпишись 👉@devopslib