Отправка и извлечение артефактов OCI с помощью реестра контейнеров Azure

Реестр контейнеров Azure можно использовать для хранения артефактов Open Container Initiative (OCI), а также образов контейнеров Docker и OCI.

Чтобы продемонстрировать эту возможность, в этой статье показано, как использовать реестр OCI в качестве интерфейса командной строки служба хранилища (ORAS) для отправки примера артефакта — текстового файла в реестр контейнеров Azure. Затем мы покажем, как извлечь артефакт из реестра. Вы можете управлять различными артефактами OCI в реестре контейнеров Azure с помощью различных средств командной строки, соответствующих каждому артефакту.

Необходимые компоненты

  • Реестр контейнеров Azure. Создайте реестр контейнеров в своей подписке Azure. Например, используйте портал Azure или az acr create.
  • Azure CLI — требуется версия 2.29.1 или более поздняя версия. См. статью "Установка Azure CLI " для установки и (или) обновления.
  • ИНТЕРФЕЙС командной строки ORAS — требуется версия v0.16.0 . См. статью о установке ORAS.
  • Docker (необязательно) — хотя Docker Desktop не требуется, oras интерфейс командной строки использует хранилище учетных данных рабочего стола Docker для хранения учетных данных. Если установлен Docker Desktop, он должен быть запущен для oras login.

Настройка реестра

Настройте переменные среды, чтобы легко копировать и вставлять команды в оболочку. Команды можно выполнять локально или в Azure Cloud Shell.

ACR_NAME=myregistry
REGISTRY=$ACR_NAME.azurecr.io

Вход в реестр

Проверка подлинности с помощью отдельного удостоверения Microsoft Entra с помощью маркера AD. Всегда используйте значение "000..." для USER_NAME маркера, который анализируется с помощью переменной PASSWORD .

# Login to Azure
az login

# Login to ACR, using a token based on your Azure identity
USER_NAME="00000000-0000-0000-0000-000000000000"
PASSWORD=$(az acr login --name $ACR_NAME --expose-token --output tsv --query accessToken)

Примечание.

ACR и ORAS поддерживают несколько вариантов проверки подлинности для пользователей и системы автоматизации. В этой статье используется отдельное удостоверение с помощью маркера Azure. Дополнительные параметры проверки подлинности см. в разделе "Проверка подлинности с помощью реестра контейнеров Azure"

Вход с помощью ORAS

Укажите учетные oras loginданные.

oras login $REGISTRY \
  --username $USER_NAME \
  --password $PASSWORD

Отправка корневого артефакта

Корневой артефакт — это артефакт, не имеющий subject родительского элемента. Корневые артефакты могут быть любым из образа контейнера, диаграммы helm, файла readme для репозитория. Эталонные артефакты, описанные в разделе "Присоединение,отправка" и артефакты цепочки поставок по запросу, являются артефактами, ссылающимися на другой артефакт. Эталонные артефакты могут быть любым из подписи, счета за программное обеспечение материалов, сканировать отчет или другие изменяющиеся типы.

В этом примере создайте содержимое, представляющее файл markdown:

echo 'Readme Content' > readme.md

На следующем шаге readme.md файл отправляется <myregistry>.azurecr.io/samples/artifact:readmeв .

  • Реестр определяется с полным именем <myregistry>.azurecr.io реестра (все строчные регистры), за которым следует пространство имен и репозиторий: /samples/artifact
  • Артефакт помечается :readme, чтобы определить его уникально из других артефактов, перечисленных в репозитории (:latest, :v1, :v1.0.1).
  • Параметр --artifact-type readme/example отличает артефакт от образа контейнера, который использует application/vnd.oci.image.config.v1+json.
  • Определяет ./readme.md отправленный файл и :application/markdown представляет IANA mediaType файла.
    Дополнительные сведения см . в руководстве авторов артефактов OCI.

oras push Используйте команду, чтобы отправить файл в реестр.

Linux, WSL2 или macOS

oras push $REGISTRY/samples/artifact:readme \
    --artifact-type readme/example \
    ./readme.md:application/markdown

Windows

.\oras.exe push $REGISTRY/samples/artifact:readme ^
    --artifact-type readme/example ^
    .\readme.md:application/markdown

Выходные данные для успешной отправки похожи на следующие выходные данные:

Uploading 2fdeac43552b readme.md
Uploaded  2fdeac43552b readme.md
Pushed <myregistry>.azurecr.io/samples/artifact:readme
Digest: sha256:e2d60d1b171f08bd10e2ed171d56092e39c7bac1aec5d9dcf7748dd702682d53

Отправка корневого артефакта с несколькими файлами

Когда артефакты OCI отправляются в реестр с ORAS, каждая ссылка на файл отправляется в виде большого двоичного объекта. Чтобы отправить отдельные большие двоичные объекты, по отдельности ссылаться на файлы или коллекцию файлов, ссылаясь на каталог.
Дополнительные сведения о отправке коллекции файлов см. в разделе "Отправка артефактов с несколькими файлами"

Создайте некоторую документацию для репозитория:

echo 'Readme Content' > readme.md
mkdir details/
echo 'Detailed Content' > details/readme-details.md
echo 'More detailed Content' > details/readme-more-details.md

Отправьте артефакт с несколькими файлами:

Linux, WSL2 или macOS

oras push $REGISTRY/samples/artifact:readme \
    --artifact-type readme/example\
    ./readme.md:application/markdown\
    ./details

Windows

.\oras.exe push $REGISTRY/samples/artifact:readme ^
    --artifact-type readme/example ^
    .\readme.md:application/markdown ^
    .\details

Обнаружение манифеста

Чтобы просмотреть манифест, созданный в результате oras push, используйте oras manifest fetch:

oras manifest fetch --pretty $REGISTRY/samples/artifact:readme

Результат должен быть аналогичен приведенному ниже:

{
  "mediaType": "application/vnd.oci.artifact.manifest.v1+json",
  "artifactType": "readme/example",
  "blobs": [
    {
      "mediaType": "application/markdown",
      "digest": "sha256:2fdeac43552b71eb9db534137714c7bad86b53a93c56ca96d4850c9b41b777fc",
      "size": 15,
      "annotations": {
        "org.opencontainers.image.title": "readme.md"
      }
    },
    {
      "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
      "digest": "sha256:0d6c7434a34f6854f971487621426332e6c0fda08040b9e6cc8a93f354cee0b1",
      "size": 189,
      "annotations": {
        "io.deis.oras.content.digest": "sha256:11eceb2e7ac3183ec9109003a7389468ec73ad5ceaec0c4edad0c1b664c5593a",
        "io.deis.oras.content.unpack": "true",
        "org.opencontainers.image.title": "details"
      }
    }
  ],
  "annotations": {
    "org.opencontainers.artifact.created": "2023-01-10T14:44:06Z"
  }
}

Извлечение корневого артефакта

Создание чистого каталога для загрузки

mkdir ./download

Чтобы извлечь артефакт из реестра, выполните команду oras pull.

oras pull -o ./download $REGISTRY/samples/artifact:readme

Просмотр вытягиваемых файлов

tree ./download

Удаление артефакта (дополнительная возможность)

Чтобы удалить артефакт из реестра, используйте oras manifest delete команду.

 oras manifest delete $REGISTRY/samples/artifact:readme

Следующие шаги

  • Узнайте о справочниках по артефактам, связывании подписей, счете за программное обеспечение материалов и других ссылочных типах
  • Дополнительные сведения о проекте ORAS, включая настройку манифеста для артефакта
  • Справочные сведения о новых типах артефактов см. в репозитории артефактов OCI.