Interagir avec les images de Docker Hub

Vous pouvez utiliser des images de conteneurs provenant de Docker Hub pour exécuter des tâches dans Cloud Build. En outre, si votre compilation génère des images, vous pouvez les transférer vers Docker Hub. Cette page explique comment créer des fichiers de configuration de compilation pour transférer et extraire des images Docker Hub. Pour obtenir une présentation de tous les champs disponibles dans un fichier de configuration de compilation, consultez la section Présentation de la configuration des compilations.

Extraire des images publiques de Docker Hub

Vous pouvez extraire des images Docker officielles, des images certifiées Docker et des images personnalisées stockées dans Docker Hub à l'étape de compilation en spécifiant le nom de l'image dans le fichier name. Cloud Build extrait d'abord l'image spécifiée à partir de Docker Hub, puis utilise l'image pour exécuter l'étape de compilation.

Dans l'exemple ci-dessous, Cloud Build extrait l'image Docker pour maven afin d'exécuter la commande mvn spécifiée dans args :

YAML

steps:
- name: "maven"
  args: ["mvn", "--version"]

JSON

{
   "steps": [
      {
         "name": "maven",
         "args": [
            "mvn",
            "--version"
         ]
      }
   ]
}

Stocker des identifiants Docker dans Secret Manager

Pour extraire des images privées et transférer des images publiques et privées vers Docker Hub, Cloud Build doit s'authentifier auprès de Docker avec vos identifiants. Pour inclure des identifiants Docker dans vos compilations, vous devez d'abord stocker vos identifiants dans Secret Manager, puis autoriser Cloud Build à y accéder à partir de Secret Manager.

Pour stocker des identifiants Docker dans Secret Manager, procédez comme suit:

  1. Accédez à la page Secret Manager dans Cloud Console :

    Accéder à la page Secret Manager

  2. Sur la page Secret Manager, cliquez sur Créer un secret.

  3. Sur la page Créer un secret, sous Nom, saisissez docker-username.

  4. Dans le champ Valeur de secret, saisissez votre nom d'utilisateur Docker.

  5. Ne modifiez pas la section Régions.

  6. Cliquez sur le bouton Créer un secret.

Répétez les étapes ci-dessus pour stocker votre mot de passe Docker dans Secret Manager.

Pour accorder le rôle IAM Secret Manager Secret Access pour le secret au compte de service Cloud Build, procédez comme suit:

  1. Ouvrez la page Secret Manager dans Google Cloud Console :

    Accéder à la page Secret Manager

  2. Cochez la case correspondant au secret correspondant à votre nom d'utilisateur et à votre mot de passe Docker.

  3. S'il n'est pas déjà ouvert, cliquez sur Afficher le panneau d'informations pour l'ouvrir.

  4. Dans le panneau, sous Autorisations, cliquez sur Ajouter un compte principal.

  5. Dans la zone de texte Nouveaux comptes principaux, saisissez l'adresse e-mail de votre compte de service Cloud Build au format PROJECT_NUMBER@cloudbuild.gserviceaccount.com, où PROJECT_NUMBER est le numéro de projet de Projet dans lequel vous exécutez des builds. Vous trouverez le numéro de projet sur la page Paramètres du projet.

  6. Dans la liste déroulante Sélectionner un rôle, sélectionnez le rôle Accesseur de secrets du gestionnaire de secrets.

  7. Cliquez sur Enregistrer.

Extraire des images privées de Docker Hub

