Artifact Registry est le service recommandé pour gérer les images de conteneurs. Container Registry demeure compatible, mais ne recevra que les correctifs de sécurité critiques. En savoir plus sur la transition vers Artifact Registry.

Transférer et extraire des images

Le transfert (importation) et l'extraction (de téléchargement) d'images sont deux des tâches les plus courantes de Container Registry. Ce document porte sur la transmission et l'extraction d'images avec Docker.

Si vous utilisez Cloud Build, consultez la documentation Cloud Build pour savoir comment créer et transférer des conteneurs vers Container Registry.

Pour découvrir comment répertorier des images, leur ajouter des tags et les supprimer, consultez la page Gérer les images.

Avant de commencer

Vous devez disposer des éléments suivants :

  1. Vous avez activé Container Registry dans votre projet.

  2. Vous avez installé et configuré Docker.

Ajouter un registre

Vous pouvez ajouter les registres Container Registry suivants à un projet:

Hostname Emplacement du stockage
gcr.io Stocke des images dans des centres de données aux États-Unis
asia.gcr.io Stocke des images dans des centres de données en Asie
eu.gcr.io Stocke des images dans des centres de données situés dans les États membres de l'Union européenne
us.gcr.io Stocke des images dans des centres de données aux États-Unis

La première transfert d'image vers un nom d'hôte déclenche la création du registre dans un projet et le bucket de stockage Cloud Storage correspondant. Cette première étape nécessite des autorisations à l'échelle du projet pour créer des buckets de stockage.

Une fois qu'un hôte de registre existe dans votre projet, vous pouvez configurer les autorisations sur le bucket de stockage pour contrôler l'accès aux images du registre.

Pour ajouter un registre et configurer les autorisations, procédez comme suit:

  1. Vérifiez que vous disposez des autorisations requises. Vous devez disposer du rôle Administrateur de l'espace de stockage (roles/storage.admin), ou d'un rôle personnalisé ou d'un rôle prédéfini avec les mêmes autorisations.

    Pour savoir comment accorder le rôle "Administrateur de l'espace de stockage" au niveau du projet, consultez la documentation Cloud Storage.

  2. Transférez une image initiale sur l'hôte. Par exemple, vous pouvez utiliser les commandes suivantes:

    • Extraire l'image busybox de Docker Hub
    • Ajoutez le chemin d'accès à l'image avec Container Registry, y compris l'hôte du registre gcr.io et l'ID de projet.my-project
    • Transfère l'image vers le registre.
    docker pull busybox
    docker tag busybox gcr.io/my-project/busybox
    docker push gcr.io/my-project/busybox
    

Container Registry ajoute le registre à votre projet, crée un bucket de stockage pour le registre et stocke l'image.

Vous pouvez désormais configurer le contrôle des accès sur le bucket de stockage de registre pour accorder l'accès au registre à d'autres utilisateurs.

Transférer une image vers un registre

Pour transférer une image locale vers Container Registry à l'aide de Docker ou d'un autre outil tiers, vous devez d'abord lui ajouter un tag correspondant au nom du registre, puis envoyer l'image.

Les facteurs suivants peuvent avoir un impact sur l'importation d'images de grande taille:

Heure d'importation
Toute requête envoyée à Container Registry dispose d'un délai d'inactivité de deux heures. Si vous vous authentifiez pour Container Registry à l'aide d'un jeton d'accès, ce dernier expire au bout de 60 minutes. Si vous pensez que votre délai d'importation dépassera 60 minutes, utilisez une autre méthode d'authentification.
Taille d'image
Container Registry utilise Cloud Storage pour chaque espace de stockage sous-jacent de registre. Les quotas et limites Cloud Storage s'appliquent à chaque registre, y compris la taille maximale de 5 To pour un objet dans l'espace de stockage.
Container Registry n'est pas compatible avec les importations fragmentées dans Docker. Certains outils acceptent l'importation d'images volumineuses avec une importation fragmentée ou une importation monolithique unique. Vous devez utiliser des importations monolithiques pour transférer des images vers Container Registry.

Autorisations requises

Pour transférer une image, vous devez disposer de l'un des rôles Cloud Storage suivants, ou d'un rôle doté des mêmes autorisations:

Transférer la première image vers un registre de votre projet

Rôle: administrateur de l'espace de stockage (roles/storage.admin) au niveau du projet Google Cloud. Le rôle prédéfini "Propriétaire" comprend ces autorisations.

La première fois que vous transférez une image vers un hôte du registre de votre projet (tel que gcr.io), Container Registry crée un bucket de stockage pour le registre. Le rôle d'administrateur de l'espace de stockage dispose des autorisations nécessaires pour créer le bucket de stockage.

Transférer des images vers un registre existant dans votre projet

Rôle: Rédacteur des anciens buckets de l'espace de stockage (roles/storage.objectAdmin) sur le bucket de stockage du registre.

Ce rôle dispose des autorisations nécessaires pour transférer et extraire des images pour les hôtes existants du registre dans votre projet. Par exemple, si votre projet ne contient que le registre gcr.io, un utilisateur disposant du rôle Rédacteur des anciens buckets de l'espace de stockage peut envoyer des images à gcr.io, mais pas les envoyer à asia.gcr.io.

