Eseguire il push e il pull degli artefatti OCI usando un registro Azure Container
È possibile usare un Registro Azure Container per archiviare e gestire artefatti OCI (Open Container Initiative), nonché immagini del contenitore Docker e OCI.
Per illustrare questa funzionalità, questo articolo illustra come usare il Registro OCI come interfaccia della riga di comando di Archiviazione (ORAS) per eseguire il push di un artefatto di esempio, un file di testo, in un registro contenitori di Azure. Quindi, eseguire il pull dell'artefatto dal Registro di sistema. È possibile gestire vari artefatti OCI in un registro Contenitori di Azure usando diversi strumenti da riga di comando appropriati per ogni artefatto.
Prerequisiti
- Registro Azure Container: creare un registro di contenitori nella sottoscrizione di Azure. Ad esempio, usare il portale di Azure o az acr create.
- Interfaccia della riga di comando di Azure: è necessaria la versione o una versione
2.29.1
successiva. Vedere Installare l'interfaccia della riga di comando di Azure per l'installazione e/o l'aggiornamento. - Interfaccia della riga di comando ORAS: è necessaria la versione
v0.16.0
. Vedere: Installazione di ORAS. - Docker (facoltativo): mentre Docker Desktop non è obbligatorio, l'interfaccia della
oras
riga di comando usa l'archivio credenziali desktop Docker per l'archiviazione delle credenziali. Se Docker Desktop è installato, deve essere in esecuzione peroras login
.
Configurare un registro
Configurare le variabili di ambiente per copiare/incollare facilmente i comandi nella shell. I comandi possono essere eseguiti in locale o in Azure Cloud Shell.
ACR_NAME=myregistry
REGISTRY=$ACR_NAME.azurecr.io
Accedere a un registro
Eseguire l'autenticazione con l'identità singola di Microsoft Entra usando un token di Active Directory. Usare sempre "000..." per perché USER_NAME
il token viene analizzato tramite la PASSWORD
variabile .
# 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)
Nota
Registro Azure Container e ORAS supportano più opzioni di autenticazione per gli utenti e l'automazione del sistema. Questo articolo usa una singola identità usando un token di Azure. Per altre opzioni di autenticazione, vedere Eseguire l'autenticazione con un registro Azure Container
Accedere con ORAS
Specificare le credenziali per oras login
.
oras login $REGISTRY \
--username $USER_NAME \
--password $PASSWORD
Eseguire il push di un artefatto radice
Un artefatto radice è un artefatto che non ha un subject
elemento padre. Gli artefatti radice possono essere qualsiasi elemento da un'immagine del contenitore, un grafico Helm, un file leggimi per il repository. Gli artefatti di riferimento, descritti in Collegare, eseguire il push e il pull degli artefatti della supply chain sono artefatti che fanno riferimento a un altro artefatto. Gli artefatti di riferimento possono essere qualsiasi elemento da una firma, una fattura software di materiali, un report di analisi o altri tipi in evoluzione.
Per questo esempio, creare contenuto che rappresenta un file markdown:
echo 'Readme Content' > readme.md
Il passaggio seguente esegue il push del readme.md
file in <myregistry>.azurecr.io/samples/artifact:readme
.
- Il Registro di sistema viene identificato con il nome
<myregistry>.azurecr.io
completo del Registro di sistema (tutte minuscole), seguito dallo spazio dei nomi e dal repository:/samples/artifact
. - L'artefatto è contrassegnato
:readme
come , per identificarlo in modo univoco da altri artefatti elencati nel repository (:latest, :v1, :v1.0.1
). - L'impostazione
--artifact-type readme/example
differenzia l'artefatto da un'immagine del contenitore, che usaapplication/vnd.oci.image.config.v1+json
. ./readme.md
Identifica il file caricato e:application/markdown
rappresenta l'IANAmediaType
del file.
Per altre informazioni, vedere Linee guida per gli autori di artefatti OCI.
Usare il oras push
comando per eseguire il push del file nel Registro di sistema.
Linux, WSL2 o 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
L'output per un push riuscito è simile all'output seguente:
Uploading 2fdeac43552b readme.md
Uploaded 2fdeac43552b readme.md
Pushed <myregistry>.azurecr.io/samples/artifact:readme
Digest: sha256:e2d60d1b171f08bd10e2ed171d56092e39c7bac1aec5d9dcf7748dd702682d53
Eseguire il push di un artefatto radice multi-file
Quando viene eseguito il push degli artefatti OCI in un registro con ORAS, ogni riferimento al file viene inserito come BLOB. Per eseguire il push di BLOB separati, fare riferimento ai file singolarmente o alla raccolta di file facendo riferimento a una directory.
Per altre informazioni su come eseguire il push di una raccolta di file, vedere Push di artefatti con più file
Creare una documentazione per il repository:
echo 'Readme Content' > readme.md
mkdir details/
echo 'Detailed Content' > details/readme-details.md
echo 'More detailed Content' > details/readme-more-details.md
Eseguire il push dell'artefatto multi-file:
Linux, WSL2 o 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
Individuare il manifesto
Per visualizzare il manifesto creato come risultato di oras push
, usare oras manifest fetch
:
oras manifest fetch --pretty $REGISTRY/samples/artifact:readme
L'output sarà analogo al seguente:
{
"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"
}
}
Eseguire il pull di un artefatto radice
Creare una directory pulita per il download
mkdir ./download
Eseguire il comando per eseguire il oras pull
pull dell'artefatto dal Registro di sistema.
oras pull -o ./download $REGISTRY/samples/artifact:readme
Visualizzare i file estratti
tree ./download
Rimuovere l'artefatto (facoltativo)
Per rimuovere l'artefatto dal registro, usare il oras manifest delete
comando .
oras manifest delete $REGISTRY/samples/artifact:readme
Passaggi successivi
- Informazioni sui riferimenti agli artefatti, associazione di firme, fattura software di materiali e altri tipi di riferimento
- Altre informazioni sul progetto ORAS, tra cui come configurare un manifesto per un artefatto
- Visitare il repository OCI Artifacts per informazioni di riferimento sui nuovi tipi di artefatti