In diesem Dokument werden die Unterschiede zwischen Container Registry erläutert. und Artifact Registry zum Authentifizieren, Hoch- und Herunterladen von Container-Images mit Docker erstellen.
In diesem Leitfaden konzentrieren sich die Vergleiche auf Standard-Artifact Registry-Repositories, also reguläre Artifact Registry-Repositories, die unabhängig von der Container Registry sind und alle Artifact Registry-Funktionen unterstützen.
Wenn Ihr Administrator Repositories mit Unterstützung von gcr.io-Domains eingerichtet hat, werden Anfragen an gcr.io
-Hostnamen automatisch an ein entsprechendes Artifact Registry-Repository weitergeleitet. Wenn Sie ein in Artifact Registry gehostetes gcr.io-Repository verwenden möchten, benötigen Sie eine entsprechende Artifact Registry-Rolle oder eine Rolle mit entsprechenden Berechtigungen.
Informationen zu den Unterschieden zwischen Container Registry und Artifact Registry beim Erstellen mit Cloud Build und der Bereitstellung in Cloud Run oder Google Kubernetes Engine, siehe Änderungen für Cloud Build, Cloud Run und GKE
Anhand dieser Informationen können Sie vorhandene Befehle, Konfigurationen oder Dokumentationen, die sich auf Container Registry mit Docker beziehen, anpassen.
Hinweise
In diesem Dokument wird davon ausgegangen, dass Sie Folgendes haben:
- Artifact Registry wurde in Ihrem Projekt aktiviert.
- Sie haben Docker installiert. Docker ist in Cloud Shell enthalten.
Übersicht
Im Großen und Ganzen ist der Workflow für die Verwendung von Docker mit Container Registry oder Artifact Registry derselbe.
Container Registry | Artifact Registry |
---|---|
Administrator
|
Administrator
|
Registry-Nutzer
|
Registry-Nutzer
|
Eine Tastenkombination für Container Registry ist jedoch, und Nutzerrollen in einem Workflow zusammengefasst. Diese Tastenkombination ist häufig in folgenden Sprachen verfügbar:
- Kurzanleitungen und Tutorials, in denen Sie Tests in einer Umgebung durchführen, in der Sie umfassende Berechtigungen haben.
- Workflows, die Cloud Build verwenden, da der Cloud Build-Dienst Konto hat die Berechtigung zum Hinzufügen eines Registry-Hosts in derselben Google Cloud Projekt arbeiten.
Der Workflow für Verknüpfungen sieht so aus:
- Aktivieren Sie die Container Registry API.
- Erteilen Sie dem Konto Berechtigungen für den Zugriff auf Container Registry.
Authentifizieren Sie sich bei der Registry. Die einfachste Authentifizierungsoption ist die Verwendung des Docker Credential Helper in der Google Cloud CLI. Dies ist ein einmaliger Vorgang. Konfigurationsschritts hinzu.
gcloud auth configure-docker
Erstellen und taggen Sie das Image. Mit diesem Befehl wird z. B. das Image erstellt und mit Tags versehen.
gcr.io/my-project/my-image:tag1
:docker build -t gcr.io/my-project/my-image:tag1
Laden Sie das Image in die Registry hoch. Beispiel:
docker push gcr.io/my-project/my-image:tag1
Wenn der Registry-Host
gcr.io
nicht im Projekt vorhanden ist, wird er von Container Registry vor dem Hochladen des Images hinzugefügt.Rufen Sie das Image aus der Registry ab oder stellen Sie es in einer Google Cloud-Laufzeit bereit. Beispiel:
docker pull gcr.io/my-project/my-image:tag1
Dieser Workflow basiert auf den folgenden Tastenkürzeln:
- Das Konto, über das Bilder gepusht werden, hat die Rolle „Storage-Administrator“ oder eine Rolle mit denselben Berechtigungen, z. B. „Inhaber“. Aufgrund der umfassenden Berechtigungen dieser Rolle Lese- und Schreibzugriff für alle Storage-Buckets in einem Projekt, einschließlich Buckets die nicht von Container Registry verwendet werden.
- Wenn Sie einige Google Cloud APIs aktivieren, Die Container Registry API wird automatisch aktiviert. Das bedeutet, dass Nutzer dieser Dienste impliziten Zugriff auf Container Registry im selben Projekt haben. Für Nutzer, die Builds in Cloud Build ausführen können, können z. B. Images an Registry-Hosts standardmäßig hinzufügen.
In Artifact Registry gibt es eine klare Trennung zwischen Administrator- und Repository-Nutzerrollen, die die Schritte im Build- und Bereitstellungsworkflow ändert. Nehmen Sie die folgenden Änderungen vor, um den Container Registry-Workflow für Artifact Registry anzupassen. Jeder Schritt ist mit zusätzlichen Informationen zum Ändern des Workflows verknüpft.
Neu: Aktivieren Sie die Artifact Registry API.
Sie müssen die Artifact Registry API aktivieren. Cloud Build und Laufzeitumgebungen wie Cloud Run und GKE, die API nicht automatisch für Sie aktivieren.
Neu: Erstellen Sie das Ziel-Docker-Repository, falls nicht bereits vorhanden sind. Sie müssen ein Repository erstellen, bevor Sie Images per Push an . Durch das Übertragen eines Images kann die Erstellung eines Repositorys nicht ausgelöst werden und das Cloud Build-Dienstkonto verfügt nicht über die Berechtigungen zum Erstellen von Repositories.
Gewähren Sie Berechtigungen für das Konto, das mit dem Artifact Registry.
Geändert: Beim Repository authentifizieren Wenn Sie den Credential Helper in der gcloud CLI verwenden, müssen Sie die Hosts angeben, die Sie Ihrer Docker-Clientkonfiguration hinzufügen möchten. Mit diesem Befehl wird beispielsweise der Host
us-central1-docker.pkg.dev
hinzugefügt:gcloud auth configure-docker us-central1-docker.pkg.dev
Geändert: Bild erstellen und taggen
Der folgende Beispielbefehl ist mit dem Container Registry-Beispiel identisch: Für das Image wird jedoch ein Artifact Registry-Repository-Pfad verwendet.
docker build -t us-central1-docker.pkg.dev/my-project/my-repo/my-image:tag1
Geändert: Übertragen Sie das Image mittels Push in das Repository. Artifact Registry-Pfad. Beispiel:
docker push us-central1-docker.pkg.dev/my-project/my-repo/my-image:tag1
Geändert: Holen Sie das Image über den Artifact Registry-Pfad aus dem Repository ab. Beispiel:
docker pull us-central1-docker.pkg.dev/my-project/my-repo/my-image:tag1
API aktivieren
Wichtige Fakten
- Sie müssen die Artifact Registry API aktivieren. zusätzlich zur API für andere Google Cloud-Dienste wie Cloud Build, Cloud Run und GKE
Im folgenden Vergleich wird beschrieben, wie die API für jeden Dienst aktiviert wird:
Container Registry
Sie müssen die Container Registry API aktivieren. bevor Sie Docker oder Drittanbieter-Clients mit Container Registry verwenden.
Wenn Sie die folgenden Google Cloud APIs aktivieren, wird auch die Container Registry API automatisch aktiviert:
- Flexible App Engine-Umgebung
- Cloud Build
- Cloud Run-Funktionen
- Cloud Run
- Container-Scan oder On-Demand-Scan in der Artefaktanalyse
- Google Kubernetes Engine
Mit den Standardberechtigungen können Nutzer, die Builds in Cloud Build ausführen können, Scannen Sie Container mit der Artefaktanalyse oder stellen Sie Container bereit, Google Cloud-Laufzeiten haben implizit Zugriff auf Images in Container Registry, wenn sich die Registry im selben Projekt befindet.
Artifact Registry
Sie müssen die Artifact Registry API aktivieren. bevor Sie Docker-Clients oder andere Google Cloud-Dienste mit Artifact Registry.
Dienste wie Cloud Build, Cloud Run und GKE aktivieren die Artifact Registry API nicht automatisch.
Mit gcloud können Sie mehrere APIs im selben Projekt aktivieren. Wenn Sie beispielsweise die Cloud Build API und die Artifact Registry API aktivieren möchten, führen Sie den Befehl aus:
gcloud services enable
artifactregistry.googleapis.com \
cloudbuild.googleapis.com
Registrys und Repositories hinzufügen
Wichtige Fakten
Sie müssen ein Docker-Repository in Artifact Registry erstellen, bevor Sie ein Image per Push übertragen können.
Ein Schritt zur Registry-Erstellung wird in der Dokumentation, die beschreibt das Hochladen von Images in Container Registry, da ein Konto mit Storage Mit Administratorberechtigungen kann einem Projekt eine Registry mit der ersten Übertragung an den Registry-Host.
Container Registry speichert alle Images an einer einzigen Multiregion im selben Storage-Bucket. In Artifact Registry können Sie mehrere Repositories in derselben Region oder Mehrfachregion mit separaten Zugriffsrichtlinien.
Im folgenden Vergleich wird die Repository-Einrichtung in den einzelnen Diensten beschrieben:
Container Registry
In Container Registry können Sie Ihrem Projekt bis zu vier Registry-Hosts hinzufügen. Sie fügen einen Registry-Host hinzu, indem Sie das erste Image per Push übertragen.
Wenn Sie Ihrem Projekt eine Registry wie
gcr.io
hinzufügen möchten, muss ein Konto mit der ID Die Rolle „Storage Admin“ auf Projektebene überträgt ein anfängliches Image.Beispiel: Der Host
gcr.io
ist im Projekt nicht vorhanden.my-project
, diegcr.io/my-project/my-image:1.0
-Trigger für das Image werden übertragen führen Sie die folgenden Schritte aus:gcr.io
-Host zum Projekt hinzufügen- Erstellen Sie im Projekt einen Speicher-Bucket für
gcr.io
. - Bild als
gcr.io/my-project/my-image:1.0
speichern
Nach diesem ersten Push können Sie anderen Nutzern Berechtigungen für den Speicher-Bucket erteilen.
Innerhalb eines Projekts speichert ein Registry-Host alle Images im selben Storage-Bucket. Im folgenden Beispiel hat das Projekt my-project
zwei Images namens
web-app
in der Registry gcr.io
. Eine davon befindet sich direkt unter der Projekt-ID my-project
. Das andere Bild befindet sich im Repository team1
.
gcr.io/my-project/web-app
gcr.io/my-project/team1/web-app
Artifact Registry
Ein Konto mit der Rolle „Artifact Registry Repository Administrator“ muss das Repository erstellen, bevor Sie Images per Push übertragen können. Anschließend können Sie anderen Nutzern Berechtigungen für das Repository erteilen.
In Artifact Registry ist jedes Repository eine separate Ressource. Dementsprechend wird Alle Image-Pfade müssen ein Repository enthalten.
Gültige Bildpfade:
us-central1-docker.pkg.dev/my-project/team1/web-app:1.0
us-central1-docker.pkg.dev/my-project/team2/web-app:1.0
Ungültiger Image-Pfad (enthält kein Repository):
us-central1-docker.pkg.dev/my-project/web-app:1.0
Die folgenden Beispiele zeigen Situationen, in denen ein Bild per Push-Funktion fehlendes Repository schlägt fehl.
- Bild per Push an
us-central1-docker.pkg.dev/my-project/team1
übertragen, wennus-central1-docker.pkg.dev/my-project/team1
ist nicht vorhanden. - Ein Bild wird an
us-central1-docker.pkg.dev/my-project/team2
gepusht, obwohlus-central1-docker.pkg.dev/my-project/team1
vorhanden ist, aberus-central1-docker.pkg.dev/my-project/team2
nicht.
Berechtigungen gewähren
Wichtige Fakten
- Weisen Sie dem Konto, das Sie mit Artifact Registry verwenden, die entsprechende Artifact Registry-Rolle zu.
- Google Cloud-Dienste haben gleichwertigen Lese- oder Schreibzugriff auf beides Container Registry und Artifact Registry. Die Standardeinstellung Das Cloud Build-Dienstkonto kann keine Repositories erstellen.
- Container Registry unterstützt die Zugriffssteuerung auf Ebene des Storage-Buckets. Artifact Registry unterstützt die Zugriffssteuerung auf Repository-Ebene.
Im folgenden Vergleich wird beschrieben, wie die Berechtigungen in den einzelnen Diensten eingerichtet werden:
Container Registry
Container Registry verwendet die Cloud Storage-Rollen, um den Zugriff zu steuern.
- Storage-Objekt-Betrachter auf Storage-Bucket-Ebene
- Images von vorhandenen Registry-Hosts im Projekt abrufen (lesen).
- Autor alter Storage-Buckets auf Storage-Bucket-Ebene
- Images für vorhandene Registry-Hosts im Projekt per Push (Schreiben) und Pull (Lesezugriff) senden.
- Storage-Administrator auf Projektebene
- Fügen Sie einem Projekt einen Registry-Host hinzu, indem Sie ein anfängliches Image auf den Host übertragen.
Nachdem das erste Image in eine Registry übertragen wurde, gewähren Sie Cloud Storage-Rollen andere Konten, die Zugriff auf den Storage-Bucket benötigen. Beachten Sie, dass alle Konto mit allen Berechtigungen der Rolle „Storage-Administrator“ Lese-, Schreib- und Storage-Buckets und Speicherobjekte im gesamten Projekt löschen.
Berechtigungen für einen Storage-Bucket gelten für alle Repositories in der Registry.
Beispiel: Jeder Nutzer mit Storage Object Viewer-Berechtigungen für die
Bucket für gcr.io/my-project
kann Bilder in allen folgenden Repositories lesen:
gcr.io/my-project/team1
gcr.io/my-project/team2
gcr.io/my-project/test
gcr.io/my-project/production
Artifact Registry
Artifact Registry hat eigene Rollen zur Steuerung des Zugriffs. Diese Rollen sorgen für eine klare Trennung zwischen Administrator- und Repository-Nutzerrollen.
Nur Konten, die Repositories verwalten, sollten Artifact Registry haben Rolle „Repository-Administrator“ oder „Artifact Registry-Administrator“.
- Artifact Registry-Leser
- Artefakte und Repositories auflisten. Artefakte herunterladen.
- Artifact Registry-Autor
- Artefakte und Repositories auflisten. Artefakte herunterladen, neues Artefakt hochladen und fügen Sie Tags hinzu oder aktualisieren Sie sie.
- Repository-Administrator für Artifact Registry
- Artifact Registry Writer-Berechtigungen und Berechtigungen zum Löschen von Artefakten und Tags.
- Artifact Registry-Administrator
- Berechtigungen für Artifact Registry-Repository-Administratoren und Berechtigungen zum Erstellen, Aktualisieren, Löschen und Gewähren von Berechtigungen für Repositories.
Sie können diese Berechtigungen auf Repository-Ebene anwenden. Beispiel:
- Zugriff auf Team 1 für
us-central1-docker.pkg.dev/my-project/team1
gewähren - Gewähren Sie Team 2 Zugriff auf
us-central1-docker.pkg.dev/my-project/team2
.
Weitere Informationen zum Gewähren von Artifact Registry-Berechtigungen finden Sie in der Dokumentation zur Zugriffssteuerung.
Bei der Registry authentifizieren
Wichtige Fakten
- Artifact Registry unterstützt dieselben Authentifizierungsmethoden wie Container Registry.
- Für den Docker Credential Helper müssen Sie Hosts angeben, die der Docker-Clientkonfiguration hinzugefügt werden sollen.
- Verwenden Sie für die Authentifizierung mit
docker login
den Artifact Registry-Host statt auf einen Container Registry-Host.
Credential Helper verwenden
Mit dem Befehl gcloud auth configure-docker
und dem eigenständigen Credential Helper wird Docker standardmäßig nur für *.gcr.io
-Hostnamen konfiguriert. Für Artifact Registry müssen Sie eine Liste der Artifact Registry-Hosts angeben, die Sie der Docker-Clientkonfiguration hinzufügen möchten.
Wenn Sie beispielsweise die Authentifizierung für Docker-Repositories in der Region us-central1
einrichten möchten, führen Sie den folgenden Befehl aus:
gcloud auth configure-docker us-central1-docker.pkg.dev
Wenn Sie später Repositories in us-east1
und asia-east1
hinzufügen, müssen Sie
und fügen Sie die entsprechenden regionalen Hostnamen
Docker-Konfiguration.
gcloud auth configure-docker us-east-docker.pkg.dev,asia-east1-docker.pkg.dev
Weitere Informationen zu den Artifact Registry-Authentifizierungsmethoden finden Sie unter Authentifizierung für Docker einrichten
Passwortauthentifizierung verwenden
Verwenden Sie beim Anmelden in Docker den Hostnamen der Artifact Registry anstelle eines *.gcr.io
-Hostnamens. Das folgende Beispiel zeigt die Authentifizierung mit einem base64-codierten Dienstkontoschlüssel beim Host us-central1-docker.pkg.dev
:
cat key.json | docker login -u _json_key_base64 --password-stdin \
https://us-central1-docker.pkg.dev
Bilder erstellen und taggen
Wichtige Punkte: – Artifact Registry verwendet für Repositories einen anderen Hostnamen.
Verwenden Sie beim Tagging eines Images den Pfad in Artifact Registry anstelle des Pfads in Container Registry. Beispiel:
docker tag my-image us-central1-docker.pkg.dev/my-project/my-repo/my-image:1.0
Images auf die Registry hochladen
Wichtige Punkte: – In Artifact Registry muss das Ziel-Repository vorhanden sein, bevor Sie eine ein Bild hinzufügen. – Artifact Registry verwendet einen anderen Hostnamen für Repositories.
Verwenden Sie beim Pushen eines Images den Pfad in Artifact Registry anstelle des Pfads in Container Registry. Beispiel:
docker push us-central1-docker.pkg.dev/my-project/my-repo/my-image:1.0
Images aus der Registry herunterladen
Wichtig:
- Die Hostnamen von Artifact Registry unterscheiden sich von den Hostnamen der Container Registry.
Verwenden Sie beim Abrufen eines Images den Artifact Registry-Pfad anstelle des Container Registry-Pfad. Beispiel:
docker pull us-central1-docker.pkg.dev/my-project/my-repo/my-image:1.0
Beispiele für die Bereitstellung von Images in Google Cloud-Laufzeiten wie Cloud Run und GKE, siehe Images bereitstellen