Images aus Container Registry kopieren

Im Rahmen der Umstellung von Container Registry auf Artifact Registry können Sie Container Registry-Images kopieren, die Sie in Artifact Registry behalten möchten.

Überblick

Es gibt mehrere Möglichkeiten, Images von Container Registry in Artifact Registry zu kopieren. Wir empfehlen, Images mit dem Tool für automatische Migration zu kopieren. Dieses Tool unterstützt das Kopieren mehrerer Projekte, das Kopieren von Images auch dann möglich, wenn Sie die Weiterleitung bereits aktiviert haben, und eine größere Anzahl von Images als andere Methoden verarbeiten kann. Wenn Sie nicht mehr als 10.000 Images haben und die Weiterleitung noch nicht aktiviert haben, können Sie das Tool gcrane verwenden. Dieses Tool unterstützt auch das Kopieren von Image-Gruppen mit einem einzigen Befehl.

So senken Sie die Kosten:

  1. Entfernen Sie alte, nicht getaggte Images, bevor Sie Container in Artifact Registry kopieren.

  2. Wenn Sie Images in ein Standard-Artifact Registry-Repository (pkg.dev) kopieren, deaktivieren Sie das automatische Scannen für Artifact Registry, bevor Sie Images kopieren, um doppelte Scankosten zu vermeiden. Sie können das automatische Scannen wieder aktivieren, nachdem Sie alle Images kopiert haben.

    Wenn Sie Images in ein gcr.io-Repository in Artifact Registry kopieren, müssen Sie das automatische Scannen nicht deaktivieren.

    Weitere Informationen zur Kostenkontrolle im Zusammenhang mit dem Scannen auf Sicherheitslücken finden Sie unter Kosten für das Scannen auf Sicherheitslücken kontrollieren.

Images ohne Tags aus Container Registry entfernen

Durch die Entfernung nicht getaggter Images werden die Kosten für das Speichern in der Container-Registry sowie die Kosten für das Kopieren von Images aus Container Registry in Artifakt Registry gesenkt.

Es gibt verschiedene Tools, um nicht mehr benötigte Images zu identifizieren und zu automatisieren. Mit dem Tool gcr-cleaner können Sie beispielsweise alte Images anhand verschiedener Kriterien suchen und entfernen. Das gcr-cleaner-Tool ist kein offizielles Google-Produkt.

Weitere Informationen zum Einrichten und Verwenden des Tools finden Sie in der Dokumentation zu gcr-cleaner.

Images mit dem automatischen Migrationstool kopieren (empfohlen)

Mit dem automatischen Migrationstool können Sie von Container Registry zu gcr.io-Repositories in Artifact Registry oder zu standardmäßigen Artifact Registry-Repositories wechseln oder Ihre Images von Container Registry zu Artifact Registry kopieren.

Dieses Tool unterstützt nur die Migration und das Kopieren in denselben multiregionalen Standort.

Folgen Sie der Anleitung unter Automatisch zu Artifact Registry migrieren, um Ihre Images von Container Registry nach Artifact Registry zu kopieren.

Images mit gcrane kopieren

Zum Kopieren von Images in Artifact Registry können Sie auch das gcrane-Tool verwenden.

gcrane ermöglicht das Kopieren von Images zwischen mehreren Regionen, hat aber folgende Nachteile:

  • gcrane ist langsamer als die automatisierten Tools.
  • gcrane ist durch das Container Registry-Kontingent begrenzt.
  • gcrane kann fehlschlagen,wenn Images mehr als 10.000 Versionen oder Tags haben.
  • gcrane kann fehlschlagen, wenn Images falsch konfiguriert sind oder Daten fehlen.

Voraussetzungen

