1.4Kпросмотров
5 февраля 2025 г.
Score: 1.6K
Форк с ускоренной доставкой🚀
Как утащить сотни образов Docker контейнеров за несколько кликов и считанные минуты
Если вы начнете искать информацию о том, как стянуть образы контейнеров с публичного Docker registry, то, почти наверняка, столкнетесь c DockerRegistryGrabber. Сегодня мы отправим этот проект на свалку истории и научимся пуллить в промышленных масштабах🏭🏭🏭 Для начала вспомним, по каким признакам можно определить наличие Docker registry на хосте:
1. Открыт порт TCP 5000
2. GET-запрос возвращает ответ сервера с кодом HTTP 400: Error 400 Not a Docker request
3. Docker registry может быть развернут на хосте Gitlab, Nexus, jFrog.
Окончательно убедиться в наличии Docker registry можно сделав HTTP-запрос к этому хосту:
curl -k -X GET https://some-host.net/v2/_catalog
Если в ответ получите JSON со списком образов контейнеров, то вы на верном пути😎
А теперь перейдем к сути этого поста. Как забрать эти образы?
Нам понадобится... Harbor! Да, мы заставим точно такой же Docker registry работать на нас. Процесс установки и настройки займет, максимум, полчаса времени и описан вот здесь. Чуть позже вы оцените полезность потраченного на его установку времени.
А теперь к сути. Решить нашу проблему со стягиванием большого количества контейнеров поможет репликация. Harbor сам пойдет в другой Registry и стянет оттуда все необходимое 😊 В нашем примере мы сделаем это на примере простого Docker registry, доступного на TCP 5000.
Для этого нам потребуется:
1. Добавить донорский Docker registry в раздел Administration -> Registries -> New endpoint. Здесь есть несколько обязательных параметров: Provider, Name, Endpoint URL. В качестве провайдера указываем опцию "Docker registry". Name - любое имя, которое вам нравится. Endpoint URL - URL найденного Docker registry. Дополнительно рекомендую снять галочку с "Verify Remote Cert".
2. (не обязательный шаг) Переходим в Projects -> New Project и создаем новый проект. У нас он будет называться test.
3. Теперь переходим в режим репликации Administration -> Replications -> New Replication Rule и указываем опции репликации: Name - любое имя
Replication mode - Pull-based, потому что мы стягиваем образы, а не публикуем
Source registry - выбираем Docker registry, указанный в п. 1
Destination -> Namespace - указываем имя проекта из п.2, либо оставляем пустым
Destination -> Flattening - выбираем "Flatten All Levels"
4. Сохраняем, выбираем созданную репликацию, нажимаем на кнопку "Replicate" и наслаждаемся процессом. Стянутые контейнеры окажутся в созданном проекте test и теперь мы будем работать с ними уже в рамках нашего Harbor.
p.s. Чтобы стянуть конкретный тэг образа контейнера, нужно провалиться в этот контейнер внутри созданного проекта, выбрать интересующую версию и далее нажать кнопку "Copy pull command". Harbor формирует команду для Docker и Podman.