Copiare le immagini da Container Registry

Nell'ambito della transizione da Container Registry ad Artifact Registry, puoi copiare le immagini di Container Registry che vuoi conservare in Artifact Registry.

Panoramica

Esistono diverse opzioni per copiare le immagini da Container Registry ad Artifact Registry. Ti consigliamo di copiare le immagini con lo strumento di migrazione automatica perché supporta la copia di più progetti, può copiare le immagini anche se hai già attivato il reindirizzamento e può gestire un numero maggiore di immagini rispetto ad altri metodi.

Per ridurre i costi:

  1. Rimuovi le immagini vecchie non taggate prima di copiare i container in Artifact Registry.

  2. Se stai copiando le immagini in un repository Artifact Registry (pkg.dev) standard, disattiva la scansione automatica per Artifact Registry prima di copiare le immagini per evitare costi di scansione duplicati. Puoi riattivare la scansione automatica dopo aver copiato tutte le immagini.

    Se stai copiando le immagini in un repository gcr.io su Artifact Registry, non è necessario disattivare la scansione automatica.

    Per ulteriori informazioni su come controllare i costi relativi all'analisi delle vulnerabilità, consulta la sezione Controllo dei costi di analisi delle vulnerabilità.

Rimuovere le immagini non taggate da Container Registry

La rimozione delle immagini non taggate riduce il costo dello spazio di archiviazione in Container Registry, nonché il costo per copiare le immagini da Container Registry ad Artifact Registry.

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.

Copia le immagini con lo strumento di migrazione automatica (opzione consigliata)

Utilizza lo strumento di migrazione automatica per passare da Container Registry ai repository gcr.io su Artifact Registry o ai repository Artifact Registry standard oppure per copiare le immagini da Container Registry ad Artifact Registry.

Questo strumento supporta solo la migrazione e la copia nella stessa multiregione.

Segui le istruzioni riportate in Eseguire la migrazione automatica ad Artifact Registry per copiare le immagini da Container Registry ad Artifact Registry.

Copiare le immagini con gcrane

Per copiare le immagini in Artifact Registry, puoi anche utilizzare lo strumento gcrane.

gcrane consente di copiare le immagini tra più regioni, ma presenta i seguenti inconvenienti:

  • gcrane è più lento degli strumenti automatici.
  • gcrane è limitato dalla quota di Container Registry.
  • gcrane può non riuscire se le immagini hanno più di 10.000 versioni o tag.
  • gcrane può non riuscire se le immagini non sono configurate correttamente o se mancano dati.

Requisiti

Verifica i seguenti requisiti:

  1. Hai abilitato Artifact Registry nei progetti Google Cloud di origine e di destinazione.

  2. Hai creato un repository Docker in Artifact Registry per le immagini che stai copiando.

  3. Disponi delle autorizzazioni richieste:

  4. Per utilizzare l'opzione di copia rapida, verifica i seguenti requisiti:

    • Devi utilizzare gcrane versione 0.10.0 o successive. Le istruzioni di configurazione di gcrane riportate in questa documentazione includono i passaggi per scaricare la versione più recente.

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

      gcrane version
      
    • L'agente di servizio Artifact Registry del progetto di destinazione deve disporre del ruolo Visualizzatore oggetti Storage (roles/storage.objectViewer) o di un ruolo con autorizzazioni equivalenti nel progetto di origine. Esegui il seguente comando per concedere il ruolo Visualizzatore oggetti Storage all'agente di servizio:

      gcloud projects add-iam-policy-binding SOURCE_PROJECT_ID \
          --member='serviceAccount:service-DEST_PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com' \
          --role='roles/storage.objectViewer'
      

      Sostituisci SOURCE_PROJECT_ID con l'ID (ad es. "my-project") del Google Cloud progetto con i tuoi host Container Registry.

      Sostituisci DEST_PROJECT_NUMBER con il numero (ad es. 12345) del Google Cloud progetto con il tuo repository Artifact Registry.

Opzioni e costi dell'ambiente

Puoi eseguire gcrane da diversi 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.
    • Trasferimento dei dati di rete per le immagini che copi, a meno che tu non stia utilizzando l'opzione di copia rapida. Per ridurre al minimo i costi:
    • Utilizza un'istanza VM nella stessa posizione del bucket di archiviazione del Registro contenitori.
    • Per ridurre al minimo i costi e massimizzare la velocità di copia, utilizza un repository Artifact Registry nella stessa regione multipla di Container Registry. Il trasferimento di dati all'interno della stessa regione multipla non comporta costi ed è molto più veloce della copia tra località.
  • Cloud Shell: un'opzione per copiare piccoli set di circa 40 GB o meno. Poiché 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: trasferimento di dati di rete per le immagini che copi, a meno che non utilizzi l'opzione di copia rapida.

    • 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
    
    • Per ridurre al minimo i costi e massimizzare la velocità di copia, utilizza un repository Artifact Registry nella stessa regione multipla di Container Registry. Il trasferimento di dati all'interno della stessa regione multipla non comporta costi ed è molto più veloce della copia tra località.
  • Computer locale: se non puoi utilizzare le altre opzioni, puoi eseguire gcrane da un computer locale.

    Costi: trasferimento di dati di rete per le immagini che copi, a meno che non utilizzi l'opzione di copia rapida

    Per ridurre al minimo i costi e massimizzare la velocità di copia, utilizza un repository Artifact Registry nella stessa regione multipla di Container Registry. Il trasferimento di dati all'interno della stessa regione multipla non comporta costi ed è molto più veloce della copia tra località.

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 posizione del registry 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 inviare le 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 interrotta.

  3. Connettiti all'istanza VM tramite SSH.

  4. 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
    
  5. 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/
    
  6. Esegui il comando gcrane --help per verificare l'installazione.