Überprüfen Sie die folgenden Anforderungen:

  1. Sie haben in den Google Cloud-Quell- und Zielprojekten Artifact Registry aktiviert.

  2. Sie haben in Artifact Registry ein Docker-Repository für die zu kopierenden Images erstellt.

  3. Sie haben die erforderlichen Berechtigungen:

    • Storage-Objekt-Betrachter (roles/storage.objectViewer) oder eine Rolle mit entsprechenden Berechtigungen im Storage-Bucket für den Container Registry-Host. Weitere Informationen

    • Artifact Registry-Autor (roles/artifactregistry.writer) oder eine Rolle mit entsprechenden Berechtigungen für das Artifact Registry-Repository. Weitere Informationen

  4. Wenn Sie die Option für den schnellen Kopiervorgang verwenden möchten, müssen folgende Voraussetzungen erfüllt sein:

    • Sie müssen gcrane-Version 0.10.0 oder höher verwenden. Die Anleitung zur Einrichtung von gcrane in dieser Dokumentation enthält eine Anleitung zum Herunterladen der neuesten Version.

      Führen Sie den folgenden Befehl aus, um die Version einer vorhandenen gcrane-Installation zu prüfen:

      gcrane version
      
    • Der Artifact Registry-Dienst-Agent des Zielprojekts muss die Rolle „Storage Object Viewer“ (roles/storage.objectViewer) oder eine Rolle mit entsprechenden Berechtigungen im Quellprojekt haben. Führen Sie den folgenden Befehl aus, um dem Dienst-Agent die Rolle „Storage Object Viewer“ zuzuweisen:

      gcloud projects add-iam-policy-binding SOURCE_PROJECT_ID \
          --member='serviceAccount:service-DEST_PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com' \
          --role='roles/storage.objectViewer'
      

      Ersetzen Sie SOURCE_PROJECT_ID durch die ID (z. B. „my-project“) des Google Cloud-Projekts durch Ihre Container Registry-Hosts.

      Ersetzen Sie DEST_PROJECT_NUMBER durch die Nummer (z. B. 12345) des Google Cloud-Projekts durch Ihr Artifact Registry-Repository.

Umgebungsoptionen und Kosten

Sie können gcrane aus verschiedenen Umgebungen ausführen:

  • Compute Engine-Instanz: Verwenden Sie diese Option, wenn eine größere Anzahl von Containern kopiert werden soll.

    Kosten:

    • Instanzlaufzeit für die Compute Engine-VM.
    • Netzwerkdatenübertragung für die Images, die Sie kopieren, es sei denn, Sie verwenden die Option für schnelles Kopieren. So minimieren Sie die Kosten:
    • Verwenden Sie eine VM-Instanz am selben Standort wie den Container Registry-Storage-Bucket.
    • Verwenden Sie ein Artifact Registry-Repository am selben multiregionalen Standort wie Container Registry, um die Kosten zu minimieren und die Kopiergeschwindigkeit zu maximieren. Für die Datenübertragung innerhalb einer Multiregion fallen keine Gebühren an und sie ist viel schneller als das standortübergreifende Kopieren.
  • Cloud Shell: Option zum Kopieren kleiner Datasets mit bis zu 40 GB oder weniger. Da das Hochladen von Bildebenen, die bereits hochgeladen wurden, bei gcrane übersprungen wird, gilt dieses Limit für neue Daten, die Sie kopieren.

    Wenn Sie größere Repositories kopieren, kann Cloud Shell die Verbindung nach Ablauf des Zeitlimits der Anfrage von 10 Minuten trennen.

    Kosten: Netzwerk-Datenübertragung für die Images, die Sie kopieren, es sei denn, Sie verwenden die Option zum schnellen Kopieren.

    • Sie können den Standort einer Cloud Shell-Sitzung nicht auswählen. Führen Sie den folgenden Befehl aus, um den Speicherort der aktuellen Sitzung zu ermitteln:
    curl metadata/computeMetadata/v1/instance/zone
    
    • Verwenden Sie ein Artifact Registry-Repository am selben multiregionalen Standort wie Container Registry, um die Kosten zu minimieren und die Kopiergeschwindigkeit zu maximieren. Für die Datenübertragung innerhalb einer Multiregion fallen keine Gebühren an und sie ist viel schneller als das standortübergreifende Kopieren.
  • Lokaler Computer: Wenn Sie die anderen Optionen nicht verwenden können, können Sie gcrane auf einem lokalen Computer ausführen.

    Kosten: Netzwerk-Datenübertragung für die Images, die Sie kopieren, es sei denn, Sie verwenden die Option zum schnellen Kopieren

    Verwenden Sie ein Artifact Registry-Repository am selben multiregionalen Standort wie Container Registry, um die Kosten zu minimieren und die Kopiergeschwindigkeit zu maximieren. Für die Datenübertragung innerhalb einer Multiregion fallen keine Gebühren an und sie ist viel schneller als das Kopieren zwischen Standorten.

