Как повторно использовать кэш из сборки `RUN --mount = type = cache` docker? - PullRequest
0 голосов
/ 28 февраля 2020

Я использую новый экспериментальный синтаксис docker buildkit для многоэтапной сборки, например:

Dockerfile:

RUN --mount=type=cache,target=/home/build/.build-cache,gid=1000,uid=1001 ./build

bash:

DOCKER_BUILDKIT=1 docker build .

Прекрасно работает в местном масштабе. На CI я каждый раз получаю новую среду docker, поэтому нет кэширования.

Я могу экспортировать и импортировать файлы в env, но я не знаю, где находится кеш. Есть идеи?

Или я должен экспортировать / импортировать кеш с помощью какой-нибудь команды docker? Я прочитал https://docs.docker.com/engine/reference/commandline/build/#specifying -external-cache-sources и https://github.com/moby/buildkit#export -cache , но мне не ясно, какой именно buildkit специфицирует c, а какой docker специфицирует c или, если это действительно применимо к этому кешу, смонтированному в команде RUN Dockerfile.

Я добавил здесь публикуемый c список неудачного теста, демонстрирующего то, на что я надеялся: https://gist.github.com/Mahoney/85e8549892e0ae5bb86ce85339db1a71/6308f1bdb062a8982017193b96d61ec00a7698c5

И эта более поздняя редакция работает, но я не доволен ею - слишком много начальной загрузки: https://gist.github.com/Mahoney/85e8549892e0ae5bb86ce85339db1a71

1 Ответ

1 голос
/ 02 марта 2020

Кажется, что нет никакого способа извлечь этот указанный c кеш из общих docker рабочих файлов.

Однако вы, конечно, можете сделать резервную копию всего /var/lib/docker. Это не работает для удаленного * CircleCI docker, потому что у вас нет доступа к sudo, но он работает для GitHub Actions там, где вы делаете.

См. Пример для примера: https://github.com/Mahoney-playground/docker-cache-action

...