Pour extraire des images privées de Docker Hub, procédez comme suit :

  1. Assurez-vous d'avoir stocké vos identifiants Docker dans Secret Manager et autorisé Cloud Build à accéder au secret.

  2. Dans le fichier de configuration de compilation :

    • Après toute la compilation steps, ajoutez un champ availableSecrets spécifiant la version du secret et la variable env pour le nom d'utilisateur et le mot de passe de Docker.
    • À l'étape de compilation pour laquelle vous souhaitez spécifier le nom d'utilisateur et le mot de passe :
      • Ajoutez un champ entrypoint pointant vers bash pour utiliser l'outil bash à l'étape de compilation. Cette opération est nécessaire pour faire référence à la variable d'environnement relative au secret.
      • Ajoutez un champ secretEnv spécifiant la variable d'environnement pour le nom d'utilisateur et le mot de passe.
      • Dans le champ args, ajoutez une option -c comme premier argument. Toute chaîne que vous transmettez après -c est traitée comme une commande. Pour en savoir plus sur l'exécution de commandes bash avec -c, consultez la documentation bash.
      • Lorsque vous spécifiez le secret dans le champ args, spécifiez-le à l'aide de la variable d'environnement avec le préfixe $$.

    Le fichier de configuration de compilation suivant montre comment se connecter à Docker à l'aide du nom d'utilisateur et du mot de passe Docker stockés dans Secret Manager, et comment exécuter une image privée.

    YAML

     steps:
     - name: 'gcr.io/cloud-builders/docker'
       entrypoint: 'bash'
       args: ['-c', 'docker login --username=$$USERNAME --password=$$PASSWORD']
       secretEnv: ['USERNAME', 'PASSWORD']
     - name: "gcr.io/cloud-builders/docker"
       entrypoint: 'bash'
       args: ['-c', 'docker run $$USERNAME/REPOSITORY:TAG']
       secretEnv: ['USERNAME']
     availableSecrets:
       secretManager:
       - versionName: projects/PROJECT_ID/secrets/DOCKER_PASSWORD_SECRET_NAME/versions/DOCKER_PASSWORD_SECRET_VERSION
         env: 'PASSWORD'
       - versionName: projects/PROJECT_ID/secrets/DOCKER_USERNAME_SECRET_NAME/versions/DOCKER_USERNAME_SECRET_VERSION
         env: 'USERNAME'
    

    JSON

    {
      "steps": [
      {
        "name": "gcr.io/cloud-builders/docker",
        "entrypoint": "bash",
        "args": [
          "-c",
          "docker login --username=$$USERNAME --password=$$PASSWORD"
        ],
        "secretEnv": [
          "USERNAME",
          "PASSWORD"
        ]
      },
      {
        "name": "gcr.io/cloud-builders/docker",
        "entrypoint": "bash",
        "args": [
          "-c",
          "docker run $$USERNAME/REPOSITORY:TAG"
         ],
         "secretEnv": [
          "USERNAME"
        ]
      }
      ],
      "availableSecrets": {
        "secretManager": [{
          "versionName": "projects/PROJECT_ID/secrets/DOCKER_PASSWORD_SECRET_NAME/versions/DOCKER_PASSWORD_SECRET_VERSION",
          "env": "PASSWORD"
      }, {
        "versionName": "projects/PROJECT_ID/secrets/DOCKER_USERNAME_SECRET_NAME/versions/DOCKER_USERNAME_SECRET_VERSION",
        "env": "USERNAME"
         }]
      }
    }
    

    Remplacez les valeurs d'espace réservé dans les commandes ci-dessus par les éléments suivants :

    • PROJECT_ID: ID du projet Cloud dans lequel vous avez stocké vos secrets.
    • DOCKER_USERNAME_SECRET_NAME: nom secret correspondant à votre nom d'utilisateur Docker.
    • DOCKER_USERNAME_SECRET_VERSION: version secrète de votre nom d'utilisateur Docker.
    • DOCKER_PASSWORD_SECRET_NAME: nom secret correspondant à votre mot de passe Docker.
    • DOCKER_PASSWORD_SECRET_VERSION: version secrète de votre mot de passe Docker.
    • REPOSITORY: nom du dépôt Docker à partir duquel vous extrayez l'image.
    • TAG: nom du tag de votre image.
  3. Vous pouvez utiliser le fichier de configuration de compilation pour démarrer manuellement une compilation ou pour automatiser les compilations à l'aide de déclencheurs.

Transférer des images vers Docker Hub