Compute Engine einrichten

So kopieren Sie Images mit gcrane aus einer Compute Engine-VM-Instanz:

  1. Erstellen Sie eine VM-Instanz. Erstellen Sie die Instanz am selben Speicherort wie die Registry, aus der Sie kopieren, um die Kosten zu minimieren.
  2. Standardmäßig ist die VM-Instanz dem Standarddienstkonto zugeordnet und hat Berechtigungen zum Abrufen von Images. Sie müssen den Zugriffsbereich ändern, damit die VM-Instanz Images übertragen kann.

    1. Stoppen Sie die VM-Instanz. Siehe Instanz beenden.

    2. Ändern Sie den Zugriffsbereich mit dem folgenden Befehl:

      gcloud compute instances set-service-account INSTANCE --scopes=storage-rw
      

      Ersetzen Sie INSTANCE durch den Namen der VM-Instanz.

    3. Starten Sie die VM-Instanz neu. Siehe Beendete Instanz starten.

  3. Stellen Sie eine SSH-Verbindung zur VM-Instanz her.

  4. Führen Sie den folgenden Befehl aus, um gcrane herunterzuladen.

    curl -L \
    https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \
    -o go-containerregistry.tar.gz
    
  5. Führen Sie die folgenden Befehle aus, um den Befehl gcrane ausführbar zu machen:

    tar -zxvf go-containerregistry.tar.gz
    chmod +x gcrane
    sudo mv gcrane /usr/local/bin/
    
  6. Führen Sie den Befehl gcrane --help aus, um die Installation zu prüfen.

Jetzt können Sie Images kopieren. So fahren Sie fort:

Cloud Shell einrichten

  1. Öffnen Sie ein Cloud Shell-Fenster.

    Cloud Shell öffnen

  2. Legen Sie das Standardprojekt fest. Ersetzen Sie PROJECT durch die ID des Projekts, in dem Container Registry und Artifact Registry installiert sind.

    gcloud config set project PROJECT.
    
  3. Führen Sie den folgenden Befehl aus, um das gcrane-Tool herunterzuladen.

    curl -L \
    https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \
    -o go-containerregistry.tar.gz
    
  4. Führen Sie die folgenden Befehle aus, um den Befehl gcrane ausführbar zu machen:

    tar -zxvf go-containerregistry.tar.gz
    chmod +x gcrane
    sudo mv gcrane /usr/local/bin/
    
  5. Führen Sie den Befehl gcrane --help aus, um die Installation zu prüfen.

Jetzt können Sie Images kopieren. So fahren Sie fort:

Lokalen Computer einrichten

  1. Laden Sie gcrane aus dem GitHub-Repository herunter. Mit dem folgenden Befehl wird beispielsweise die Linux x86-64-Distribution über die Befehlszeile heruntergeladen.

    curl -L \
    https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \
    -o go-containerregistry.tar.gz
    
  2. Führen Sie die folgenden Befehle aus, um den Befehl gcrane ausführbar zu machen: Dabei wird davon ausgegangen, dass die heruntergeladene Datei den Namen go-containerregistry.tar.gz hat.

    tar -zxvf go-containerregistry.tar.gz
    chmod +x gcrane
    sudo mv gcrane /usr/local/bin/
    
  3. Führen Sie den Befehl gcrane --help aus, um die Installation zu prüfen.