Ora puoi 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 dove sono installati Container Registry e Artifact Registry

    gcloud config set project PROJECT
    
  3. 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
    
  4. 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/
    
  5. Esegui il comando gcrane --help per verificare l'installazione.

Ora puoi copiare le immagini. Per continuare:

Configurazione di un computer 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 i seguenti 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 puoi copiare le immagini. Per continuare:

Identificazione delle immagini da copiare

Dopo aver installato gcrane, puoi elencare le immagini esistenti in Container Registry per trovare quelle che vuoi copiare.

Per elencare le immagini esistenti, esegui il comando:

gcrane ls LOCATION.gcr.io/PROJECT

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

gcrane ls LOCATION.gcr.io/PROJECT/IMAGE

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

gcrane ls -r LOCATION.gcr.io/PROJECT/PATH

Per ciascun comando:

  • Sostituisci LOCATION con la regione multipla del registry: asia, eu o us.
  • Sostituisci PROJECT con l'ID progetto.

Consulta la sezione Copiare le immagini per conoscere i comandi per copiare le immagini.

Copia di immagini

Puoi copiare singole immagini da Container Registry, tutte le immagini in un percorso specificato in una posizione o tutte le immagini archiviate in una posizione.

Copiare una singola immagine

Per copiare una singola immagine taggata, esegui il comando:

gcrane cp GCR-LOCATION.gcr.io/PROJECT/IMAGE \
AR-LOCATION.pkg.dev/PROJECT/REPOSITORY/IMAGE

Dove

  • GCR-LOCATION è la regione multipla dell'host di Container Registry: asia, eu o us.
  • AR-LOCATION è la regione o la località a più regioni del repository.
  • PROJECT è l'ID progetto.
  • REPOSITORY è il nome del repository Artifact Registry.
  • GCR-IMAGE è l'immagine che vuoi copiare da Container Registry.
  • AR-IMAGE è il nome dell'immagine in Artifact Registry.

Ad esempio, considera le seguenti immagini di origine e di destinazione:

  • Immagine Container Registry: eu.gcr.io/my-project/my-image:tag1
  • Immagine di Artifact Registry: europe-docker.pkg.dev/my-project/my-repo/my-image:tag1

Esegui il seguente comando per copiare l'immagine:

gcrane cp eu.gcr.io/my-project/my-image:tag1 \
europe-docker.pkg.dev/my-project/my-repo/my-image:tag1

Copia di tutte le immagini in un percorso

Per copiare le immagini in modo ricorsivo in un percorso specifico in Container Registry, esegui il comando:

gcrane cp -r GCR-LOCATION.gcr.io/PROJECT/GCR-PATH \
AR-LOCATION.pkg.dev/PROJECT/REPOSITORY/AR-PATH

Dove

  • GCR-LOCATION è la regione multipla dell'host di Container Registry: asia, eu o us.
  • AR-LOCATION è la regione o la località a più regioni del repository.
  • PROJECT è l'ID progetto.
  • REPOSITORY è il nome del repository Artifact Registry.
  • GCR-PATH è il percorso dei file che vuoi copiare.
  • AR-PATH è il percorso delle immagini nel repository Artifact Registry.

Ad esempio, considera i seguenti percorsi di origine e destinazione:

  • Percorso di Container Registry: eu.gcr.io/my-project/test-images/testing
  • Percorso Artifact Registry: europe-docker.pkg.dev/my-project/my-repo/test-images/testing

Il seguente comando copia in modo ricorsivo tutte le immagini in test-images/testing nel repository my-repo:

gcrane cp -r eu.gcr.io/my-project/test-images/testing \
europe-docker.pkg.dev/my-project/my-repo/test-images/testing

Copia di tutte le immagini da una posizione di Container Registry

Per copiare tutte le immagini da un Container Registry multiregione, esegui il comando:

gcrane cp -r GCR-LOCATION.gcr.io/PROJECT \
AR-LOCATION.pkg.dev/PROJECT/REPOSITORY

Dove

  • GCR-LOCATION è la regione multipla dell'host di Container Registry: asia, eu o us.
  • AR-LOCATION è la regione o la località a più regioni del repository.
  • PROJECT è l'ID progetto.
  • REPOSITORY è il nome del repository Artifact Registry.

Se vuoi copiare le immagini per più posizioni di Container Registry nel tuo progetto, esegui il comando una volta per ogni host.