Pour transférer des images publiques et privées vers Docker Hub, procédez comme suit :

  1. Assurez-vous d'avoir stocké vos identifiants Docker dans Secret Manager et autorisé Cloud Build à accéder au secret.

  2. Dans le fichier de configuration de compilation :

    • Après toute la compilation steps, ajoutez un champ availableSecrets spécifiant la version du secret et la variable env pour le nom d'utilisateur et le mot de passe de Docker.
    • À l'étape de compilation pour laquelle vous souhaitez spécifier le nom d'utilisateur et le mot de passe :
      • Ajoutez un champ entrypoint pointant vers bash pour utiliser l'outil bash à l'étape de compilation. Cette opération est nécessaire pour faire référence à la variable d'environnement relative au secret.
      • Ajoutez un champ secretEnv spécifiant la variable d'environnement pour le nom d'utilisateur et le mot de passe.
      • Dans le champ args, ajoutez une option -c comme premier argument. Toute chaîne que vous transmettez après -c est traitée comme une commande. Pour en savoir plus sur l'exécution de commandes bash avec -c, consultez la documentation bash.
      • Lorsque vous spécifiez le secret dans le champ args, spécifiez-le à l'aide de la variable d'environnement avec le préfixe $$.

    L'exemple de fichier de configuration de compilation suivant montre comment se connecter à Docker, créer une image avec du code source stocké localement, puis transférer l'image dans le dépôt Docker.

    YAML

     steps:
     - name: 'gcr.io/cloud-builders/docker'
       entrypoint: 'bash'
       args: ['-c', 'docker login --username=$$USERNAME --password=$$PASSWORD']
       secretEnv: ['USERNAME', 'PASSWORD']
     - name: 'gcr.io/cloud-builders/docker'
       entrypoint: 'bash'
       args: ['-c', 'docker build -t $$USERNAME/REPOSITORY:TAG .']
       secretEnv: ['USERNAME']
     - name: 'gcr.io/cloud-builders/docker'
       entrypoint: 'bash'
       args: ['-c', 'docker push $$USERNAME/REPOSITORY:TAG']
       secretEnv: ['USERNAME']
     availableSecrets:
       secretManager:
       - versionName: projects/PROJECT_ID/secrets/DOCKER_PASSWORD_SECRET_NAME/versions/DOCKER_PASSWORD_SECRET_VERSION
         env: 'PASSWORD'
       - versionName: projects/PROJECT_ID/secrets/DOCKER_USERNAME_SECRET_NAME/versions/DOCKER_USERNAME_SECRET_VERSION
         env: 'USERNAME'
    

    JSON

    {
      "steps": [
      {
        "name": "gcr.io/cloud-builders/docker",
        "entrypoint": "bash",
        "args": [
          "-c",
          "docker login --username=$$USERNAME --password=$$PASSWORD"
        ],
        "secretEnv": [
          "USERNAME",
          "PASSWORD"
        ]
      },
      {
        "name": "gcr.io/cloud-builders/docker",
        "entrypoint": "bash",
        "args": [
          "-c",
          "docker build -t $$USERNAME/REPOSITORY:TAG ."
         ],
         "secretEnv": [
          "USERNAME"
        ]
      },
      {
        "name": "gcr.io/cloud-builders/docker",
        "entrypoint": "bash",
        "args": [
          "-c",
          "docker push $$USERNAME/REPOSITORY:TAG"
         ],
         "secretEnv": [
          "USERNAME"
        ]
      }
      ],
      "availableSecrets": {
        "secretManager": [{
          "versionName": "projects/PROJECT_ID/secrets/DOCKER_PASSWORD_SECRET_NAME/versions/DOCKER_PASSWORD_SECRET_VERSION",
          "env": "PASSWORD"
      }, {
        "versionName": "projects/PROJECT_ID/secrets/DOCKER_USERNAME_SECRET_NAME/versions/DOCKER_USERNAME_SECRET_VERSION",
        "env": "USERNAME"
         }]
      }
    }
    

    Remplacez les valeurs d'espace réservé dans les commandes ci-dessus par les éléments suivants :

    • PROJECT_ID: ID du projet Cloud dans lequel vous avez stocké vos secrets.
    • DOCKER_USERNAME_SECRET_NAME: nom secret correspondant à votre nom d'utilisateur Docker.
    • DOCKER_USERNAME_SECRET_VERSION: version secrète de votre nom d'utilisateur Docker.
    • DOCKER_PASSWORD_SECRET_NAME: nom secret correspondant à votre mot de passe Docker.
    • DOCKER_PASSWORD_SECRET_VERSION: version secrète de votre mot de passe Docker.
    • REPOSITORY: nom du dépôt Docker vers lequel vous transférez l'image.
    • TAG: nom du tag de votre image.
  3. Vous pouvez utiliser le fichier de configuration de compilation pour démarrer manuellement une compilation ou pour automatiser les compilations à l'aide de déclencheurs.

Étape suivante