Jetzt können Sie Images kopieren. So fahren Sie fort:

Images identifizieren, die kopiert werden sollen

Nachdem Sie gcrane installiert haben, können Sie die vorhandenen Images in Container Registry auflisten, um die Images zu finden, die Sie kopieren möchten.

Führen Sie den folgenden Befehl aus, um vorhandene Images aufzulisten:

gcrane ls LOCATION.gcr.io/PROJECT

Führen Sie den folgenden Befehl aus, um die Tags eines Images aufzulisten:

gcrane ls LOCATION.gcr.io/PROJECT/IMAGE

Führen Sie den folgenden Befehl aus, um Images rekursiv unter einem bestimmten Pfad aufzulisten:

gcrane ls -r LOCATION.gcr.io/PROJECT/PATH

Führen Sie für jeden Befehl folgende Schritte aus:

  • Ersetzen Sie LOCATION durch die Multi-Region der Registry: asia, eu oder us.
  • Ersetzen Sie PROJECT durch die Projekt-ID.

Informationen zu den Befehlen zum Kopieren von Images finden Sie unter Images kopieren.

Images kopieren

Sie können einzelne Images aus Container Registry, alle Images unter einem angegebenen Pfad an einem Standort oder alle Images an einem Standort kopieren.

Einzelnes Image kopieren

Führen Sie den folgenden Befehl aus, um ein einzelnes getaggtes Image zu kopieren:

gcrane cp GCR-LOCATION.gcr.io/PROJECT/IMAGE \
AR-LOCATION.pkg.dev/PROJECT/REPOSITORY/IMAGE

Dabei gilt:

  • GCR-LOCATION ist der multiregionale Host des Container Registry-Hosts: asia, eu oder us.
  • AR-LOCATION ist die Region oder Multiregion des Repositorys.
  • PROJECT ist die Projekt-ID.
  • REPOSITORY ist der Name des Artifact Registry-Repositorys.
  • GCR-IMAGE ist das Image, das Sie aus Container Registry kopieren möchten.
  • AR-IMAGE ist der Name des Images in Artifact Registry.

Betrachten Sie beispielsweise das folgende Quell- und Ziel-Image:

  • Container Registry-Image: eu.gcr.io/my-project/my-image:tag1
  • Artifact Registry-Image: europe-docker.pkg.dev/my-project/my-repo/my-image:tag1

Führen Sie den folgenden Befehl aus, um das Image zu kopieren:

gcrane cp eu.gcr.io/my-project/my-image:tag1 \
europe-docker.pkg.dev/my-project/my-repo/my-image:tag1

Alle Images unter einem Pfad kopieren

Führen Sie den folgenden Befehl aus, um Images rekursiv unter einem bestimmten Pfad in Container Registry zu kopieren:

gcrane cp -r GCR-LOCATION.gcr.io/PROJECT/GCR-PATH \
AR-LOCATION.pkg.dev/PROJECT/REPOSITORY/AR-PATH

Dabei gilt:

  • GCR-LOCATION ist der multiregionale Host des Container Registry-Hosts: asia, eu oder us.
  • AR-LOCATION ist die Region oder Multiregion des Repositorys.
  • PROJECT ist die Projekt-ID.
  • REPOSITORY ist der Name des Artifact Registry-Repositorys.
  • GCR-PATH ist der Pfad der Dateien, die Sie kopieren möchten.
  • AR-PATH ist der Pfad für die Images in Ihrem Artifact Registry-Repository.

Betrachten Sie zum Beispiel die folgenden Quell- und Zielpfade:

  • Container Registry-Pfad: eu.gcr.io/my-project/test-images/testing
  • Artifact Registry-Pfad: europe-docker.pkg.dev/my-project/my-repo/test-images/testing

