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.

Cet outil vous permet également de copier des images de Container Registry à 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 avec des autorisations équivalentes pour le dépôt cible.

Présentation

L'outil gcrane simplifie la copie et des dépôts compatibles avec:

  • Copier des ensembles d'images à l'aide d'une seule commande, y compris toutes les images situées sous un 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

En supprimant les images inutilisées avant d'effectuer une copie, vous pouvez : de réduire les coûts de stockage.

Un certain nombre d'outils sont disponibles pour identifier et automatiser la suppression dont vous n'avez plus besoin. Par exemple, gcr-cleaner vous permet de rechercher et de 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 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.

    Coûts:disponibilité de l'instance pour la VM Compute Engine. Si l'instance de VM se trouve dans un emplacement différent de dépôt source, des frais de sortie réseau peuvent s'appliquer des 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 à un autre emplacement que le dépôt source, des frais de sortie réseau peuvent s'appliquer les images que vous copiez. Vous ne pouvez pas choisir l'emplacement d'une session Cloud Shell session. 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 registre depuis lequel vous effectuez la copie.
  2. Par défaut, l'instance de VM est associée au default service account (compte de service par défaut) et dispose des autorisations nécessaires pour extraire des images. Vous devez modifier le niveau d'accès l'instance de VM peut 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. 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. 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 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 dans le dépôt source pour trouver ceux que vous voulez 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 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 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 est 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 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 à partir du dépôt repo1. dans 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 dans projet dev-project vers le dépôt my-repo dans 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