Puoi utilizzare lo strumento gcrane
per copiare immagini tra 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.
Disponi delle autorizzazioni necessarie:
Lettore Artifact Registry (
roles/storage.objectViewer
) o un ruolo con autorizzazioni equivalenti per il repository da cui viene eseguita la copia.Writer Artifact Registry (
roles/artifactregistry.writer
) o un ruolo con autorizzazioni equivalenti per il repository di destinazione.
Panoramica
Lo strumento gcrane semplifica la copia tra repository che supportano:
- Copia di set di immagini con un singolo comando, incluse tutte le immagini in un percorso specificato o tutte le immagini archiviate nell'host multiregionale nel tuo progetto.
- Verranno ignorati i livelli immagine già caricati.
Rimozione delle immagini inutilizzate
Rimuovere le immagini inutilizzate prima di eseguire un'operazione di copia può aiutarti a: e ridurre i costi di archiviazione.
Sono disponibili numerosi strumenti per identificare e automatizzare la rimozione
le immagini che non ti servono più. Ad esempio,
gcr-cleaner
aiuta a trovare e rimuovere le vecchie immagini in base a diversi criteri.
Lo strumento gcr-cleaner
non è un prodotto ufficiale di Google.
Per ulteriori informazioni su come configurare e utilizzare lo strumento, consulta gcr-cleaner documentazione.
Configurazione di GCrane
Puoi eseguire gcrane
dai seguenti ambienti:
Istanza Compute Engine: utilizza questa opzione se hai un numero maggiore di di container da copiare.
Costi: uptime dell'istanza per della VM di Compute Engine. Se l'istanza VM si trova in una località diversa da repository di origine, potrebbero essere applicati addebiti per il traffico di rete in uscita le immagini che copi.
Cloud Shell: un'opzione per copiare piccoli set di circa 40 GB o meno. Lo strumento
gcrane
salta il caricamento di livelli immagine già presenti caricati, questo limite si applica ai nuovi dati che stai copiando.La copia di repository più grandi potrebbe causare la disconnessione di Cloud Shell dopo il periodo di timeout della richiesta di 10 minuti.
Costi: se l'istanza di Cloud Shell si trova in una località diversa rispetto al repository di origine, potrebbero essere applicati costi per il traffico di rete in uscita le immagini che copi. Non puoi scegliere la località di Cloud Shell durante la sessione. Per verificare la posizione della sessione corrente, esegui il comando:
curl metadata/computeMetadata/v1/instance/zone
Ti consigliamo di utilizzare l'ultima versione dello strumento gcrane
per usufruire
di tutte le funzionalità e i miglioramenti disponibili. Le istruzioni per la configurazione nel
le seguenti sezioni includono i passaggi per scaricare l'ultima versione.
Per verificare la versione di un'installazione gcrane esistente, esegui questo comando:
gcrane version
Configurazione di Compute Engine
Per copiare 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 località registro da cui stai eseguendo la copia.
Per impostazione predefinita, l'istanza VM è associata account di servizio predefinito e dispone delle autorizzazioni per eseguire il pull delle immagini. Devi modificare l'ambito di accesso in modo che dell'istanza VM può eseguire il push delle immagini.
Arresta l'istanza VM. Consulta Arresto di 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 arrestata.
Connettiti alla VM utilizzando SSH.
Esegui questo 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 questi 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 è tutto pronto per 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 in cui sono installati Container Registry e Artifact Registry
gcloud config set project PROJECT
Esegui questo 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 questi 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 è tutto pronto per copiare le immagini. Per continuare:
Configurazione di una macchina 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 questi comandi per rendere eseguibile il comando
gcrane
. La 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 è tutto pronto per copiare le immagini. Per continuare:
Identificazione delle immagini da copiare
Dopo aver installato lo strumento gcrane
, puoi elencare le immagini esistenti in
il repository di codice sorgente per trovare quelli da 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 ognuno dei comandi:
- Sostituisci LOCATION con la località del repository.
- Sostituisci PROJECT con l'ID progetto.
- Sostituisci PATH con il percorso da copiare.
Consulta Copia delle immagini per conoscere i comandi per copiare le immagini.
Copia delle immagini in corso...
Puoi copiare singole immagini o set di immagini con il comando gcrane cp
.
Per copiare una singola immagine, esegui questo 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 in 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 località del repository di destinazione.
- PROJECT1 è l'ID progetto Google Cloud associato alla proprietà repository di codice sorgente.
- PROJECT2 è l'ID progetto Google Cloud associato alla proprietà 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
nel repository repo2
all'interno dello stesso progetto e della 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 comando seguente copia tutte le immagini dal repository my-repo
nel
progetto dev-project
nel 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