Envoyer (push) et tirer (pull) des artefacts à l’aide d’un registre de conteneurs Azure

Vous pouvez utiliser un registre de conteneurs Azure pour stocker et gérer des artefacts OCI (Open Container Initiative) ainsi que des images conteneur Docker et OCI.

Pour illustrer cette fonctionnalité, cet article montre comment utiliser l’interface CLI ORAS (OCI Registry as Storage) pour envoyer un exemple d’artefact (un fichier texte) à un registre de conteneurs Azure. Ensuite, l’artefact est tiré (pull) du registre. Vous pouvez gérer divers artefacts OCI dans un registre de conteneurs Azure à l’aide de différents outils en ligne de commande adaptés à chaque artefact.

Prérequis

  • Azure Container Registry : créez un Registre de conteneur dans votre abonnement Azure. Par exemple, utilisez le portail Azure ou az acr create.
  • Azure CLI : la version 2.29.1 ou ultérieure est exigée. Pour obtenir des informations sur l’installation et/ou la mise à niveau, consultez Installer Azure CLI.
  • ORAS CLI : la version v0.16.0 est exigée. Consultez Installation d’ORAS.
  • Docker (facultatif) : bien que Docker Desktop ne soit pas obligatoire, l’interface CLI oras utilise le magasin d’informations d’identification de Docker Desktop pour stocker les informations d’identification. Si Docker Desktop est installé, il doit être exécuté pour oras login.

Configurer un registre

Configurez les variables d’environnement pour copier-coller facilement des commandes dans votre interpréteur de commandes. Les commandes peuvent être exécutées localement ou dans Azure Cloud Shell.

ACR_NAME=myregistry
REGISTRY=$ACR_NAME.azurecr.io

Se connecter à un registre

Authentifiez-vous avec votre identité Microsoft Entra individuelle à l’aide d’un jeton AD. Utilisez toujours « 000... » pour USER_NAME car le jeton est analysé par le biais de la variable 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)

Notes

ACR et ORAS prennent en charge plusieurs options d’authentification pour les utilisateurs et l’automatisation du système. Cet article utilise une identité individuelle à l’aide d’un jeton Azure. Pour plus d’options d’authentification, consultez S’authentifier auprès d’un registre de conteneurs Azure.

Se connecter avec ORAS

Fournissez les informations d’identification à oras login.

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

Envoyer un artefact racine

Un artefact racine est un artefact qui n’a pas de parent subject. Les artefacts racine peuvent être une image conteneur, un graphique helm ou un fichier lisez-moi pour le référentiel. Les artefacts de référence, décrits dans Attacher, envoyer et tirer des artefacts de chaîne logistique, sont des artefacts qui font référence à un autre artefact. Les artefacts de référence peuvent être une signature, une nomenclature logicielle, un rapport d’analyse ou d’autres types évolutifs.

Pour cet exemple, créez un contenu représentant un fichier Markdown :

echo 'Readme Content' > readme.md

L’étape suivante envoie le fichier readme.md à <myregistry>.azurecr.io/samples/artifact:readme.

  • Le registre est identifié par le nom de registre complet <myregistry>.azurecr.io (tout en minuscules), suivi de l’espace de noms et du référentiel : /samples/artifact.
  • L’artefact est étiqueté :readme, ce qui l’identifie de manière unique parmi les autres artefacts listés dans le référentiel (:latest, :v1, :v1.0.1).
  • Le paramètre --artifact-type readme/example différencie l’artefact d’une image conteneur, qui utilise application/vnd.oci.image.config.v1+json.
  • ./readme.md identifie le fichier chargé et :application/markdown représente le mediaType IANA du fichier.
    Pour plus d’informations, consultez Conseils pour les auteurs d’artefacts OCI.

Utilisez la commande oras push pour envoyer le fichier à votre registre.

Linux, WSL2 ou 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

La sortie d’un envoi réussi ressemble à ce qui suit :

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

Envoyer un artefact racine multifichier

Quand des artefacts OCI sont envoyés à un registre avec ORAS, chaque référence de fichier est envoyée en tant qu’objet blob. Pour envoyer des objets blob distincts, référencez les fichiers individuellement ou un répertoire contenant une collection de fichiers.
Pour plus d’informations sur la façon d’envoyer une collection de fichiers, consultez Envoyer des artefacts avec plusieurs fichiers.

Créez une documentation pour le référentiel :

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

Envoyez l’artefact multifichier :

Linux, WSL2 ou 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

Découvrir le manifeste

Pour afficher le manifeste créé à la suite de oras push, utilisez oras manifest fetch :

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

La sortie doit ressembler à ceci :

{
  "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"
  }
}

Tirer un artefact racine

Création d’un répertoire propre pour le téléchargement

mkdir ./download

Exécutez la commande oras pull pour tirer (pull) l’artefact de votre registre.

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

Afficher les fichiers tirés

tree ./download

Supprimer l’artefact (facultatif)

Pour supprimer l’artefact de votre registre, utilisez la commande oras manifest delete.

 oras manifest delete $REGISTRY/samples/artifact:readme

Étapes suivantes

  • En savoir plus sur les références d’artefacts, l’association de signatures, la nomenclature logicielle et les autres types de références
  • En savoir plus sur le projet ORAS, notamment la configuration d’un manifeste pour un artefact
  • Visiter le dépôt OCI Artifacts pour obtenir des informations de référence sur les nouveaux types d’artefacts