So standardisieren Sie die Softwarebereitstellung mit OCI Artifacts, ORAS und Docker Hub

Docker Hub ist die bekannteste Registry zum Verteilen und Teilen von Container-Images. Docker Hub und andere OCI-konforme Registrys können mittlerweile aber mehr als nur Container-Images. Das ORAS-Projekt (OCI Registry As Storage) wandelt Registrierungen in generische Artefaktspeicher um, die in der Lage sind, alle für Ihre Anwendung relevanten Assets zu veröffentlichen.

In diesem Artikel erfahren Sie, was ORAS ist, welche Herausforderungen es löst und wie Sie damit beginnen, es mit Docker Hub zu verwenden.

Docker Hub vs. OCI-Registries

Lassen Sie uns zunächst ein Detail klarstellen: Das Container-Ökosystem ist mehr als nur Docker. Die Tools und Prozesse, für die Docker Pionierarbeit geleistet hat, wurden vom OCI standardisiert. Docker ist jetzt neben anderen kompatiblen Containersystemen wie Podman und Kubernetes eine Implementierung der OCI-Spezifikationen.

Docker Hub ist eine mit OCI Registry kompatible Plattform zur Bereitstellung von Container-Images. OCI-Container-Tools können Inhalte von Docker Hub und anderen Registrierungen über Befehle wie verwenden docker pull und docker push. Während diese bisher nur mit Container-Images funktionierten, können Sie jetzt denselben Mechanismus verwenden, um die anderen Komponenten Ihrer App zu verteilen.

Warum generische Artefakte wichtig sind

Diese Funktionalität wird unter dem ORAS-Banner entwickelt. Es formt Registrierungen in „generische Artefaktspeicher“ um, mit denen Sie mithilfe des vertrauten Push/Pull-Workflows interagieren können.

Ein Artefakt ist alles, was ein Benutzer möglicherweise benötigt, um Ihre Software erfolgreich auszuführen. Dies könnte ein Container-Image oder eine andere Art von Asset sein, die für Ihr Projekt sinnvoll ist:

  • Helmkarten
  • Vorkompilierte Binärdateien und Installationspakete
  • SBOMs
  • Empfohlene Sicherheitsrichtlinienkonfigurationen, wie z. B. OPA-Regeln
  • Geben Sie Signaturen, Zertifikate und Metadaten frei

Diese wichtigen Assets können für Benutzer oft schwer zu finden sein. Sie sind in der Regel über verschiedene Quellcodeverwaltungsplattformen, Paketmanager und direkte Website-Downloads verstreut. Mit ORAS können Sie alles in einer zentralen Registrierung ablegen und Benutzern dann den Zugriff auf Inhalte mit einem einzigen Satz von Tools und Anmeldeinformationen ermöglichen. Das Anzeigen der SBOM für Ihre Version v1.1.0 ist so einfach wie oras pull example.com/my-app/sbom:v1.1.0zum Beispiel.

Lesen Sie auch  Ryan Mallett behandelte den getöteten Spieler wie „seinen Sohn“, verrät seine Mutter

Ist ORAS eine bahnbrechende Änderung für Container-Images?

ORAS unterbricht keine bestehenden Containerregistrierungsfunktionen. Sie können weiterhin Befehle ausführen, z docker push my-image:latest um Ihre Bilder zu verschieben.

Hinter den Kulissen gibt es jedoch erhebliche Änderungen bei der Inhaltsspeicherung. ORAS beseitigt die historische Annahme, dass alle Registrierungsinhalte ein Bild sind. Um Artefakte zu unterstützen, müssen Registrierungsstellen die Art jedes abgeschlossenen Uploads nachverfolgen. Verschiedene Arten von Artefakten werden in ORAS als „Medientypen“ bezeichnet.

Beliebte Community-Projekte können ihre eigenen Medientypen registrieren, um häufig verwendete Artefaktklassifikationen wie Helm-Diagramme zu identifizieren. Dadurch können Registrierungsanbieter relevante Informationen zu den von Ihnen gespeicherten Artefakten anzeigen.

Der Container-Image-Medientyp wird automatisch verwendet, wenn Sie von vorhandenen Tools wie z docker push. Ein standardmäßiger „unbekannter“ Typ wird angewendet, wenn Sie direkt von der ORAS CLI hochladen, es sei denn, Sie geben einen registrierten Typ an.

Installation der ORAS-CLI

Sie benötigen die ORAS CLI, um Artefakte mit beliebigen Typen zu pushen und zu pullen. Sie können die neueste Version von der GitHub-Release-Seite des Projekts herunterladen. Derzeit werden nur macOS- und Linux-Systeme unterstützt.

Extrahieren Sie das heruntergeladene Archiv und kopieren Sie dann die oras binär an einen Ort, der sich in Ihrem Pfad befindet:

$ 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/

Überprüfen Sie die Funktion Ihrer Binärdatei, indem Sie die ausführen oras version Befehl:

$ oras version
0.16.0

Jetzt können Sie mit der Nutzung von ORAS beginnen.

Verwendung von ORAS mit Docker Hub

ORAS ist nur mit Registries kompatibel, die Unterstützung für die OCI Artifacts-Spezifikation implementiert haben. Diese Liste enthält jetzt die meisten großen Anbieter, darunter Amazon ECR, Azure, Google und GitHub, sowie selbst gehostete Instanzen, die mit der CNCF-Distribution bereitgestellt werden.

