Copier des images à partir de Container Registry

Dans le cadre de la transition de Container Registry vers Artifact Registry, vous pouvez copier les images Container Registry que vous souhaitez conserver Artifact Registry.

Présentation

Il existe plusieurs options pour copier des images de Container Registry vers Artifact Registry. Nous vous recommandons de copier les images avec l'outil de migration automatique, car il permet de copier plusieurs projets, peut copier vos images même si vous l'avez déjà redirection activée, et peut gérer un plus grand nombre d'images méthodes. Si vous ne disposez pas de plus de 10 000 images et que vous n'avez pas encore activé vous pouvez utiliser l'outil gcrane qui prend également en charge la copie d'ensembles d'images en une seule commande.

Pour réduire les coûts, procédez comme suit:

  1. Supprimez les anciennes images sans tag avant de copier les conteneurs dans Artifact Registry.

  2. Si vous copiez des images vers un dépôt Artifact Registry standard (pkg.dev) un dépôt de clés, puis désactiver l'analyse automatisée pour Artifact Registry avant de copier des images afin d'éviter les doublons les coûts de numérisation. Vous pouvez réactiver l'analyse automatisée après avoir copié images.

    Si vous copiez des images vers un dépôt gcr.io sur Artifact Registry vous n'avez pas besoin de désactiver l'analyse automatisée.

    Pour en savoir plus sur le contrôle des coûts liés à l'analyse des failles, voir Contrôlez vos coûts d'analyse des failles.

Supprimer les images sans tag de Container Registry

La suppression des images non taguées permet de réduire le coût de stockage dans Container Registry ainsi que le coût de copie des images de Container Registry vers Artifact Registry.

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.

Copier des images à l'aide de l'outil de migration automatique (recommandé)

Utilisez l'outil de migration automatique pour effectuer la transition de Container Registry vers Dépôts gcr.io sur Artifact Registry ou vers Artifact Registry standard ou de copier vos images de Container Registry vers Artifact Registry.

Cet outil n'accepte que la migration et la copie vers le même emplacement multirégional.

Suivez les instructions fournies dans l'article Migrez automatiquement vers Artifact Registry pour effectuer la copie vos images de Container Registry vers Artifact Registry.

Copier des images avec gcrane

Pour copier des images vers Artifact Registry, vous pouvez également utiliser la classe gcrane.

gcrane permet de copier des images entre plusieurs régions, mais présente les éléments suivants : inconvénients:

  • gcrane est plus lent que les outils automatisés.
  • gcrane est limité par le quota Container Registry.
  • gcrane peut échouer si des images comportent plus de 10 000 versions ou tags.
  • gcrane peut échouer si des images sont mal configurées ou si des données sont manquantes.

Conditions requises

Vérifiez les exigences suivantes:

  1. vous avez activé Artifact Registry dans la source et projets Google Cloud de destination.

  2. Vous avez créé un dépôt Docker dans Artifact Registry pour les images que vous copiez.

  3. Vous disposez des autorisations requises:

  4. Pour utiliser l'option de copie rapide, vérifiez les conditions suivantes:

    • Vous devez utiliser gcrane version 0.10.0 ou ultérieure. Les instructions de configuration de gcrane dans cette documentation incluent les étapes à suivre pour téléchargez la dernière version.

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

      gcrane version
      
    • L'agent de service Artifact Registry du projet de destination doit disposer Lecteur des objets Storage (roles/storage.objectViewer) ou un rôle avec des autorisations équivalentes dans le projet source. Exécutez la commande suivante pour attribuez le rôle "Lecteur des objets Storage" à l'agent de service:

      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'
      

      Remplacez SOURCE_PROJECT_ID par l'ID (par exemple, "my-project") du projet Google Cloud. avec vos hôtes Container Registry.

      Remplacez DEST_PROJECT_NUMBER par le numéro (par exemple, 12345) du projet Google Cloud contenant votre dépôt Artifact Registry.

