Есть такая штука в docker, называется buildkit и позволяет использовать так называемый mount=type=cache, как это выглядит и зачем нужно?
Включаем buildkit
BUILDKIT_INLINE_CACHE=1
В Dockerfile добавляем что-то вроде:
RUN --mount=type=cache,target=/home/node/.cache/yarn/,id=yarn_cache,uid=10064,gid=10064 \
yarn install
Тут мы перед командой yarn install говорим докеру, создай директорию /home/node/.cache/yarn либо любую другую, где вы ожидаете увидеть кеш от какой-либо утилиты и во время сборки смонтируй ее в контейнер.
При это buildkit создаст структуру каталогов по пути /var/lib/docker/buildkit, с файликами вида *.db. Один из таких файлов — это metadata_v2.db.
В этом файле по указанному нами ранее id можно найти имя хеша, который будет лежать на ФС в /var/lib/docker/overlay2/<hash_name/diff. Справедливо если у вас именно overlay2.
Собственно в этой директории и хранится ваш кеш, которым будет управлять buildkit, гораздо более разумно перестраивая слои докера.
Собственно в DIND это работает абсолютно также, только все выше описанное происходит в билд контейнере. Тут важно шарить кеш.
Кеш этот лежит в рамках ноды, если у вас много раннеров, то полность кеш будет доступен только после билдов на всех нодах.