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.
Sommaire
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 plates-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.0
par 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 utiliserons 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 ~/.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, leapplication/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
.
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.
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
commande 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 plates-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 populaires. Helm vous permet de pousser directement des graphiques vers un registre ORAS en utilisant son helm push
commande, 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é.