Options et coûts liés à l'environnement

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:

    • Disponibilité de l'instance pour la VM Compute Engine.
    • Transfert de données réseau pour les images que vous copiez, sauf si vous utilisez l'option de copie rapide. Pour réduire les coûts:
    • Utiliser une instance de VM située au même emplacement que Container Registry bucket de stockage.
    • Pour réduire les coûts et optimiser la vitesse de copie, utilisez Artifact Registry situé dans le même emplacement multirégional que Container Registry. Transfert de données au sein d'une même zone multirégionale n'entraîne pas de frais et est beaucoup plus rapide par rapport à la copie entre les établissements.
  • Cloud Shell : option permettant de copier de petits ensembles d'environ 40 Go ou moins. Étant donné que gcrane ignore l'importation de calques d'image déjà importés, cette 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:transfert de données réseau pour les images que vous copiez, sauf à l'aide de l'option de copie rapide.

    • 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
    
    • Pour réduire les coûts et optimiser la vitesse de copie, utilisez Artifact Registry situé dans le même emplacement multirégional que Container Registry. Transfert de données au sein d'une même zone multirégionale n'entraîne pas de frais et est beaucoup plus rapide par rapport à la copie entre les établissements.
  • Ordinateur local : si vous ne pouvez pas utiliser les autres options, vous pouvez exécuter gcrane. depuis un ordinateur local.

    Coûts:transfert de données réseau pour les images que vous copiez, sauf à l'aide de l'option de copie rapide

    Pour réduire les coûts et optimiser la vitesse de copie, utilisez Artifact Registry situé dans le même emplacement multirégional que Container Registry. Transfert de données dans le même emplacement multirégional n'entraîne pas de frais et est beaucoup plus rapide que de copier entre les sites.

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é gcrane, vous pouvez lister les images existantes dans Container Registry pour trouver ceux que vous souhaitez copier.

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

gcrane ls LOCATION.gcr.io/PROJECT

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

gcrane ls LOCATION.gcr.io/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.gcr.io/PROJECT/PATH

Pour chacune des commandes:

  • Remplacez LOCATION par l'emplacement multirégional du registre: asia. eu ou us.
  • Remplacez PROJECT par l'ID du projet.

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 à partir de Container Registry, toutes les images situées sous un chemin d'accès spécifié à un emplacement ou toutes les images stockées dans un emplacement spécifique.

Copier une seule image

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

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

Où :

  • GCR-LOCATION est l'emplacement multirégional de l'hôte Container Registry: asia, eu ou us.
  • AR-LOCATION est la région ou l'emplacement multirégional du dépôt.
  • PROJECT est l'ID de projet.
  • REPOSITORY est le nom du dépôt Artifact Registry.
  • GCR-IMAGE est l'image à partir de laquelle vous souhaitez effectuer la copie. Container Registry.
  • AR-IMAGE est le nom de l'image dans Artifact Registry.

Prenons l'exemple des images source et de destination suivantes:

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

Exécutez la commande suivante pour copier l'image:

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

Copier toutes les images situées sous un chemin d'accès spécifique

Pour copier des images de manière récursive sous un chemin spécifique dans Container Registry, exécutez la commande :

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

Où :

  • GCR-LOCATION est l'emplacement multirégional de l'hôte Container Registry: asia, eu ou us.
  • AR-LOCATION est la région ou l'emplacement multirégional du dépôt.
  • PROJECT est l'ID de projet.
  • REPOSITORY est le nom du dépôt Artifact Registry.
  • GCR-PATH est le chemin d'accès aux fichiers que vous souhaitez copier.
  • AR-PATH est le chemin d'accès des images dans Artifact Registry un dépôt de clés.

Prenons l'exemple des chemins source et de destination suivants:

  • Chemin d'accès Container Registry: eu.gcr.io/my-project/test-images/testing
  • Chemin d'accès Artifact Registry: europe-docker.pkg.dev/my-project/my-repo/test-images/testing

La commande suivante copie récursivement toutes les images sous test-images/testing dans le dépôt my-repo:

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

Copier toutes les images d'un emplacement Container Registry

Pour copier toutes les images d'un emplacement Container Registry multirégional, exécutez la commande suivante:

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

Où :

  • GCR-LOCATION est l'emplacement multirégional de l'hôte Container Registry: asia, eu ou us.
  • AR-LOCATION est la région ou l'emplacement multirégional du dépôt.
  • PROJECT est l'ID de projet.
  • REPOSITORY est le nom du dépôt Artifact Registry.

