Имеет ли значение порядок аргументов --cache-from при создании образа с помощью Docker Buildkit? - PullRequest
0 голосов
/ 13 июля 2020

Предположим, я создаю образ, используя 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?

...