Copier des images entre des dépôts

Vous pouvez utiliser l'outil gcrane pour copier des images entre des dépôts Docker dans Artifact Registry.

Vous pouvez également utiliser cet outil pour copier des images de Container Registry vers Artifact Registry.

Avant de commencer

Vérifiez les conditions suivantes :

  1. Vous avez créé le dépôt Docker cible dans Artifact Registry pour les images que vous copiez.

  2. Vous disposez des autorisations requises :

    • Lecteur Artifact Registry (roles/storage.objectViewer) ou un rôle avec des autorisations équivalentes pour le dépôt à partir duquel vous copiez.

    • Rédacteur Artifact Registry (roles/artifactregistry.writer) ou un rôle avec des autorisations équivalentes pour le dépôt cible.

Présentation

L'outil gcrane simplifie la copie entre les dépôts et est compatible avec les éléments suivants :

  • Vous pouvez copier des ensembles d'images à l'aide d'une seule commande, y compris toutes les images d'un chemin spécifié ou toutes les images stockées sur un hôte multirégional dans votre projet.
  • Vous pouvez ignorer les calques d'image déjà importés.

Supprimer les images inutilisées

La suppression d'images inutilisées avant d'effectuer une opération de copie peut vous aider à réduire les coûts de stockage.

Plusieurs outils sont disponibles pour identifier et supprimer automatiquement les images dont vous n'avez plus besoin. Par exemple, l'outil gcr-cleaner vous aide à rechercher et à supprimer les anciennes images en fonction de différents critères. L'outil gcr-cleaner n'est pas un produit Google officiel.

Pour en savoir plus sur la configuration et l'utilisation de cet outil, consultez les gcr-cleaner dans la documentation Google Cloud.

Configurer gcrane

Vous pouvez exécuter gcrane à partir des environnements suivants :

  • Instance Compute Engine : utilisez cette option si vous souhaitez copier un plus grand nombre de conteneurs.

    Frais : durée de disponibilité de l'instance pour la VM Compute Engine. Si l'instance de VM se trouve dans un emplacement différent du dépôt source, des frais de sortie réseau peuvent s'appliquer aux images que vous copiez.

  • Cloud Shell : option permettant de copier de petits ensembles d'environ 40 Go ou moins. Étant donné que l'outil gcrane ne permet pas d'importer des calques d'image qui sont déjà importées, cette limite s'applique aux nouvelles données que vous copiez.

    La copie de dépôts plus volumineux peut entraîner la déconnexion de Cloud Shell après la fin du délai d'inactivité de la requête, qui est de 10 minutes.

    Coûts : si l'instance Cloud Shell se trouve dans un emplacement différent du dépôt source, des frais de sortie réseau peuvent s'appliquer aux images que vous copiez. Vous ne pouvez pas choisir l'emplacement d'une session Cloud Shell. Pour vérifier l'emplacement de la session en cours, exécutez la commande suivante:

    curl metadata/computeMetadata/v1/instance/zone
    

Nous vous recommandons d'utiliser la dernière version de l'outil gcrane de toutes les fonctionnalités et améliorations disponibles. Les instructions de configuration fournies dans le les sections suivantes expliquent comment télécharger la dernière version.

Pour vérifier la version d'une installation gcrane existante, exécutez la commande suivante:

gcrane version

Configurer Compute Engine

Pour copier des images avec gcrane depuis une instance de VM Compute Engine, procédez comme suit :

  1. Créez une instance de VM. Pour réduire les coûts, créez l'instance au même emplacement que le registre à partir duquel vous effectuez la copie.
  2. Par défaut, l'instance de VM est associée au compte de service par défaut et est autorisée à extraire des images. Vous devez modifier le niveau d'accès pour que l'instance de VM puisse envoyer des images.

    1. Arrêtez l'instance de VM. Consultez la section Arrêter une instance.

    2. Modifiez le niveau d'accès à l'aide de la commande suivante:

      gcloud compute instances set-service-account INSTANCE --scopes=storage-rw
      

      Remplacez INSTANCE par le nom de l'instance de VM.

    3. Redémarrez l'instance de VM. Consultez la section Démarrer une instance arrêtée.

  3. Se connecter à la VM à l'aide de SSH.

  4. Exécutez la commande suivante pour télécharger 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. Exécutez les commandes suivantes pour rendre la commande gcrane exécutable.

    tar -zxvf go-containerregistry.tar.gz
    chmod +x gcrane
    sudo mv gcrane /usr/local/bin/
    
  6. Exécutez la commande gcrane --help pour vérifier l'installation.

Vous êtes maintenant prêt à copier des images. Pour continuer :

