Все, кто пользуется Docker, знают, что он кэширует сборку слоями, команда за командой. Но знали ли вы, что с недавних пор помимо кэширования слоями можно ещё закэшировать отдельную папку? Например, таким образом можно заставить работать встроенный в
pip кэш и не перекачивать все ваши 1000 пакетов старых зависимостей из PyPI каждый раз, если вы вдруг решили добавить ещё одну новую.Магия активируется вот таким набором заклинаний:
1. устанавливаем переменную окружения, чтобы задействовать новый механизм сборки:
$ export DOCKER_BUILDKIT=12. в начало
Dockerfile добавляем строчку с указанием на новый синтаксис:# syntax = docker/dockerfile:1.33. в команду
RUN добавляются новые аргументы:RUN --mount=type=cache,target=/root/.cache \Docker закэширует эту папку у себя во внутреннем кэше, и будет подкладывать её внутрь для этого шага при каждой новой сборке. В итоговом образе этих файлов не будет, но шаг с установкой зависимостей будет проходить намного быстрее.
pip install -r requirements.txt
Как минимум, это удобно для сборки образов на локальной машине. Если в CI настроить сохранение кэшей Docker'а между запусками, то это тоже будет работать.
https://pythonspeed.com/articles/docker-cache-pip-downloads/
#синийкит #docker