Mit dem gcrane
-Tool können Sie Images zwischen Docker-Repositories in Artifact Registry kopieren.
Hinweise
Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:
Sie haben das Ziel-Docker-Repository erstellt in Artifact Registry für die Images, die Sie kopieren.
Sie haben die erforderlichen Berechtigungen:
Artifact Registry-Leser (
roles/storage.objectViewer
) oder eine Rolle mit für das Repository, aus dem Sie kopieren, äquivalente Berechtigungen haben.„Artifact Registry Writer“ (
roles/artifactregistry.writer
) oder eine Rolle mit entsprechenden Berechtigungen für das Zielrepository.
Übersicht
Das Tool gcrane vereinfacht das Kopieren zwischen verschiedenen Repositories mit Unterstützung für:
- Kopieren von Image-Sätzen mit einem einzigen Befehl, einschließlich aller Images unter einem Pfad oder alle auf dem multiregionalen Host in Ihrem Projekt gespeicherten Images.
- Bereits hochgeladene Imageebenen werden übersprungen.
Nicht verwendete Images entfernen
Wenn Sie nicht verwendete Bilder entfernen, bevor Sie einen Kopiervorgang ausführen, können Sie die Speicherkosten zu reduzieren.
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 gcr-cleaner Dokumentation.
gcrane einrichten
Sie können gcrane
aus den folgenden 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 Quellrepository befindet, fallen für die kopierten Images möglicherweise Gebühren für ausgehenden Netzwerktraffic an.
Cloud Shell: Option zum Kopieren kleiner Datasets mit bis zu 40 GB oder weniger. Da das
gcrane
-Tool das Hochladen von Imageebenen überspringt, die bereits hochgeladen wurden, gilt diese Beschränkung 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 befindet als für das Quell-Repository, können Gebühren für ausgehenden Netzwerktraffic anfallen für die Bilder, die Sie 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
Wir empfehlen, die neueste Version des gcrane
-Tools zu verwenden, damit Sie alle verfügbaren Funktionen und Verbesserungen nutzen können. In der Anleitung zur Einrichtung finden Sie
In den folgenden Abschnitten wird beschrieben, wie Sie die neueste Version herunterladen.
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:
- Erstellen Sie eine VM-Instanz. Erstellen Sie die Instanz am selben Speicherort wie die Registry, aus der Sie kopieren, um die Kosten zu minimieren.
Standardmäßig ist die VM-Instanz dem Standarddienstkonto zugeordnet und hat Berechtigungen zum Abrufen von Images. Sie müssen den Zugriffsbereich so ändern, kann die VM-Instanz Images hochladen.
Stoppen Sie die VM-Instanz. Siehe Instanz beenden.
Ä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.
Starten Sie die VM-Instanz neu. Siehe Beendete Instanz starten.
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
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/
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
Öffnen Sie ein Cloud Shell-Fenster.
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
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
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/
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
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
Führen Sie die folgenden Befehle aus, um den Befehl
gcrane
ausführbar zu machen: Dabei wird davon ausgegangen, dass die heruntergeladene Datei den Namengo-containerregistry.tar.gz
hat.tar -zxvf go-containerregistry.tar.gz chmod +x gcrane sudo mv gcrane /usr/local/bin/
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 Images zu finden, die Sie kopieren möchten.
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 Pfad, der kopiert werden soll.
Informationen zu den Befehlen zum Kopieren von Images finden Sie unter Images kopieren.
Images kopieren
Mit dem Befehl gcrane cp
können Sie einzelne Images oder Image-Gruppen 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 Images 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 Speicherort des Quell-Repositorys.
- LOCATION2 ist der Speicherort des Ziel-Repositorys.
- PROJECT1 ist die Google Cloud-Projekt-ID, die mit dem Quell-Repository.
- PROJECT2 ist die Google Cloud-Projekt-ID, die mit dem Ziel-Repository verknüpft 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 für das Image im Ziel-Repository.
Beispiele
Mit dem folgenden Befehl wird my-image:tag1
aus dem Repository repo1
kopiert.
in das Repository repo2
innerhalb desselben Projekts und derselben Region.
gcrane cp us-west1-docker.pkg.dev/my-project/repo1/my-image:tag1 \
us-west1-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 im Repository repo2
kopiert.
gcrane cp -r us-west1-docker.pkg.dev/my-project/repo1/test-images/testing \
us-west1-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-west1-docker.pkg.dev/dev-project/my-repo \
us-west1-docker.pkg.dev/prod-project/my-repo