Si vous souhaitez copier des images à partir de plusieurs emplacements Container Registry dans votre projet, exécutez la commande une fois pour chaque hôte.

Prenons l'exemple du registre source et du registre Artifact Registry cibles suivants : un dépôt de clés. Dans cet exemple, Container Registry et Artifact Registry sont dans différents projets.

  • Hôte Container Registry : eu.gcr.io/my-project
  • Image Artifact Registry : europe-docker.pkg.dev/new-project/my-repo

La commande suivante copie toutes les images de l'emplacement multirégional eu dans la classe projet my-project vers le dépôt my-repo du projet new-project.

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

Copier des images avec Docker

Contrairement aux méthodes de copie gcrane et gcloud, cette approche est un processus en deux étapes.

  1. Extraire une image de Container Registry
  2. Transférer l'image vers le dépôt Artifact Registry

Conditions requises

Vérifiez les exigences suivantes:

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

  2. Vous disposez des autorisations requises:

  3. Vous avez configuré Docker pour qu'il s'authentifie Container Registry et Artifact Registry :

Coûts

Lorsque vous extrayez une image, le transfert de données réseau vous est facturé. La tarification spécifique dépend de la destination de votre commande pull. Par exemple, si vous extrayez une image d'une session Cloud Shell, est destinée au transfert de données réseau dans Google Cloud. Si vous extrayez une image sur une machine extérieure à Google Cloud, tarifs du transfert de données réseau général

Les commandes Docker que vous utilisez pour ajouter des tags, transférer et extraire des images dans Artifact Registry sont semblables à celles que vous utilisez dans Container Registry. Il existe deux différences principales :

  • Le nom d'hôte des dépôts Docker Artifact Registry comprend un préfixe d'emplacement suivi de -docker.pkg.dev. Par exemple, il peut s'agir de australia-southeast1-docker.pkg.dev, europe-north1-docker.pkg.dev et europe-docker.pkg.dev.
  • Comme Artifact Registry accepte plusieurs dépôts Docker dans un même dépôt, projet, vous devez spécifier le nom du dépôt dans les commandes.

Pour copier une image dans Artifact Registry avec Docker, extrayez l'image de Container Registry, puis transférez-le vers votre dépôt Artifact Registry.

Prenons l'exemple d'une image Container Registry située dans l'emplacement multirégional eu. et que vous souhaitez les copier dans un dépôt Artifact Registry Région europe.

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

La commande suivante extrait l'image de Container Registry.

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

La commande suivante transfère l'image dans le dépôt Artifact Registry nommée my-repo.

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

Vous pouvez également transférer des images vers un dépôt Artifact Registry dans un autre projet. Cet exemple transfère la même image source vers le dépôt my-repo dans le projet new-project.

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

Pour en savoir plus sur le transfert et l'extraction d'images Pour Artifact Registry, consultez la section Transférer et extraire des images.

Copier des images avec gcloud

Utilisez la commande gcloud container images add-tag pour copier une image depuis Container Registry vers votre dépôt Artifact Registry.

Conditions requises

Vérifiez les exigences suivantes:

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

  2. Vous disposez des autorisations requises:

Coûts

Si Container Registry se trouve dans un emplacement différent de celui dépôt Artifact Registry, frais de transfert de données réseau pour les images que vous copiez. Si les deux services se trouvent au même endroit, le réseau le transfert de données est gratuit.

Exécutez la commande suivante pour copier une image de Container Registry vers Artifact Registry:

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

Où :

  • GCR-IMAGE est le chemin d'accès complet à l'image Container Registry.
  • AR-IMAGE est le chemin d'accès complet de l'image dans dépôt Artifact Registry.

Prenons l'exemple des images source et de destination suivantes:

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

Cette commande copie l'image à partir de Container Registry l'emplacement multirégional eu vers le dépôt my-repo dans l'emplacement multirégional 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

Vous pouvez également copier des images dans un dépôt Artifact Registry dans un autre projet. Cet exemple copie la même image source le dépôt my-repo dans le projet 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

Étape suivante