Каждый раз, когда вы запускаете сборку, Docker постарается использовать локальный кеш, если присутствуют. Что, если вы никогда не построили изображение локально, но изображение уже находится в Remote Docker Registry?
В этом посте мы пройдем, как вы можете использовать реестр Remote Docker, чтобы согреть кэш докера и ускорить локальную сборку. Это также может быть очень полезно в CI.
Как согреть кеш в докере
От Docker 1.13 вы можете использовать небольшой трюк. Вы можете использовать --cache-от
Флаг, чтобы проинструктировать Docker использовать в качестве кэша слоя другого изображения. Единственная предпосылка в том, что у вас есть изображение локально.
Допустим, у вас есть DockerFile локально, что вы создаете и нажимаете:
$ docker build -t my-docker . $ docker push my-docker
Теперь, на другой машине или в вашем CI, вы хотите снова построить My-Docker. Здесь вы можете использовать изображение, которое вы нажали на реестр Docker, чтобы ускорить сборку.
$ docker pull my-docker || true $ docker build --cache-from my-docker .
Мы используем правда
Как согреть кеш с Buildkit
С классическим подходом вы должны потянуть изображение перед запуском сборки. Мы можем избежать его использования Buildkit и Buildkit_inline_cache.
. Вы можете проверить предыдущий пост на Как настроить Buildkit на вашей машине.
Что нам действительно нужно, вместе с кэшем, это JSON с метаданными кэша. Мы можем использовать BuckKit для запуска сборки Docker и добавить информацию кэширования на изображение Docker.
$ export DOCKER_BUILDKIT=1 $ docker build -t my-docker --build-arg BUILDKIT_INLINE_CACHE=1 . $ docker push my-docker
Здесь мы включаем Buildkit с Экспорт
а потом мы используем --build-arg
во время сборки. На данный момент созданное изображение может использоваться в качестве кеша для других сборки.
После этого мы можем запустить сборку на другой машине или в CI, используя тот же синтаксис, что и раньше:
$ docker build --cache-from my-docker .
Что произойдет на этот раз, заключается в том, что строитель вытащит метаданные JSON из реестра для выяснения, если есть кеш, который можно использовать с удаленного изображения. Если есть попадание кеша, только необходимые слои будут вытеснены локально и будут использоваться строителем.
Это оно!
В этом посту мы видели, как согреть кэш-память Docker Build, используя другое изображение, эта техника поможет ускорить время сборки.
Если вы ищете другие способы ускорить время сборки, вы можете попробовать использовать Multistage Parallel Docker Build Отказ
Добраться до меня в Twitter @Gasparevitta и Позвольте мне знать ваши мысли! Эта статья была первоначально опубликована на мой блог Отказ Голова по мнению этого поста, если вам нравится этот пост и хочу прочитать других, как это!
Оригинал: «https://dev.to/gasparev/speed-up-docker-build-time-with-cache-warming-29on»