В CI сборки Docker-образов часто каждый раз стартуют «с нуля», даже если изменения минимальные. В итоге теряются минуты на установку зависимостей и сборку. Локальный кеш не помогает, потому что раннеры эфемерные. Решение — вынос кеша слоёв в registry и повторное использование между сборками.

Экспорт и импорт кеша сборки через registry:

BuildKit позволяет сохранять кеш прямо в Docker Registry и подтягивать его в следующих билдах. Теперь слои (например, зависимости) будут подтягиваться из registry, даже если билд идёт на новом CI-раннере.

docker buildx build \
–cache-to=type=registry,ref=myrepo/app:buildcache,mode=max \
–cache-from=type=registry,ref=myrepo/app:buildcache \
-t myrepo/app:latest .

Максимальное использование кеша через mode=max:

Параметр mode=max сохраняет не только финальные слои, но и промежуточные стадии, что особенно важно для multi-stage сборок. Это даёт максимальный эффект ускорения, особенно для сложных Dockerfile.

–cache-to=type=registry,ref=myrepo/app:buildcache,mode=max

Изоляция кеша по веткам или окружениям:

Чтобы избежать конфликтов кеша между ветками, можно использовать разные теги. Это предотвращает «грязные» сборки и делает кеш предсказуемым.

ref=myrepo/app:buildcache-main
ref=myrepo/app:buildcache-dev

❗️ Registry cache — один из самых недооценённых способов ускорить CI. Если билд Docker занимает больше минуты — почти всегда можно ускорить его в разы без изменения кода.

Авторские права

Автор: Vasiliy Fakunin

Ссылка: https://notes.melancholic.tech/posts/%D0%B1%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F-%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B0-docker/

Лицензия: CC BY-NC-SA 4.0

Использование материалов блога разрешается при условии: указания авторства/источника, некоммерческого использования и сохранения лицензии.

Начать поиск

Введите ключевые слова для поиска статей

↑↓
ESC
⌘K Горячая клавиша