Поиск по сайту:

Как стандартизировать доставку программного обеспечения с помощью OCI Artifacts, ORAS и Docker Hub


Docker Hub — самый известный реестр для распространения и обмена образами контейнеров. Однако Docker Hub и другие реестры, совместимые с OCI, теперь могут делать больше, чем просто образы контейнеров. Проект ORAS (OCI Registry As Storage) превращает реестры в общие хранилища артефактов, способные публиковать любые активы, относящиеся к вашему приложению.

В этой статье вы узнаете, что такое ORAS, какие проблемы он решает и как начать использовать его с Docker Hub.

Docker Hub против реестров OCI

Во-первых, давайте проясним одну деталь: экосистема контейнеров — это больше, чем просто Docker. Инструменты и процессы, разработанные Docker, были стандартизированы OCI. Docker теперь является одной из реализаций спецификаций OCI наряду с другими совместимыми контейнерными системами, такими как Podman и Kubernetes.

Docker Hub — это совместимая с реестром OCI платформа для доставки образов контейнеров. Инструменты контейнера OCI могут получать содержимое из Docker Hub и других реестров с помощью таких команд, как docker pull и docker push. Хотя раньше они работали только с образами контейнеров, теперь вы можете использовать тот же механизм для распространения других компонентов вашего приложения.

Почему общие артефакты имеют значение

Эта функциональность разрабатывается под баннером ORAS. Он преобразует реестры в «универсальные хранилища артефактов», с которыми вы можете взаимодействовать, используя знакомый рабочий процесс push/pull.

Артефакт — это все, что может понадобиться пользователю для успешного запуска вашего программного обеспечения. Это может быть изображение контейнера или другой тип ресурса, который имеет смысл для вашего проекта:

  • Диаграммы Helm
  • Предварительно скомпилированные двоичные файлы и пакеты установки
  • SBOM
  • Рекомендуемые конфигурации политики безопасности, например правила OPA
  • Выпуск подписей, сертификатов и метаданных

Эти жизненно важные активы часто бывает трудно найти пользователям. Они, как правило, разбросаны по разным платформам управления версиями, менеджерам пакетов и прямым загрузкам с веб-сайтов. С помощью ORAS вы можете поместить все данные в один централизованный реестр, а затем позволить пользователям извлекать содержимое с помощью единого набора инструментов и учетных данных. Просмотреть SBOM для версии v1.1.0 так же просто, как, например, oras pull example.com/my-app/sbom:v1.1.0.

Является ли ORAS критическим изменением для образов контейнеров?

ORAS не нарушает какие-либо существующие функции реестра контейнеров. Вы можете продолжать выполнять команды, такие как docker push my-image:latest, чтобы перемещать изображения.

Однако за кулисами произошли значительные изменения в хранении контента. ORAS устраняет историческое предположение о том, что все содержимое реестра является образом. Для поддержки артефактов реестры должны отслеживать тип каждой завершенной загрузки. Различные виды артефактов называются в ORAS «типами носителей».

Популярные проекты сообщества могут регистрировать свои собственные типы мультимедиа для определения часто используемых классификаций артефактов, таких как диаграммы Helm. Это позволяет поставщикам реестра отображать соответствующую информацию об артефактах, которые вы сохранили.

Тип мультимедиа образа контейнера автоматически используется при отправке из существующих инструментов, таких как docker push. При загрузке напрямую из интерфейса командной строки ORAS применяется тип «неизвестный» по умолчанию, если только вы не укажете зарегистрированный тип.

Установка интерфейса командной строки ORAS

Вам нужен интерфейс командной строки ORAS для передачи и извлечения артефактов с произвольными типами. Вы можете скачать последнюю версию со страницы релизов проекта GitHub. В настоящее время поддерживаются только системы macOS и Linux.

Извлеките загруженный архив, а затем скопируйте двоичный файл oras в место, указанное на вашем пути:

$ tar -zxf oras_0.16.0_*.tar.gz -C oras-install/
$ mv oras-install/oras /usr/local/bin/
$ rm -rf oras_0.16.0_*.tar.gz oras-install/

Проверьте работу вашего бинарника, выполнив команду oras version:

$ oras version
0.16.0

Теперь вы готовы начать использовать ORAS.

Использование ORAS с Docker Hub

ORAS совместим только с реестрами, в которых реализована поддержка спецификации артефактов OCI. В этот список теперь входят большинство основных поставщиков, включая Amazon ECR, Azure, Google и GitHub, а также самостоятельные экземпляры, развернутые с использованием дистрибутива CNCF.

В этой статье мы будем использовать Docker Hub, так как это самое популярное решение для реестра. Полная поддержка OCI Artifacts добавлена в ноябре 2022 года.

Войдите в свой реестр

