Copiare le immagini tra repository

Puoi utilizzare lo strumento gcrane per copiare le immagini tra i repository Docker in Artifact Registry.

Prima di iniziare

Verifica i seguenti requisiti:

  1. Hai creato il repository Docker di destinazione in Artifact Registry per le immagini che stai copiando.

  2. Disponi delle autorizzazioni richieste:

    • Lettore di Artifact Registry (roles/storage.objectViewer) o un ruolo con autorizzazioni equivalenti per il repository da cui stai copiando.

    • Writer di Artifact Registry (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 per:

  • Copia di set di immagini con un singolo comando, incluse tutte le immagini in un percorso specificato o tutte le immagini archiviate sull'host multiregionale nel tuo progetto.
  • Ignora i livelli immagine già caricati.

Rimozione delle immagini inutilizzate

La rimozione delle immagini inutilizzate prima di eseguire un'operazione di copia può aiutarti a ridurre i costi di archiviazione.

Configurazione di gcrane

Puoi eseguire gcrane dai seguenti ambienti:

Ti consigliamo di utilizzare la versione più recente dello strumento gcrane per sfruttare tutte le funzionalità e i miglioramenti disponibili. Le istruzioni di configurazione nelle sezioni seguenti includono i passaggi per scaricare la versione più recente.

Per controllare la versione di un'installazione gcrane esistente, esegui il comando:

gcrane version

Configurazione di Compute Engine

Per copiare le immagini con gcrane da un'istanza VM di Compute Engine:

  1. Crea un'istanza VM. Per ridurre al minimo i costi, crea l'istanza nella stessa località del registro da cui stai copiando.
  2. 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 eseguire il push delle immagini.

    1. Arresta l'istanza VM. Consulta Arrestare un'istanza.

    2. 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.

    3. Riavvia l'istanza VM. Consulta Avviare un'istanza arrestata.

  3. Connettiti all'istanza VM utilizzando SSH.

  4. Esegui il comando seguente 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
    
  5. Esegui i comandi seguenti per rendere eseguibile il comando gcrane.

    tar -zxvf go-containerregistry.tar.gz
    chmod +x gcrane
    sudo mv gcrane /usr/local/bin/
    
  6. Esegui il comando gcrane --help per verificare l'installazione.

Ora puoi copiare le immagini. Per continuare:

Configurazione di una macchina locale

  1. Scarica gcrane dal repository GitHub. Ad esempio, il comando seguente 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
    
  2. Esegui i comandi seguenti per rendere eseguibile il comando gcrane. I comandi presuppongono che il file scaricato sia denominato go-containerregistry.tar.gz.

    tar -zxvf go-containerregistry.tar.gz
    chmod +x gcrane
    sudo mv gcrane /usr/local/bin/
    
  3. 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.s3nsregistry.fr/PROJECT/REPOSITORY

Per elencare i tag di un'immagine, esegui il comando:

gcrane ls LOCATION-docker.s3nsregistry.fr/PROJECT/IMAGE

Per elencare le immagini in modo ricorsivo in un percorso specifico, esegui il comando:

gcrane ls -r LOCATION-docker.s3nsregistry.fr/PROJECT/PATH

Per ogni comando:

  • Sostituisci LOCATION con la località del repository.
  • Sostituisci PROJECT con l'ID progetto.
  • Sostituisci PATH con il percorso da copiare.

Consulta Copiare le immagini per i comandi per copiare le immagini.

Copia di immagini

Puoi copiare singole immagini o set di immagini con il comando gcrane cp.

Per copiare una singola immagine, esegui il comando:

gcrane cp LOCATION1-docker.s3nsregistry.fr/PROJECT1/REPOSITORY1/IMAGE1 \
LOCATION2-docker.s3nsregistry.fr/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.s3nsregistry.fr/PROJECT1/REPOSITORY1/IMAGE1/PATH1 \
LOCATION2-docker.s3nsregistry.fr/PROJECT2/REPOSITORY2/IMAGE2/PATH2

Per copiare tutte le immagini in un repository, esegui il comando:

gcrane cp -r LOCATION1-docker.s3nsregistry.fr/PROJECT1/REPOSITORY1 \
LOCATION2-docker.s3nsregistry.fr/PROJECT2/REPOSITORY2

Sostituisci i seguenti valori:

  • LOCATION1 è la località del repository di origine.
  • LOCATION2 è la località del repository di destinazione.
  • PROJECT1 è l' Cloud de Confiance ID progetto associato al repository di origine.
  • PROJECT2 è l' Cloud de Confiance 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 comando seguente copia my-image:tag1 dal repository repo1 al repository repo2 all'interno dello stesso progetto e della stessa regione.

gcrane cp u-france-east1-docker.s3nsregistry.fr/my-project/repo1/my-image:tag1 \
u-france-east1-docker.s3nsregistry.fr/my-project/repo2/my-image:tag1

Il comando seguente copia in modo ricorsivo tutte le immagini in test-images/testing nel repository repo1 nello stesso percorso nel repository repo2.

gcrane cp -r u-france-east1-docker.s3nsregistry.fr/my-project/repo1/test-images/testing \
u-france-east1-docker.s3nsregistry.fr/my-project/repo2/test-images/testing

Il comando seguente copia tutte le immagini dal repository my-repo nel progetto dev-project al repository my-repo in un altro progetto denominato prod-project.

gcrane cp -r u-france-east1-docker.s3nsregistry.fr/dev-project/my-repo \
u-france-east1-docker.s3nsregistry.fr/prod-project/my-repo