Предположим, я создаю образ, используя Docker Buildkit. Мой образ взят из многоступенчатого Dockerfile, например:
FROM node:12 AS some-expensive-base-image
...
FROM some-expensive-base-image AS my-app
...
Сейчас я пытаюсь создать оба образа. Предположим, что я отправил sh их на Docker хаб. Если бы мне пришлось использовать функцию внешнего кеширования Docker Buildkit, то я бы попытался сэкономить время сборки на моем конвейере CI, подключив удаленный образ some-expensive-base-image:latest
в качестве кеша при создании цели some-expensive-base-image
. И я хотел бы использовать как только что созданное изображение some-expensive-base-image
, так и удаленное изображение my-app:latest
в качестве кэша для последнего изображения. Я считаю, что мне нужно и то, и другое, чтобы не требовать перестройки шагов some-expensive-base-image
, поскольку ... ну ... они дорогие.
Вот как выглядит мой сценарий сборки:
export DOCKER_BUILDKIT=1
docker build --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from some-expensive-base-image:latest --target some-expensive-base-image -t some-expensive-base-image:edge .
docker build --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from some-expensive-base-image:edge --cache-from my-app:latest --target my-app -t my-app:edge .
Мой вопрос: Имеет ли значение порядок --cache-from
аргументов для второго docker build
?
Я получаю противоречивые результаты на моем CI конвейер для этой сборки. При построении этого последнего образа происходят промахи в кеше, даже если не было никаких изменений кода, которые могли бы вызвать перебор кеша. Cache Minefest можно вытащить без проблем. Бывают случаи, когда изображение кеша извлекается, но в других случаях все шаги этой последней цели необходимо перезапустить. Я не знаю, почему.
Может, мне вместо этого попробовать docker pull
оба изображения перед запуском команд docker build
в моем скрипте?
Кроме того, я знаю, что упомянул в Docker Hub в моем примере, но в реальной жизни мое приложение использует AWS ECR для своего удаленного репозитория Docker. Имеет ли это значение для правильной работы Buildkit?