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 per oras 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 :readmecome , 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 usa application/vnd.oci.image.config.v1+json.
  • ./readme.md Identifica il file caricato e :application/markdown rappresenta l'IANA mediaType 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