Copier des images entre les 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 l'outil pour copier des images depuis Container Registry vers Artifact Registry.

Avant de commencer

Vérifiez les exigences 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 effectuez la copie.

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

Présentation

L'outil gcrane simplifie la copie entre les dépôts grâce aux fonctionnalités suivantes:

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

Supprimer les images inutilisées

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

Un certain nombre d'outils sont disponibles pour identifier et automatiser la suppression des images dont vous n'avez plus besoin. Par exemple, l'outil gcr-cleaner vous aide à rechercher et à supprimer d'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 l'outil, consultez la documentation sur gcr-cleaner.

Configurer gcrane

Vous pouvez exécuter gcrane à partir de plusieurs environnements:

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

    Coûts:temps d'activité de l'instance pour la VM Compute Engine. Si l'instance de VM se trouve dans un emplacement différent de celui du dépôt source, des frais de sortie de 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 ignore l'importation des calques d'image déjà importés, 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 de celui du dépôt source, des frais de sortie de 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 pour bénéficier de toutes les fonctionnalités et améliorations disponibles. Les instructions de configuration des sections suivantes incluent la procédure à suivre pour 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 dispose des autorisations nécessaires pour extraire des images. Vous devez modifier le niveau d'accès pour que l'instance de VM puisse transférer 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. Connectez-vous à l'instance de 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 les 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 sur 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 les 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 à partir de 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 les images. Pour continuer:

Identifier les images à copier

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

Pour répertorier 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 d'accès 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 découvrir les commandes permettant de copier vos images.

Copier des images

Vous pouvez copier des images individuelles ou des ensembles d'images avec 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 d'accès spécifique dans 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 est 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 de 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 est 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 depuis le dépôt repo1 vers le dépôt repo2 au sein du même projet et de la même région.

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

La commande suivante copie de manière récursive toutes les images sous test-images/testing dans le dépôt repo1 dans le même chemin d'accès sous le dépôt repo2.

gcrane cp -r us-east1-docker.pkg.dev/my-project/repo1/test-images/testing \
us-east1-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-east1-docker.pkg.dev/dev-project/my-repo \
us-east1-docker.pkg.dev/prod-project/my-repo