Ускорьте отладку тяжелых Docker-образов, запускаемых в удаленной среде

f5647d0c8d5ba5a29737c86c6198cde3

Это небольшой туториал о том, как ускорить pull и push тяжелых Docker образов, которые вы собираете локально, но их запуск возможен только в удаленной среде. Например, потому что контейнер использует специфическое окружение, приложения или ресурсы, которые трудно или невозможно воспроизвести локально.

Решение «в лоб» состоит в том, чтобы запушить собранный образ в Dockerhub. А там, где вы будете его использовать, просто указать ссылку на образ. Очевидно, что у этого простого способа есть недостатки:

  • Весьма низкая скорость загрузки на Dockerhub. Умножьте это на количество пушей, которые потребуется сделать за время отладки.

  • Использование публичного Dockerhub не всегда приемлемо из соображений безопасности, особенно если образ содержит чувствительные данные.

Использование корпоративного Docker Registry (вместо Dockerhub) тоже не всегда возможно, например, из-за политик безопасности, когда отправка образов в реестр допускается только через конвейер CI/CD, а прямой пуш из консоли запрещен.

Найденное решение оказалось без этих недостатков, простым, работающим и весьма изящным. Вот 3 шага, которые нужно сделать:

  1. Разверните локальный Docker Registry, куда пуш происходит молниеносно

  2. Пробросьте доступ к этому реестру наружу

  3. Удаленный ресурс просто стянет образ с вашей локальной машины напрямую

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-сборки.

© Habrahabr.ru