Mit dem folgenden Befehl werden alle Images unter test-images/testing in das Repository my-repo kopiert:

gcrane cp -r eu.gcr.io/my-project/test-images/testing \
europe-docker.pkg.dev/my-project/my-repo/test-images/testing

Alle Images aus einem Container Registry-Speicherort kopieren

Führen Sie den folgenden Befehl aus, um alle Images aus einer Region mit Container Registry zu kopieren:

gcrane cp -r GCR-LOCATION.gcr.io/PROJECT \
AR-LOCATION.pkg.dev/PROJECT/REPOSITORY

Dabei gilt:

  • GCR-LOCATION ist der multiregionale Host des Container Registry-Hosts: asia, eu oder us.
  • AR-LOCATION ist die Region oder Multiregion des Repositorys.
  • PROJECT ist die Projekt-ID.
  • REPOSITORY ist der Name des Artifact Registry-Repositorys.

Wenn Sie Images für mehr als einen Container Registry-Speicherort in Ihrem Projekt kopieren möchten, führen Sie den Befehl für jeden Host einmal aus.

Betrachten Sie beispielsweise die folgende Quell-Registry und das Ziel-Artifact Registry-Repository. In diesem Beispiel befinden sich Container Registry und Artifact Registry in verschiedenen Projekten.

  • Container Registry-Host: eu.gcr.io/my-project
  • Artifact Registry-Image: europe-docker.pkg.dev/new-project/my-repo

Mit dem folgenden Befehl werden alle Images aus der Multiregion eu im Projekt my-project in das Repository my-repo des Projekts new-project kopiert.

gcrane cp -r eu.gcr.io/my-project \
europe-docker.pkg.dev/new-project/my-repo

Images mit Docker kopieren

Im Gegensatz zu den Kopiermethoden gcrane und gcloud besteht dieser Ansatz aus zwei Schritten.

  1. Image aus Container Registry herunterladen
  2. Image per Push in Ihr Artifact Registry-Repository übertragen

Voraussetzungen

Überprüfen Sie die folgenden Anforderungen:

  1. Sie haben in Artifact Registry ein Docker-Repository für die zu kopierenden Images erstellt.

  2. Sie haben die erforderlichen Berechtigungen:

    • Storage-Objekt-Betrachter (roles/storage.objectViewer) oder eine Rolle mit entsprechenden Berechtigungen im Storage-Bucket für den Container Registry-Host. Weitere Informationen

    • Artifact Registry-Autor (roles/artifactregistry.writer) oder eine Rolle mit entsprechenden Berechtigungen für das Artifact Registry-Repository. Weitere Informationen

  3. Sie haben Docker für die Authentifizierung bei Container Registry und Artifact Registry konfiguriert.

Kosten

Wenn Sie ein Image abrufen, wird Ihnen die Netzwerk-Datenübertragung in Rechnung gestellt. Die spezifischen Preise hängen vom Ziel des Pull-Befehls ab. Wenn Sie beispielsweise ein Image aus einer Cloud Shell-Sitzung abrufen, gelten die Preise für die Netzwerkdatenübertragung innerhalb von Google Cloud. Wenn Sie ein Image auf einen Computer außerhalb von Google Cloud übertragen, gelten die Preise für die allgemeine Netzwerk-Datenübertragung.

Die Docker-Befehle, die Sie zum Taggen, Übertragen und Abrufen von Images in Artifact Registry verwenden, ähneln denen, die Sie in Container Registry verwenden. Es gibt zwei Hauptunterschiede:

  • Der Hostname für die Artifact Registry-Docker-Repositories enthält ein Standortpräfix, gefolgt von -docker.pkg.dev. Beispiele sind australia-southeast1-docker.pkg.dev, europe-north1-docker.pkg.dev und europe-docker.pkg.dev.
  • Da Artifact Registry mehrere Docker-Repositories in einem einzelnen Projekt unterstützt, müssen Sie den Repository-Namen in Befehlen angeben.

