Это небольшой туториал о том, как ускорить pull и push тяжелых Docker образов, которые вы собираете локально, но их запуск возможен только в удаленной среде. Например, потому что контейнер использует специфическое окружение, приложения или ресурсы, которые трудно или невозможно воспроизвести локально.
Решение “в лоб” состоит в том, чтобы запушить собранный образ в Dockerhub. А там, где вы будете его использовать, просто указать ссылку на образ. Очевидно, что у этого простого способа есть недостатки:
-
Весьма низкая скорость загрузки на Dockerhub. Умножьте это на количество пушей, которые потребуется сделать за время отладки.
-
Использование публичного Dockerhub не всегда приемлемо из соображений безопасности, особенно если образ содержит чувствительные данные.
Использование корпоративного Docker Registry (вместо Dockerhub) тоже не всегда возможно, например, из-за политик безопасности, когда отправка образов в реестр допускается только через конвейер CI/CD, а прямой пуш из консоли запрещен.
Найденное решение оказалось без этих недостатков, простым, работающим и весьма изящным. Вот 3 шага, которые нужно сделать:
-
Разверните локальный Docker Registry, куда пуш происходит молниеносно
-
Пробросьте доступ к этому реестру наружу
-
Удаленный ресурс просто стянет образ с вашей локальной машины напрямую
1. Поднимите локальный Docker Registry
Воспользуйтесь этим официальным образом и выполните:
docker run -d -p 5000:5000 --name registry registry:latest
2. Пробросьте доступ к Registry наружу
Зарегистрируйте бесплатный аккаунт на ngrok.
Зайдите в аккаунт и получите временный домен: Universal Gateway > Domains > Create Domain. Ngrok создаст домен вида something-random.ngrok-free.app и предложит ввести команду для запуска туннеля.
Если у вас еще не установлена консольная утилита ngrok, нажмите там же “Need to install ngrok first?” и установите программу для вашей ОС. Затем введите следующую команду и укажите свой персональный токен:
ngrok config add-authtoken
Откройте новое окно терминала и вставьте туда команду запуска туннеля с вашим доменом. Исправьте порт на 5000, поскольку локальный Docker Registry вы развернули именно на этом порту:
ngrok http --url=something-random.ngrok-free.app 5000
Не закрывайте окно терминала, чтобы туннель продолжал работать.
Теперь присвойте вашему Docker-образу тег с именем нового домена и отправьте его в локальный реестр:
docker tag myimage:latest something-random.ngrok-free.app/myimage:latest docker push something-random.ngrok-free.app/myimage:latest
Надеюсь, вас приятно удивила скорость, с которой выполняется пуш в реестр.
3. Стяните образ на удаленном ресурсе
Просто используйте ссылку вида something-random.ngrok-free.app/myimage:latest в том месте, где вы обычно указываете ссылку на образ в Dockerhub.
Это работает, пока поднят ngrok туннель. Теперь можно не тратить время на бесполезные ожидания и сэкономить прилично времени на отладке тяжелой Docker-сборки.
ссылка на оригинал статьи https://habr.com/ru/articles/893830/
Добавить комментарий