ORAS автоматически повторно использует учетные данные реестра, которые вы ранее добавили в файл ~/.docker/config.json. Если вам нужно войти в Docker Hub, вы можете запустить для этого либо docker login, либо oras login:

$ oras login -u username -p password_or_personal_access_token

$ docker login -u username -p password_or_personal_access_token

Затем создайте простой файл для загрузки в реестр. Помните, что нет никаких ограничений на тип актива, который вы продвигаете. Этот пример представляет собой надуманный файл JSON, описывающий статус проекта, но вы можете загрузить все, что будет полезно вашим пользователям или разработчикам.

$ echo '{"app": "oras-demo", "version": "1.1.0"}' > artifact.json

Теперь вы готовы отправить файл с помощью интерфейса командной строки ORAS.

Подтолкните свой артефакт

Выполните следующую команду, чтобы отправить артефакт, заменив <username> вашим фактическим именем пользователя Docker Hub:

$ oras push docker.io/<username>/oras-demo:1.1.0 \
    artifact.json:application/json \
    --artifact-type application/vnd.unknown.config.v1+json
Uploading 7ac68d8d2a12 artifact.json
Uploaded  7ac68d8d2a12 artifact.json
Pushed docker.io/ilmiont/oras-demo:1.1.0
Digest: sha256:41abfed0ab43a24933c5eafe3c363418264a59eee527821a39fe7c0abf25570b

В этой команде есть несколько примечательных деталей:

  • Первый аргумент определяет реестр для отправки и тег, назначаемый артефакту. Это похоже на отправку тега изображения контейнера.
  • В отличие от интерфейса командной строки docker, ORAS требует указания URL-адреса реестра (docker.io для Docker Hub). ORAS – это универсальный инструмент, который не может делать предположения о том, что и где вы отправляете.
  • Второй аргумент указывает путь к загружаемому файлу в формате filename:content-type. Поскольку файл примера имеет формат JSON, выбран тип содержимого application/json.
  • Третий аргумент указывает тип артефакта ORAS (тип носителя), который будет назначен вашему артефакту. Если вы загружаете зарегистрированный тип артефакта, например диаграмму Helm, вам следует использовать стандартный тип мультимедиа, но для этой демонстрации подходит значение по умолчанию «неизвестный».

Ход загрузки отображается в вашем терминале, как и при обычном docker push. Попробуйте запустить команду oras repo tags, чтобы подтвердить завершение отправки:

$ oras repo tags docker.io/<username>/oras-demo
1.1.0

Управление артефактами в пользовательском интерфейсе Docker Hub

Ваш артефакт также появится на веб-сайте Docker Hub. В списке репозиториев вы увидите Contains: Other, чтобы указать, что репозиторий содержит общий артефакт. Хранилища образов контейнеров помечены как Contains: Image.

Выберите репозиторий, чтобы просмотреть сведения о нем, добавить описание и просмотреть все доступные теги. Это похоже на работу с образами контейнеров.

Вытягивание вашего артефакта

Теперь, когда ваш артефакт доступен в реестре, вы можете переключиться на другой компьютер и повторить шаги по установке интерфейса командной строки ORAS и войти в свою учетную запись Docker Hub. После аутентификации используйте команду oras pull, чтобы получить артефакт:

$ oras pull docker.io/<username>/oras-demo:1.1.0
Downloading 7ac68d8d2a12 artifact.json
Downloaded  7ac68d8d2a12 artifact.json
Pulled docker.io/ilmiont/oras-demo:1.1.0
Digest: sha256:41abfed0ab43a24933c5eafe3c363418264a59eee527821a39fe7c0abf25570b

Файлы в артефакте будут помещены в ваш рабочий каталог:

$ ls
artifact.json

$ cat artifact.json
{"app": "demo-oras", "version": "1.1.0"}

Вы успешно использовали ORAS для распространения артефактов вашего приложения, используя существующую инфраструктуру, доступную у вашего поставщика реестра контейнеров.

Краткое содержание

ORAS преобразует реестры образов контейнеров в универсальные платформы распространения. Вы можете отправить любой артефакт, относящийся к вашему приложению, и пользователи смогут получить его, используя единый согласованный механизм. Это позволяет избежать необходимости поддерживать, публиковать и переключаться между несколькими каналами доставки.

Поддержка ORAS также добавляется в популярные инструменты экосистемы. Helm позволяет напрямую отправлять диаграммы в реестр ORAS с помощью, например, команды helm push. Это избавляет от необходимости вручную экспортировать диаграмму, чтобы вы могли отправить ее с помощью oras push. Он также управляет установкой правильного типа носителя ORAS. Вы можете ожидать, что больше инструментов начнут интегрировать ORAS, что позволит вам отправлять все виды контента прямо в ваш централизованный реестр.