Laden Sie ein Image aus Container Registry herunter und übertragen Sie es per Push in Ihr Artifact Registry-Repository, um ein Image in Docker zu kopieren.

Angenommen, Sie möchten ein Container Registry-Image am multiregionalen Standort eu in ein Artifact Registry-Repository in der Region europe kopieren.

  • Container Registry-Image: eu.gcr.io/my-project/my-image:tag1
  • Artifact Registry-Image: europe-docker.pkg.dev/my-project/my-repo/my-image:tag1

Der folgende Befehl ruft das Image aus Container Registry ab.

docker pull eu.gcr.io/my-project/my-image:tag1

Mit dem folgenden Befehl wird das Image per Push in das Artifact Registry-Repository namens my-repo übertragen.

docker push europe-north1-docker.pkg.dev/my-project/my-repo/my-image

Sie können Images auch in ein Artifact Registry-Repository übertragen, das Sie in einem anderen Projekt einrichten. In diesem Beispiel wird dasselbe Quell-Image per Push in das Repository my-repo im Projekt new-project übertragen.

docker push europe-north1-docker.pkg.dev/new-project/my-repo/my-image

Weitere Informationen zum Hoch- und Herunterladen von Images in Artifact Registry finden Sie unter Images hoch- und herunterladen.

Images mit gcloud kopieren

Verwenden Sie den Befehl gcloud container images add-tag, um ein Image aus Container Registry in Ihr Artifact Registry-Repository zu kopieren.

Voraussetzungen

Überprüfen Sie die folgenden Anforderungen:

  1. Sie haben in Artifact Registry ein Docker-Repository für die zu kopierenden Images erstellt.

  2. Sie haben die erforderlichen Berechtigungen:

    • Storage-Objekt-Betrachter (roles/storage.objectViewer) oder eine Rolle mit entsprechenden Berechtigungen im Storage-Bucket für den Container Registry-Host. Weitere Informationen

    • Artifact Registry-Autor (roles/artifactregistry.writer) oder eine Rolle mit entsprechenden Berechtigungen für das Artifact Registry-Repository. Weitere Informationen

Kosten

Wenn sich Container Registry an einem anderen Standort als Ihr Artifact Registry-Repository befindet, fallen für die kopierten Images Gebühren für die Netzwerk-Datenübertragung an. Wenn sich beide Dienste am selben Standort befinden, ist die Netzwerk-Datenübertragung kostenlos.

Führen Sie den folgenden Befehl aus, um ein Image von Container Registry in Artifact Registry zu kopieren:

gcloud container images add-tag GCR-IMAGE AR-IMAGE

Dabei gilt:

  • GCR-IMAGE ist der vollständige Pfad zum Container Registry-Image.
  • AR-IMAGE ist der vollständige Pfad für das Image im Artifact Registry-Repository.

Sehen Sie sich zum Beispiel die folgenden Quell- und Ziel-Images an:

  • Container Registry-Image: eu.gcr.io/my-project/my-image:tag1
  • Artifact Registry-Image: europe-docker.pkg.dev/my-project/my-repo/my-image:tag1

Mit diesem Befehl wird das Image aus der Container Registry am multiregionalen Standort eu in das Repository my-repo am multiregionalen Standort europe kopiert.

gcloud container images add-tag eu.gcr.io/my-project/my-image:tag1 \
europe-docker.pkg.dev/my-project/my-repo/my-image:tag1

Sie können auch Images in ein Artifact Registry-Repository kopieren, das Sie in einem anderen Projekt einrichten. In diesem Beispiel wird dasselbe Quell-Image in das Repository my-repo des Projekts new-project kopiert.

gcloud container images add-tag eu.gcr.io/my-project/my-image:tag1 \
europe-docker.pkg.dev/new-project/my-repo/my-image:tag1

Nächste Schritte