Images zwischen Repositories kopieren

Sie können das gcrane-Tool verwenden, um Images zwischen Docker-Repositories in Artifact Registry zu kopieren.

Sie können das Tool auch verwenden, um Images aus Container Registry in Artifact Registry zu kopieren.

Hinweis

Prüfen Sie, ob die folgenden Voraussetzungen erfüllt sind:

  1. Sie haben in Artifact Registry das Ziel-Docker-Repository erstellt, das Sie kopieren.

  2. Sie haben die erforderlichen Berechtigungen:

    • Artifact Registry-Leser (roles/storage.objectViewer) oder eine Rolle mit entsprechenden Berechtigungen für das Repository, aus dem Sie kopieren.

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

Überblick

Das Tool gcrane vereinfacht das Kopieren von Repositories, wobei Folgendes unterstützt wird:

  • Kopieren von Images mit einem einzigen Befehl, einschließlich aller Images unter einem bestimmten Pfad oder aller Images, die auf multiregionalem Host in Ihrem Projekt gespeichert sind.
  • Bereits hochgeladene Imageebenen werden übersprungen.

Nicht verwendete Images entfernen

Sie können die Speicherkosten reduzieren, indem Sie nicht verwendete Bilder vor dem Kopieren entfernen.

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.

SLOs einrichten

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: Instanzverfügbarkeit für die Compute Engine-VM. Wenn sich die VM-Instanz an einem anderen Standort als das Quell-Repository befindet, können für die kopierten Images Gebühren für ausgehenden Netzwerk-Traffic anfallen.

  • Cloud Shell: Option zum Kopieren kleiner Datasets mit bis zu 40 GB oder weniger. Da das gcrane-Tool den Upload von Bildebenen überspringt, die bereits hochgeladen sind, 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:Wenn sich die Cloud Shell-Instanz an einem anderen Standort als das Quell-Repository befindet, können für die kopierten Images Gebühren für ausgehenden Netzwerk-Traffic anfallen. 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
    

Wir empfehlen, die neueste Version des gcrane-Tools zu verwenden, um alle verfügbaren Funktionen und Verbesserungen nutzen zu können. In den folgenden Abschnitten finden Sie 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

Compute Engine einrichten

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

  1. VM-Instanz erstellen Erstellen Sie zum Minimieren der Kosten die Instanz am selben Standort wie die Registry, aus der Sie kopieren.
  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-Distribution „x86-64“ ü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 das gcrane-Tool installiert haben, können Sie die vorhandenen Images im Quell-Repository auflisten, um die zu kopierenden Images zu finden.

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

gcrane ls LOCATION-docker.pkg.dev/PROJECT/REPOSITORY

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

gcrane ls LOCATION-docker.pkg.dev/PROJECT/IMAGE

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

gcrane ls -r LOCATION-docker.pkg.dev/PROJECT/PATH

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

  • Ersetzen Sie LOCATION durch den Speicherort des Repositorys.
  • Ersetzen Sie PROJECT durch die Projekt-ID.
  • Ersetzen Sie PATH durch den zu kopierenden Pfad.

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

Images kopieren

Mit dem Befehl gcrane cp können Sie einzelne Bilder oder Gruppen von Bildern kopieren.

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

gcrane cp LOCATION1-docker.pkg.dev/PROJECT1/REPOSITORY1/IMAGE1 \
LOCATION2-docker.pkg.dev/PROJECT2/REPOSITORY2/IMAGE2

Führen Sie den folgenden Befehl aus, um Bilder rekursiv unter einem bestimmten Pfad in einem Repository zu kopieren:

gcrane cp -r LOCATION1-docker.pkg.dev/PROJECT1/REPOSITORY1/IMAGE1/PATH1 \
LOCATION2-docker.pkg.dev/PROJECT2/REPOSITORY2/IMAGE2/PATH2

Führen Sie den folgenden Befehl aus, um alle Images in einem Repository zu kopieren:

gcrane cp -r LOCATION1-docker.pkg.dev/PROJECT1/REPOSITORY1 \
LOCATION2-docker.pkg.dev/PROJECT2/REPOSITORY2

Ersetzen Sie die folgenden Werte:

  • LOCATION1 ist der Standort des Quell-Repositorys.
  • LOCATION2 ist der Standort des Ziel-Repositorys.
  • PROJECT1 ist die Google Cloud-Projekt-ID, die dem Quell-Repository zugeordnet ist.
  • PROJECT2 ist die Google Cloud-Projekt-ID, die dem Ziel-Repository zugeordnet ist.
  • REPOSITORY1 ist der Name des Quell-Repositorys.
  • REPOSITORY2 ist der Name des Ziel-Repositorys.
  • IMAGE1 ist das Image, das Sie kopieren möchten.
  • IMAGE2 ist der Name des Images im Ziel-Repository.

Beispiele

Mit dem folgenden Befehl wird my-image:tag1 aus dem Repository repo1 in das Repository repo2 innerhalb desselben Projekts und in derselben Region kopiert.

gcrane cp us-east1-docker.pkg.dev/my-project/repo1/my-image:tag1 \
us-east1-docker.pkg.dev/my-project/repo2/my-image:tag1

Mit dem folgenden Befehl werden alle Images unter test-images/testing im Repository repo1 rekursiv in denselben Pfad unter dem Repository repo2 kopiert.

gcrane cp -r us-east1-docker.pkg.dev/my-project/repo1/test-images/testing \
us-east1-docker.pkg.dev/my-project/repo2/test-images/testing

Mit dem folgenden Befehl werden alle Images aus dem Repository my-repo im Projekt dev-project in das Repository my-repo in einem anderen Projekt namens prod-project kopiert.

gcrane cp -r us-east1-docker.pkg.dev/dev-project/my-repo \
us-east1-docker.pkg.dev/prod-project/my-repo