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.0
zum Beispiel.
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.
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 dieapplication/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
.
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.
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.