Wir verwenden Docker Hub für diesen Artikel, da es die beliebteste Registrierungslösung ist. Im November 2022 wurde die vollständige Unterstützung für OCI-Artefakte hinzugefügt.

Lesen Sie auch  Warum läuft Liverpool gegen Aston Villa nicht live im Fernsehen?

Melden Sie sich bei Ihrer Registrierung an

ORAS verwendet automatisch Registrierungsdaten, die Sie zuvor zu Ihrer hinzugefügt haben ~/.docker/config.json Datei. Wenn Sie sich bei Docker Hub anmelden müssen, können Sie beides ausführen docker login oder oras login dazu:

$ oras login -u username -p password_or_personal_access_token

$ docker login -u username -p password_or_personal_access_token

Erstellen Sie als Nächstes eine einfache Datei, die Sie in die Registrierung hochladen können. Denken Sie daran, dass es keine Beschränkungen für die Art von Vermögenswerten gibt, die Sie pushen. Dieses Beispiel ist eine erfundene JSON-Datei, die den Status des Projekts beschreibt, aber Sie können alles hochladen, was für Ihre Benutzer oder Entwickler nützlich ist.

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

Jetzt können Sie Ihre Datei mit der ORAS CLI übertragen.

Drücken Sie Ihr Artefakt

Führen Sie den folgenden Befehl aus, um Ihr Artefakt nach dem Ersetzen zu verschieben mit Ihrem tatsächlichen Docker-Hub-Benutzernamen:

$ oras push docker.io//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

Es gibt ein paar bemerkenswerte Details in diesem Befehl:

  • Das erste Argument definiert die Registrierung, in die gepusht werden soll, und das Tag, das dem Artefakt zugewiesen werden soll. Dies ähnelt dem Pushen eines Container-Image-Tags.
  • nicht so wie docker CLI, ORAS erfordert, dass Sie die Registrierungs-URL angeben (docker.io für Docker-Hub). ORAS ist ein generisches Tool, das keine Annahmen darüber treffen kann, was oder wohin Sie pushen.
  • Das zweite Argument gibt den Pfad zu der Datei an, in die Sie hochladen filename:content-type Format. Da es sich bei der Beispieldatei um JSON handelt, ist die application/json Inhaltstyp ist ausgewählt.
  • Das dritte Argument gibt den ORAS-Artefakttyp (Medientyp) an, der Ihrem Artefakt zugewiesen werden soll. Sie sollten einen Standardmedientyp verwenden, wenn Sie eine registrierte Art von Artefakt hochladen, z. B. ein Helm-Diagramm, aber die Standardeinstellung „unbekannt“ ist für diese Demo angemessen.

Der Upload-Fortschritt wird in Ihrem Terminal angezeigt, ähnlich wie bei einem normalen docker push. Versuchen Sie, die auszuführen oras repo tags Befehl zum Bestätigen des Push-Vorgangs:

$ oras repo tags docker.io//oras-demo
1.1.0

Verwalten von Artefakten in der Benutzeroberfläche von Docker Hub

Ihr Artefakt wird auch auf der Docker Hub-Website angezeigt. In der Liste der Repositories sehen Sie Contains: Other um anzuzeigen, dass das Repository ein generisches Artefakt enthält. Container-Image-Repositorys sind gekennzeichnet als Contains: Image.

Bild, das ein generisches Artefakt in Docker Hub zeigt

Wählen Sie das Repository aus, um seine Details anzuzeigen, eine Beschreibung hinzuzufügen und alle verfügbaren Tags anzuzeigen. Es ähnelt der Arbeit mit Container-Images.

Bild, das ein generisches Artefakt in Docker Hub zeigt

Ziehen Sie Ihr Artefakt

Wenn Ihr Artefakt in der Registrierung verfügbar ist, können Sie jetzt zu einer anderen Maschine wechseln und die Schritte zur Installation der ORAS-CLI wiederholen und sich bei Ihrem Docker-Hub-Konto anmelden. Sobald Sie sich authentifiziert haben, verwenden Sie die oras pull Befehl zum Abrufen Ihres Artefakts:

$ oras pull docker.io//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

Die Dateien im Artefakt werden in Ihrem Arbeitsverzeichnis abgelegt:

$ ls
artifact.json

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

Sie haben ORAS erfolgreich verwendet, um die Artefakte Ihrer Anwendung zu verteilen, indem Sie die vorhandene Infrastruktur Ihres Containerregistrierungsanbieters verwendet haben.

Zusammenfassung

ORAS wandelt Container-Image-Registries in generische Distributionsplattformen um. Sie können jedes für Ihre Anwendung relevante Artefakt pushen und Benutzer können es mit einem einheitlichen Mechanismus abrufen. Dadurch wird vermieden, dass Sie mehrere Bereitstellungskanäle verwalten, veröffentlichen und zwischen ihnen wechseln müssen.

ORAS-Unterstützung wird auch zu beliebten Ökosystem-Tools hinzugefügt. Mit Helm können Sie Diagramme direkt in eine ORAS-Registry übertragen, indem Sie dessen verwenden helm push Befehl, zum Beispiel. Dadurch wird vermieden, dass Sie das Diagramm manuell exportieren müssen, damit Sie es weitergeben können oras push. Es übernimmt auch die Einstellung des richtigen ORAS-Medientyps für Sie. Sie können davon ausgehen, dass weitere Tools mit der Integration von ORAS beginnen werden, sodass Sie alle Arten von Inhalten direkt in Ihre zentrale Registrierung übertragen können.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.