Copia immagini tra repository

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

Puoi utilizzare lo strumento anche per copiare immagini da Container Registry ad 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 necessarie:

    • Lettore Artifact Registry (roles/storage.objectViewer) o un ruolo con autorizzazioni equivalenti per il repository da cui viene eseguita la copia.

    • 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 supporto per:

  • Copia di insiemi di immagini con un singolo comando, incluse tutte le immagini in un percorso specificato o tutte le immagini archiviate su un host a più regioni 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 ridurre i costi di archiviazione.

Hai a disposizione una serie di strumenti per identificare e automatizzare la rimozione delle immagini che non ti servono più. Ad esempio, lo strumento gcr-cleaner ti consente di trovare e rimuovere vecchie immagini in base a diversi criteri. Lo strumento gcr-cleaner non è un prodotto ufficiale di Google.

Per ulteriori informazioni sulla configurazione e sull'utilizzo dello strumento, consulta la documentazione gcr-cleaner.

Configurazione di GCrane

Puoi eseguire gcrane dai seguenti ambienti:

  • Istanza Compute Engine - Utilizza questa opzione se hai un numero maggiore di container da copiare.

    Costi: uptime dell'istanza per la VM di Compute Engine. Se l'istanza VM si trova in una località diversa dal repository di origine, alle immagini copiate potrebbero essere applicati dei costi per il traffico di rete in uscita.

  • Cloud Shell: un'opzione per copiare piccoli set di circa 40 GB o meno. Poiché lo strumento gcrane salta il caricamento dei livelli delle immagini già 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 dal repository di origine, potrebbero essere applicati dei costi per il traffico di rete in uscita alle immagini copiate. Non puoi scegliere la località di una sessione Cloud Shell. Per verificare 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 usufruire di tutte le funzionalità e i miglioramenti disponibili. Le istruzioni di configurazione nelle sezioni seguenti 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:

  1. Crea un'istanza VM. Per ridurre al minimo i costi, crea l'istanza nella stessa località del registro da cui stai eseguendo la copia.
  2. Per impostazione predefinita, l'istanza VM è associata all'account di servizio 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 Avvio di un'istanza arrestata.

  3. Connettiti all'istanza VM tramite SSH.

  4. 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
    
  5. Esegui questi comandi 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 è tutto pronto per copiare le immagini. Per continuare:

Configurazione di Cloud Shell

  1. Apri una finestra di Cloud Shell.

    Apri Cloud Shell

  2. 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.
    
  3. 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
    
  4. Esegui questi comandi per rendere eseguibile il comando gcrane.

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

Ora è tutto pronto per copiare le immagini. Per continuare:

Configurazione di una macchina locale

  1. 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
    
  2. Esegui questi comandi 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 è tutto pronto per 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 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 al repository di origine.
  • PROJECT2 è l'ID progetto Google Cloud 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 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 comando seguente copia in modo ricorsivo tutte le immagini in test-images/testing del repository repo1 nello stesso percorso all'interno del 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 del progetto dev-project nel repository my-repo in un altro progetto denominato prod-project.

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