Vous pouvez utiliser l'outil gcrane
pour copier des images entre des dépôts Docker dans
Artifact Registry.
Avant de commencer
Vérifiez les conditions suivantes :
Vous avez créé le dépôt Docker cible dans Artifact Registry pour les images que vous copiez.
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 :
- 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.
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.
Arrêtez l'instance de VM. Consultez la section Arrêter une instance.
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.
Redémarrez l'instance de VM. Consultez la section Démarrer une instance arrêtée.
Se connecter à la VM à l'aide de SSH.
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
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/
Exécutez la commande
gcrane --help
pour vérifier l'installation.
Vous êtes maintenant prêt à copier des images. Pour continuer :
Configurer Cloud Shell
Ouvrez une fenêtre Cloud Shell.
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
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
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/
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
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
Exécutez les commandes suivantes pour rendre la commande
gcrane
exécutable. Les commandes supposent que le fichier téléchargé s'appellego-containerregistry.tar.gz
.tar -zxvf go-containerregistry.tar.gz chmod +x gcrane sudo mv gcrane /usr/local/bin/
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