Puoi utilizzare lo strumento gcrane
per copiare le immagini tra i repository Docker in Artifact Registry.
Prima di iniziare
Verifica i seguenti requisiti:
Hai creato il repository Docker di destinazione in Artifact Registry per le immagini che stai copiando.
Disporre delle autorizzazioni necessarie:
Lettore di Artifact Registry (
roles/storage.objectViewer
) o un ruolo con autorizzazioni equivalenti per il repository da cui stai copiando.Artifact Registry Writer (
roles/artifactregistry.writer
) o un ruolo con autorizzazioni equivalenti per il repository di destinazione.
Panoramica
Lo strumento gcrane semplifica la copia tra i repository con il supporto di:
- Copia di insiemi di immagini con un singolo comando, incluse tutte le immagini in un percorso specificato o tutte le immagini archiviate in un host multiregionale nel progetto.
- I livelli immagine già caricati vengono ignorati.
Rimozione di immagini inutilizzate
Rimuovere le immagini non utilizzate prima di eseguire un'operazione di copia può aiutarti a ridurre i costi di archiviazione.
Esistono diversi strumenti per identificare e automatizzare la rimozione delle immagini che non ti servono più. Ad esempio, lo strumento gcr-cleaner ti aiuta a trovare e rimuovere le vecchie immagini in base a diversi criteri.
Lo strumento gcr-cleaner
non è un prodotto Google ufficiale.
Per ulteriori informazioni sulla configurazione e sull'utilizzo dello strumento, consulta la documentazione di gcr-cleaner.
Configurazione di gcrane
Puoi eseguire gcrane
dai seguenti ambienti:
Istanza Compute Engine: utilizza questa opzione se hai un numero maggiore di contenitori da copiare.
Costi: tempo di attività dell'istanza per la VM Compute Engine. Se l'istanza VM si trova in una posizione diversa rispetto al repository di origine, potrebbero essere applicati costi per il traffico in uscita dalla rete per le immagini che copi.
Cloud Shell: un'opzione per copiare piccoli set di circa 40 GB o meno. Poiché lo strumento
gcrane
salta il caricamento dei livelli di immagine già caricati, questo limite si applica ai nuovi dati che stai copiando.La copia di repository di dimensioni maggiori potrebbe causare la disconnessione di Cloud Shell dopo il periodo di timeout della richiesta di 10 minuti.
Costi: se l'istanza Cloud Shell si trova in una posizione diversa rispetto al repository di origine, potrebbero essere applicati costi per il traffico di rete in uscita per le immagini che copi. Non puoi scegliere la posizione di una sessione Cloud Shell. Per controllare la posizione della sessione corrente, esegui il comando:
curl metadata/computeMetadata/v1/instance/zone
Ti consigliamo di utilizzare la versione più recente dello strumento gcrane
per sfruttare tutte le funzionalità e i miglioramenti disponibili. Le istruzioni di configurazione riportate nelle seguenti sezioni includono i passaggi per scaricare la versione più recente.
Per controllare la versione di un'installazione di gcrane esistente, esegui il comando:
gcrane version
Configurazione di Compute Engine
Per copiare le immagini con gcrane
da un'istanza VM di Compute Engine:
- Crea un'istanza VM. Per ridurre al minimo i costi, crea l'istanza nella stessa posizione del registry da cui stai copiando.
Per impostazione predefinita, l'istanza VM è associata al service account predefinito e dispone delle autorizzazioni per eseguire il pull delle immagini. Devi modificare l'ambito di accesso in modo che l'istanza VM possa inviare le immagini.
Arresta l'istanza VM. Consulta Arrestare un'istanza.
Modifica l'ambito di accesso con il comando:
gcloud compute instances set-service-account INSTANCE --scopes=storage-rw
Sostituisci INSTANCE con il nome dell'istanza VM.
Riavvia l'istanza VM. Consulta Avvio di un'istanza interrotta.
Connettiti all'istanza VM tramite SSH.
Esegui il seguente comando per scaricare
gcrane
.curl -L \ https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \ -o go-containerregistry.tar.gz
Esegui i seguenti comandi per rendere eseguibile il comando
gcrane
.tar -zxvf go-containerregistry.tar.gz chmod +x gcrane sudo mv gcrane /usr/local/bin/
Esegui il comando
gcrane --help
per verificare l'installazione.
Ora puoi copiare le immagini. Per continuare:
Configurazione di Cloud Shell
Apri una finestra di Cloud Shell.
Imposta il progetto predefinito. Sostituisci PROJECT con l'ID del progetto dove sono installati Container Registry e Artifact Registry
gcloud config set project PROJECT
Esegui il seguente comando per scaricare lo strumento
gcrane
.curl -L \ https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \ -o go-containerregistry.tar.gz
Esegui i seguenti comandi per rendere eseguibile il comando
gcrane
.tar -zxvf go-containerregistry.tar.gz chmod +x gcrane sudo mv gcrane /usr/local/bin/
Esegui il comando
gcrane --help
per verificare l'installazione.
Ora puoi copiare le immagini. Per continuare:
Configurazione di un computer locale
Scarica
gcrane
dal repository GitHub. Ad esempio, il seguente comando scarica la distribuzione Linux x86-64 dalla riga di comando.curl -L \ https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \ -o go-containerregistry.tar.gz
Esegui i seguenti comandi per rendere eseguibile il comando
gcrane
. I comandi presuppongono che il file scaricato sia denominatogo-containerregistry.tar.gz
.tar -zxvf go-containerregistry.tar.gz chmod +x gcrane sudo mv gcrane /usr/local/bin/
Esegui il comando
gcrane --help
per verificare l'installazione.
Ora puoi copiare le immagini. Per continuare:
Identificazione delle immagini da copiare
Dopo aver installato lo strumento gcrane
, puoi elencare le immagini esistenti nel repository di origine per trovare quelle che vuoi copiare.
Per elencare le immagini esistenti, esegui il comando:
gcrane ls LOCATION-docker.pkg.dev/PROJECT/REPOSITORY
Per elencare i tag di un'immagine, esegui il comando:
gcrane ls LOCATION-docker.pkg.dev/PROJECT/IMAGE
Per elencare le immagini in modo ricorsivo in un percorso specifico, esegui il comando:
gcrane ls -r LOCATION-docker.pkg.dev/PROJECT/PATH
Per ciascun comando:
- Sostituisci LOCATION con la posizione del repository.
- Sostituisci PROJECT con l'ID progetto.
- Sostituisci PATH con il percorso da copiare.
Consulta la sezione Copiare le immagini per conoscere i comandi per copiare le immagini.
Copia di immagini
Puoi copiare singole immagini o insiemi di immagini con il comando gcrane cp
.
Per copiare una singola immagine, esegui il comando:
gcrane cp LOCATION1-docker.pkg.dev/PROJECT1/REPOSITORY1/IMAGE1 \
LOCATION2-docker.pkg.dev/PROJECT2/REPOSITORY2/IMAGE2
Per copiare le immagini in modo ricorsivo in un percorso specifico di un repository, esegui il comando:
gcrane cp -r LOCATION1-docker.pkg.dev/PROJECT1/REPOSITORY1/IMAGE1/PATH1 \
LOCATION2-docker.pkg.dev/PROJECT2/REPOSITORY2/IMAGE2/PATH2
Per copiare tutte le immagini di un repository, esegui il comando:
gcrane cp -r LOCATION1-docker.pkg.dev/PROJECT1/REPOSITORY1 \
LOCATION2-docker.pkg.dev/PROJECT2/REPOSITORY2
Sostituisci i seguenti valori:
- LOCATION1 è la posizione del repository di origine.
- LOCATION2 è la posizione del repository di destinazione.
- PROJECT1 è l' Google Cloud ID progetto associato al repository di origine.
- PROJECT2 è l' Google Cloud ID progetto associato al repository di destinazione.
- REPOSITORY1 è il nome del repository di origine.
- REPOSITORY2 è il nome del repository di destinazione.
- IMAGE1 è l'immagine che vuoi copiare.
- IMAGE2 è il nome dell'immagine nel repository di destinazione.
Esempi
Il seguente comando copia my-image:tag1
dal repository repo1
al repository repo2
nello stesso progetto e nella stessa regione.
gcrane cp us-west1-docker.pkg.dev/my-project/repo1/my-image:tag1 \
us-west1-docker.pkg.dev/my-project/repo2/my-image:tag1
Il seguente comando copia in modo ricorsivo tutte le immagini in test-images/testing
nel repository repo1
nello stesso percorso nel repository repo2
.
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
Il seguente comando copia tutte le immagini dal repository my-repo
nel progetto dev-project
al repository my-repo
in un altro progetto chiamato prod-project
.
gcrane cp -r us-west1-docker.pkg.dev/dev-project/my-repo \
us-west1-docker.pkg.dev/prod-project/my-repo