Configurer Cloud Shell

  1. Ouvrez une fenêtre Cloud Shell.

    Ouvrir Cloud Shell

  2. Définissez le projet par défaut. Remplacez PROJECT par l'ID du projet dans lequel Container Registry et Artifact Registry sont installés.

    gcloud config set project PROJECT
    
  3. Exécutez la commande suivante pour télécharger l'outil 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. Exécutez les commandes suivantes pour rendre la commande gcrane exécutable.

    tar -zxvf go-containerregistry.tar.gz
    chmod +x gcrane
    sudo mv gcrane /usr/local/bin/
    
  5. Exécutez la commande gcrane --help pour vérifier l'installation.

Vous êtes maintenant prêt à copier des images. Pour continuer :

Configurer une machine locale

  1. Téléchargez gcrane à partir du dépôt GitHub. Par exemple, la commande suivante télécharge la distribution Linux x86-64 depuis la ligne de commande.

    curl -L \
    https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \
    -o go-containerregistry.tar.gz
    
  2. Exécutez les commandes suivantes pour rendre la commande gcrane exécutable. Les commandes supposent que le fichier téléchargé s'appelle go-containerregistry.tar.gz.

    tar -zxvf go-containerregistry.tar.gz
    chmod +x gcrane
    sudo mv gcrane /usr/local/bin/
    
  3. Exécutez la commande gcrane --help pour vérifier l'installation.

Vous êtes maintenant prêt à copier des images. Pour continuer :

Identifier les images à copier

Après avoir installé l'outil gcrane, vous pouvez lister les images existantes dans le dépôt source pour trouver ceux que vous voulez copier.

Pour lister les images existantes, exécutez la commande suivante :

gcrane ls LOCATION-docker.pkg.dev/PROJECT/REPOSITORY

Pour répertorier les tags d'une image, exécutez la commande suivante:

gcrane ls LOCATION-docker.pkg.dev/PROJECT/IMAGE

Pour répertorier les images de manière récursive sous un chemin spécifique, exécutez la commande suivante:

gcrane ls -r LOCATION-docker.pkg.dev/PROJECT/PATH

Pour chacune des commandes:

  • Remplacez LOCATION par l'emplacement du dépôt.
  • Remplacez PROJECT par l'ID du projet.
  • Remplacez PATH par le chemin d'accès à copier.

Consultez la section Copier des images pour connaître les commandes permettant de copier vos images.

Copier des images

Vous pouvez copier des images individuelles ou des ensembles d'images à l'aide de la commande gcrane cp.

Pour copier une seule image, exécutez la commande suivante :

gcrane cp LOCATION1-docker.pkg.dev/PROJECT1/REPOSITORY1/IMAGE1 \
LOCATION2-docker.pkg.dev/PROJECT2/REPOSITORY2/IMAGE2

Pour copier des images de manière récursive sous un chemin spécifique d'un dépôt, exécutez la commande suivante:

gcrane cp -r LOCATION1-docker.pkg.dev/PROJECT1/REPOSITORY1/IMAGE1/PATH1 \
LOCATION2-docker.pkg.dev/PROJECT2/REPOSITORY2/IMAGE2/PATH2

Pour copier toutes les images d'un dépôt, exécutez la commande suivante:

gcrane cp -r LOCATION1-docker.pkg.dev/PROJECT1/REPOSITORY1 \
LOCATION2-docker.pkg.dev/PROJECT2/REPOSITORY2

Remplacez les valeurs suivantes :

  • LOCATION1 correspond à l'emplacement du dépôt source.
  • LOCATION2 est l'emplacement du dépôt cible.
  • PROJECT1 est l'ID du projet Google Cloud associé au dépôt source.
  • PROJECT2 correspond à l'ID du projet Google Cloud associé au dépôt cible.
  • REPOSITORY1 est le nom du dépôt source.
  • REPOSITORY2 est le nom du dépôt cible.
  • IMAGE1 correspond à l'image que vous souhaitez copier.
  • IMAGE2 est le nom de l'image dans le dépôt cible.

Examples

La commande suivante copie my-image:tag1 du dépôt repo1 vers le dépôt repo2 dans le même projet et la même région.

gcrane cp us-west1-docker.pkg.dev/my-project/repo1/my-image:tag1 \
us-west1-docker.pkg.dev/my-project/repo2/my-image:tag1

La commande suivante copie récursivement toutes les images sous test-images/testing du dépôt repo1 sur le même chemin d'accès sous le dépôt 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

La commande suivante copie toutes les images du dépôt my-repo du projet dev-project vers le dépôt my-repo d'un autre projet appelé prod-project.

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