Site Overlay

Comment standardiser la livraison de logiciels avec OCI Artifacts, ORAS et Docker Hub

Docker Hub est le registre le plus connu pour la distribution et le partage d’images de conteneurs. Cependant, Docker Hub et d’autres registres compatibles OCI peuvent désormais faire plus que de simples images de conteneurs. Le projet ORAS (OCI Registry As Storage) transforme les registres en magasins d’artefacts génériques, capables de publier tout actif pertinent pour votre application.

Dans cet article, vous apprendrez ce qu’est ORAS, les défis qu’il résout et comment commencer à l’utiliser avec Docker Hub.

Docker Hub vs registres OCI

Tout d’abord, clarifions un détail : l’écosystème des conteneurs est plus que Docker. Les outils et processus mis au point par Docker ont été standardisés par l’OCI. Docker est désormais une implémentation des spécifications OCI, aux côtés d’autres systèmes de conteneurs compatibles tels que Podman et Kubernetes.

Docker Hub est une plate-forme compatible avec OCI Registry pour la livraison d’images de conteneurs. Les outils de conteneur OCI peuvent utiliser le contenu de Docker Hub et d’autres registres via des commandes telles que docker pull et docker push. Alors que ceux-ci ne fonctionnaient auparavant qu’avec des images de conteneur, vous pouvez désormais utiliser le même mécanisme pour distribuer les autres composants de votre application.

Pourquoi les artefacts génériques sont importants

Cette fonctionnalité est développée sous la bannière ORAS. Il transforme les registres en  » magasins d’artefacts génériques  » avec lesquels vous pouvez interagir à l’aide du flux de travail push/pull familier.

Un artefact est tout ce dont un utilisateur peut avoir besoin pour exécuter correctement votre logiciel. Il peut s’agir d’une image de conteneur ou d’un autre type d’élément pertinent pour votre projet :

  • Cartes de barre
  • Fichiers binaires et packages d’installation précompilés
  • SBOM
  • Configurations de politique de sécurité recommandées, telles que les règles OPA
  • Libérer les signatures, les certificats et les métadonnées

Ces actifs vitaux peuvent souvent être difficiles à trouver pour les utilisateurs. Ils ont tendance à être dispersés sur différentes plaques-formes de contrôle de source, gestionnaires de packages et téléchargements directs sur le site Web. Avec ORAS, vous pouvez tout déposer dans un registre centralisé, puis laisser les utilisateurs récupérer du contenu à l’aide d’un ensemble unique d’outils et d’informations d’identification. L’affichage du SBOM pour votre version v1.1.0 est aussi simple que oras pull example.com/my-app/sbom:v1.1.0par exemple.

ORAS est-il un changement radical pour les images de conteneur ?

ORAS ne casse aucune des fonctionnalités existantes du registre de conteneurs. Vous pouvez continuer à exécuter des commandes telles que docker push my-image:latest pour déplacer vos images.

Cependant, des changements importants ont été apportés au stockage de contenu dans les coulisses. ORAS supprime l’hypothèse historique selon laquelle tout le contenu du registre est une image. Pour prendre en charge les artefacts, les registres doivent suivre le type de chaque téléchargement terminé. Différents types d’artefacts sont appelés  » types de médias  » dans ORAS.

Les projets communautaires populaires peuvent enregistrer leurs propres types de médias pour identifier les classifications d’artefacts couramment utilisées, telles que les cartes Helm. Cela permet aux fournisseurs de registre d’afficher des informations pertinentes sur les artefacts que vous avez stockés.

Le type de média d’image de conteneur est automatiquement utilisé lorsque vous poussez à partir d’outils existants tels que docker push. Un type  » inconnu  » par défaut est appliqué lorsque vous téléchargez directement à partir de la CLI ORAS, sauf si vous spécifiez un type enregistré.

Installation de la CLI ORAS

Vous avez besoin de l’interface de ligne de commande ORAS pour pousser et extraire des artefacts avec des types arbitraires. Vous pouvez télécharger la dernière version à partir de la page des versions GitHub du projet. Seuls les systèmes macOS et Linux sont actuellement pris en charge.

Extrayez l’archive téléchargée, puis copiez le oras binaire à un emplacement qui se trouve dans votre chemin :

$ tar -zxf oras_0.16.0_*.tar.gz -C oras-install/
$ mv oras-install/oras /usr/local/bin/
$ rm -rf oras_0.16.0_*.tar.gz oras-install/

Vérifiez le fonctionnement de votre binaire en exécutant le oras version commande :

$ oras version
0.16.0

Vous êtes maintenant prêt à commencer à utiliser ORAS.

Utiliser ORAS avec Docker Hub

ORAS n’est compatible qu’avec les registres qui ont implémenté la prise en charge de la spécification OCI Artifacts. Cette liste comprend désormais la plupart des principaux fournisseurs, notamment Amazon ECR, Azure, Google et GitHub, ainsi que des instances auto-hébergées déployées à l’aide de la distribution CNCF.

Nous utilisons Docker Hub pour cet article car il s’agit de la solution de registre la plus populaire. Il a ajouté une prise en charge complète des artefacts OCI en novembre 2022.

Connectez-vous à votre registre