Ad esempio, considera il seguente registry di origine e il repository Artifact Registry di destinazione. In questo esempio, Container Registry e Artifact Registry si trovano in progetti diversi.

  • Host Container Registry: eu.gcr.io/my-project
  • Immagine di Artifact Registry: europe-docker.pkg.dev/new-project/my-repo

Il seguente comando copia tutte le immagini dalla regione multipla eu nel progetto my-project al repository my-repo nel progetto new-project.

gcrane cp -r eu.gcr.io/my-project \
europe-docker.pkg.dev/new-project/my-repo

Copiare le immagini con Docker

A differenza dei metodi di copia gcrane e gcloud, questo approccio prevede una procedura in due passaggi.

  1. Estrai un'immagine da Container Registry
  2. Esegui il push dell'immagine nel repository Artifact Registry.

Requisiti

Verifica i seguenti requisiti:

  1. Hai creato un repository Docker in Artifact Registry per le immagini che stai copiando.

  2. Disponi delle autorizzazioni richieste:

  3. Hai configurato Docker per eseguire l'autenticazione sia in Container Registry sia in Artifact Registry.

Costi

Quando importi un'immagine, ti viene addebitato il trasferimento di dati di rete. I prezzi specifici dipendono dalla destinazione del comando pull. Ad esempio, se esamini un'immagine da una sessione Cloud Shell, i prezzi si riferiscono al trasferimento di dati di rete all'interno di Google Cloud. Se importi un'immagine in una macchina esterna Google Cloud, consulta i prezzi per il trasferimento di dati di rete generale.

I comandi Docker che utilizzi per taggare, eseguire il push e il pull delle immagini in Artifact Registry sono simili a quelli che utilizzi in Container Registry. Esistono due differenze principali:

  • Il nome host per i repository Docker di Artifact Registry include un prefisso della località, seguito da -docker.pkg.dev. Alcuni esempi sono australia-southeast1-docker.pkg.dev, europe-north1-docker.pkg.dev e europe-docker.pkg.dev.
  • Poiché Artifact Registry supporta più repository Docker in un singolo progetto, devi specificare il nome del repository nei comandi.

Per copiare un'immagine in Artifact Registry con Docker, esegui il pull dell'immagine da Container Registry ed esegui il push nel tuo repository Artifact Registry.

Ad esempio, considera un'immagine di Container Registry nella regione con più aree geografiche eu che vuoi copiare in un repository Artifact Registry nella regione europe.

  • Immagine Container Registry: eu.gcr.io/my-project/my-image:tag1
  • Immagine di Artifact Registry: europe-docker.pkg.dev/my-project/my-repo/my-image:tag1

Il seguente comando esegue il pull dell'immagine da Container Registry.

docker pull eu.gcr.io/my-project/my-image:tag1

Il seguente comando esegue il push dell'immagine nel repository Artifact Registry chiamato my-repo.

docker push europe-north1-docker.pkg.dev/my-project/my-repo/my-image

Puoi anche eseguire il push delle immagini in un repository Artifact Registry configurato in un altro progetto. Questo esempio spinge la stessa immagine di origine nel repository my-repo del progetto new-project.

docker push europe-north1-docker.pkg.dev/new-project/my-repo/my-image

Per informazioni dettagliate su come eseguire il push e il pull delle immagini in Artifact Registry, consulta Eseguire il push e il pull delle immagini.

Copia delle immagini con gcloud

Utilizza il comando gcloud container images add-tag per copiare un'immagine da Container Registry al tuo repository Artifact Registry.

Requisiti

Verifica i seguenti requisiti:

  1. Hai creato un repository Docker in Artifact Registry per le immagini che stai copiando.

  2. Disponi delle autorizzazioni richieste:

Costi

Se Container Registry si trova in una posizione diversa dal repository Artifact Registry, per le immagini che copi vengono applicati costi per il trasferimento di dati di rete. Se entrambi i servizi si trovano nella stessa località, il trasferimento di dati sulla rete è gratuito.

Esegui il comando seguente per copiare un'immagine da Container Registry ad Artifact Registry:

gcloud container images add-tag GCR-IMAGE AR-IMAGE

Dove

  • GCR-IMAGE è il percorso completo dell'immagine di Container Registry.
  • AR-IMAGE è il percorso completo dell'immagine nel repository Artifact Registry.

Ad esempio, considera le seguenti immagini di origine e di destinazione:

  • Immagine Container Registry: eu.gcr.io/my-project/my-image:tag1
  • Immagine di Artifact Registry: europe-docker.pkg.dev/my-project/my-repo/my-image:tag1

Questo comando copia l'immagine da Container Registry nella regione multipla eu al repository my-repo nella regione multipla europe.

gcloud container images add-tag eu.gcr.io/my-project/my-image:tag1 \
europe-docker.pkg.dev/my-project/my-repo/my-image:tag1

Puoi anche copiare le immagini in un repository Artifact Registry configurato in un altro progetto. Questo esempio copia la stessa immagine di origine nel repository my-repo del progetto new-project.

gcloud container images add-tag eu.gcr.io/my-project/my-image:tag1 \
europe-docker.pkg.dev/new-project/my-repo/my-image:tag1

Passaggi successivi