Отправка и извлечение артефактов 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
представляет IANAmediaType
файла.
Дополнительные сведения см . в руководстве авторов артефактов 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.