ORAS réutilise automatiquement les informations d’identification du registre que vous avez précédemment ajoutées à votre registre. ~/.docker/config.json dossier. Si vous devez vous connecter à Docker Hub, vous pouvez exécuter soit docker login ou alors oras login faire cela :

$ oras login -u username -p password_or_personal_access_token

$ docker login -u username -p password_or_personal_access_token

Créez ensuite un fichier simple à télécharger dans le registre. N’oubliez pas qu’il n’y a aucune restriction sur le type d’actif que vous poussez. Cet exemple est un fichier JSON artificiel qui décrit l’état du projet, mais vous pouvez télécharger tout ce qui sera utile à vos utilisateurs ou développeurs.

$ echo '{"app": "oras-demo", "version": "1.1.0"}' > artifact.json

Vous êtes maintenant prêt à envoyer votre fichier avec la CLI ORAS.

Poussez votre artefact

Exécutez la commande suivante pour pousser votre artefact, après avoir remplacé <username> avec votre nom d’utilisateur Docker Hub :

$ oras push docker.io/<username>/oras-demo:1.1.0 
    artifact.json:application/json 
    --artifact-type application/vnd.unknown.config.v1+json
Uploading 7ac68d8d2a12 artifact.json
Uploaded  7ac68d8d2a12 artifact.json
Pushed docker.io/ilmiont/oras-demo:1.1.0
Digest: sha256:41abfed0ab43a24933c5eafe3c363418264a59eee527821a39fe7c0abf25570b

Il y a quelques détails remarquables dans cette commande :

  • Le premier argument définit le registre vers lequel pousser et la balise à attribuer à l’artefact. Cela revient à pousser une balise d’image de conteneur.
  • Contrairement à la docker CLI, ORAS vous demande de spécifier l’URL du registre (docker.io pour Docker Hub). ORAS est un outil générique qui ne peut pas faire d’hypothèses sur quoi ou où vous poussez.
  • Le deuxième argument spécifie le chemin d’accès au fichier que vous téléchargez dans filename:content-type format. Comme le fichier d’exemple est JSON, le application/json le type de contenu est sélectionné.
  • Le troisième argument spécifie le type d’artefact ORAS (type de support) à affecter à votre artefact. Vous devez utiliser un type de média standard si vous téléchargez un type d’artefact enregistré, comme un graphique Helm, mais la valeur par défaut  » inconnu  » est appropriée pour cette démo.

La progression du téléchargement est affichée dans votre terminal, de la même manière qu’un docker push. Essayez d’exécuter le oras repo tags commande pour confirmer que le push est terminé :

$ oras repo tags docker.io/<username>/oras-demo
1.1.0

Gestion des artefacts dans l’interface utilisateur de Docker Hub

Votre artefact apparaîtra également sur le site Web Docker Hub. Dans la liste des référentiels, vous verrez Contains: Other pour indiquer que le référentiel contient un artefact générique. Les référentiels d’images de conteneurs sont étiquetés comme Contains: Image.

image montrant un artefact générique dans Docker Hub

Sélectionnez le référentiel pour afficher ses détails, ajouter une description et voir toutes les balises disponibles. Cela revient à travailler avec des images de conteneurs.

image montrant un artefact générique dans Docker Hub

Tirer votre artefact

Avec votre artefact disponible dans le registre, vous pouvez maintenant passer à une autre machine et répéter les étapes pour installer la CLI ORAS et vous connecter à votre compte Docker Hub. Une fois authentifié, utilisez le oras pull pour récupérer votre artefact :

$ oras pull docker.io/<username>/oras-demo:1.1.0
Downloading 7ac68d8d2a12 artifact.json
Downloaded  7ac68d8d2a12 artifact.json
Pulled docker.io/ilmiont/oras-demo:1.1.0
Digest: sha256:41abfed0ab43a24933c5eafe3c363418264a59eee527821a39fe7c0abf25570b

Les fichiers de l’artefact seront déposés dans votre répertoire de travail :

$ ls
artifact.json

$ cat artifact.json
{"app": "demo-oras", "version": "1.1.0"}

Vous avez utilisé ORAS avec succès pour distribuer les artefacts de votre application, en utilisant l’infrastructure existante disponible auprès de votre fournisseur de registre de conteneurs.

Résumé

ORAS transforme les registres d’images de conteneurs en plaques-formes de distribution génériques. Vous pouvez pousser n’importe quel artefact pertinent pour votre application et les utilisateurs peuvent le récupérer à l’aide d’un mécanisme cohérent. Cela évite d’avoir à maintenir, publier et basculer entre plusieurs canaux de distribution.

La prise en charge d’ORAS est également ajoutée aux outils de l’écosystème populaire. Helm vous permet de pousser directement des graphiques vers un registre ORAS en utilisant son helm push par exemple. Cela évite d’avoir à exporter manuellement le graphique afin que vous puissiez le pousser avec oras push. Il gère également la définition du type de support ORAS correct pour vous. Vous pouvez vous attendre à ce que davantage d’outils commencent à intégrer ORAS, vous permettant de transférer toutes sortes de contenus directement vers votre registre centralisé.

Lire  La réalité au volant du Combi électrique Volkswagen (Essai ID Buzz)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *