Вытащить, пометить и протолкнуть изображение из реестра Y в реестр X
В настоящее время наша среда CI/CD является облачной, базирующейся в Kubernetes. Облачные провайдеры Kubernetes недавно удалили Docker из-за преимуществ в производительности. Например, Google Kubernetes Engine или IBM Cloud Kubernetes имеют только среду выполнения Containerd для запуска, но не для создания образов контейнеров.
Многие инструменты, такие как kaniko или jib, устраняют этот пробел. Они предоставляют возможность очень эффективно создавать образы докеров без необходимости их использования.
Здесь возникает проблема:
- Образ "registry-x.com/repo/app1:v1-snapshot" получает сборку от Jib в CI до Registry-X.
- Образ "registry-x.com/repo/app1:v1-snapshot" затем в определенный момент развертывается и тестируется и должен быть доставлен в реестр Y, если тест прошел успешно, а также должен быть помечен как стабильный выпуск в реестре X.
Таким образом, изображение "registry-x.com/repo/app1:v1-snapshot" необходимо пометить с "registry-x.com/repo/app1:v1-snapshot" на "registry-x.com/web/app1:v1". -release ", а затем он должен быть дополнительно помечен как"registry-y.com/web/app1:v1-release", и оба должны быть выдвинуты.
Результат: Снимок с изображения из разработки доступен в обоих реестрах с меткой выпуска.
Итак, как сделать эти простые 3 операции (Pull, Tag, Push) без Docker Deamon? Похоже, Канико и Джиб не способ.
Я не хочу заказывать виртуальную машину только для того, чтобы заставить Docker Deamon выполнять эти операции. И я также знаю, что Jib способен выдвигать несколько реестров. Но он не может просто переименовать изображения.
Относится также к этому вопросу прошлого года: клонировать изображение из реестра докеров в другой
С уважением, Леон
1 ответ
Docker Registry предоставляет HTTP API, так что вы можете использовать эти методы для извлечения и переноса изображений.
Существует несколько библиотек, обеспечивающих более высокий уровень абстракции ( https://github.com/heroku/docker-registry-client, docker-registry-client в Js и т. Д.).
В любом случае поток будет
Вытягивание изображения включает в себя:
- Получить манифест из
registry-x.com/repo/app1:v1-snapshot
, - Загрузка слоев (BLOB-объектов), указанных в манифесте.
- Получить манифест из
Нажатие на изображение включает в себя:
- Загрузите все слои, которые вы ранее скачали
- Измените исходный манифест с вашей новой версией
- Загрузите новый манифест