Pour savoir comment accorder des autorisations à un registre, consultez la section Configurer le contrôle des accès.

Ajouter un tag de nom de registre à l'image locale

Pour ajouter un tag à une image:

  1. Vérifiez que vous avez configuré l'authentification dans Container Registry.
  2. Déterminez le nom de registre :

    1. Choisissez un nom d'hôte, qui spécifie l'emplacement où les images sont stockées.

      • gcr.io héberge les images dans des centres de données aux États-Unis, mais cet emplacement peut être amené à changer par la suite.
      • us.gcr.io héberge des images dans des centres de données aux États-Unis, dans un bucket de stockage distinct des images hébergées par gcr.io.
      • eu.gcr.io héberge les images dans l'Union européenne.
      • asia.gcr.io héberge les images dans des centres de données en Asie.

      Ces emplacements multirégionaux hébergent les buckets de stockage Cloud Storage. Lorsque vous transférez une image vers un registre avec un nouveau nom d'hôte, Container Registry crée un bucket de stockage dans l'emplacement multirégional spécifié. Ce bucket forme le stockage sous-jacent du registre. Dans un projet, tous les registres portant le même nom d'hôte partagent un bucket de stockage.

      Dans la console, le nom d'hôte des images apparaîtra sous Emplacement.

    2. Choisissez un nom d'image. Celui-ci peut être différent du nom de l'image sur votre ordinateur local.

    3. Combinez le nom d'hôte, l'ID de votre projet Google Cloud Console et le nom de l'image:

      HOSTNAME/PROJECT-ID/IMAGE
      

      Si l'ID du projet contient le signe deux-points (:), consultez la section Projets à l'échelle du domaine.

  3. Ajoutez à l'image locale le tag correspondant à son nom de registre, à l'aide de la commande suivante :

    docker tag SOURCE_IMAGE HOSTNAME/PROJECT-ID/IMAGE
    

    SOURCE_IMAGE est le nom ou l'ID de l'image locale.

    Cette commande attribue à l'image son nom de registre et lui ajoute le tag latest. Si vous souhaitez appliquer un tag différent, exécutez la commande suivante :

    docker tag SOURCE_IMAGE HOSTNAME/PROJECT-ID/IMAGE:TAG
    

Transférer l'image avec son tag vers Container Registry

  1. Vérifiez que vous avez configuré l'authentification dans Container Registry.

  2. Transférez l'image taguée dans Container Registry à l'aide de la commande suivante:

    docker push HOSTNAME/PROJECT-ID/IMAGE
    

    Cette commande transfère l'image qui possède le tag latest. Si vous souhaitez transférer une image avec un autre tag, exécutez la commande suivante :

    docker push HOSTNAME/PROJECT-ID/IMAGE:TAG
    

    Lorsque vous transférez une image vers un registre qui n'existe pas encore dans votre projet, Container Registry crée un bucket de stockage.

Pour afficher l'image que vous avez transférée:

  • Accédez à Cloud Console pour afficher le registre et l'image.

  • Exécutez gcloud container images list-tags pour afficher le tag d'image et le condensé généré automatiquement:

    gcloud container images list-tags HOSTNAME/PROJECT-ID/IMAGE
    

    Le résultat de la commande ressemble à ce qui suit :

    DIGEST        TAGS        TIMESTAMP
    44bde...      test        2017-..-..
    

Extraire des images d'un registre

L'extraction d'une image nécessite le lecteur d'objets Storage pour le bucket de stockage de registre, ou un rôle doté des mêmes autorisations.

Pour extraire une image de Container Registry, exécutez la commande :

docker pull HOSTNAME/PROJECT-ID/IMAGE:TAG

ou

docker pull HOSTNAME/PROJECT-ID/IMAGE@IMAGE_DIGEST

où :

  • HOSTNAME est répertorié sous Emplacement dans la console. Il s'agit de l'une des quatre options suivantes : gcr.io, us.gcr.io, eu.gcr.io ou asia.gcr.io.
  • PROJECT-ID est l'ID de votre projet dans Google Cloud Console. Si l'ID du projet contient le signe deux-points (:), consultez la section Projets à l'échelle du domaine.
  • IMAGE est le nom de l'image dans Container Registry.
  • TAG est le tag appliqué à l'image. Dans un registre, les tags sont uniques à une image.
  • IMAGE_DIGEST est la valeur de hachage sha256 du contenu de l'image. Dans Cloud Console, cliquez sur l'image spécifique pour afficher ses métadonnées. Le condensé y apparaît sous l'intitulé Condensé de l'image.

Pour obtenir la commande d'extraction correspondant à une image spécifique, procédez comme suit :

  1. Cliquez sur le nom d'une image pour accéder au registre spécifique.

  2. Dans le registre, cochez la case à côté de la version de l'image que vous souhaitez extraire.

  3. Cliquez sur AFFICHER LA COMMANDE D'EXTRACTION en haut de la page.

  4. Copiez la commande d'extraction, qui identifie l'image à l'aide du tag ou du condensé.

Étapes suivantes