Créer des images de conteneurs

Cette page explique comment configurer Cloud Build pour générer et stocker des images Docker. Si vous débutez avec Cloud Build, commencez par lire les Guides de démarrage rapide et la Présentation de la configuration des compilations.

Cloud Build fournit des images prédéfinies auxquelles vous pouvez faire référence dans un fichier de configuration Cloud Build pour exécuter vos tâches. La compatibilité et la gestion de ces images est assurée par Google Cloud. Vous pouvez utiliser l'image Docker prédéfinie et compatible pour exécuter les commandes Docker et générer des images Docker.

Avant de commencer

Les instructions de cette page partent du principe que vous connaissez bien Docker. Notez en outre les points suivants :

  • Gardez à portée de main le code source de votre application ainsi que le fichier Dockerfile.
  • Si vous voulez vous servir des commandes gcloud de ce guide, installez l'outil de ligne de commande gcloud.
  • Si vous souhaitez exécuter les images, installez Docker.

Compiler avec un fichier de configuration de compilation

Pour générer votre image Docker à l'aide d'un fichier de configuration de compilation, procédez comme suit :

  1. Dans le répertoire contenant le code source de votre application, créez un fichier nommé cloudbuild.yaml ou cloudbuild.json.
  2. Dans le fichier de configuration de compilation :

    • Ajoutez un champ name et spécifiez l'image Docker prédéfinie. L'image prédéfinie est stockée dans le dépôt Container Registry à l'adresse gcr.io/cloud-builders/docker. Dans l'exemple de fichier de configuration ci-dessous, le champ name spécifie que Cloud Build utilise l'image Docker prédéfinie pour exécuter la tâche indiquée dans le champ args.
    • Dans le champ args, ajoutez les arguments requis pour générer l'image.

      YAML

      steps:
      - name: 'gcr.io/cloud-builders/docker'
        args: [ 'build', '-t', 'gcr.io/PROJECT_ID/IMAGE_NAME', '.' ]
      

      JSON

      {
       "steps": [
        {
            "name": "gcr.io/cloud-builders/docker",
            "args": [
              "build",
              "-t",
              "gcr.io/PROJECT_ID/IMAGE_NAME",
              "."
             ]
         }
         ]
       }
      

      Remplacez les valeurs d'espace réservé dans la configuration de compilation ci-dessus par ce qui suit :

      • PROJECT_ID : ID de votre projet Cloud.
      • IMAGE_NAME : nom de votre image de conteneur

      Si Dockerfile et votre code source se trouvent dans des répertoires différents, ajoutez -f et le chemin d'accès à Dockerfile à la liste des arguments du champ args:

      YAML

      steps:
      - name: 'gcr.io/cloud-builders/docker'
        args: [ 'build', '-t', 'gcr.io/PROJECT_ID/IMAGE_NAME', '-f', 'DOCKERFILE_PATH', '.' ]
      

      JSON

      {
       "steps": [
        {
            "name": "gcr.io/cloud-builders/docker",
            "args": [
              "build",
              "-t",
              "gcr.io/PROJECT_ID/IMAGE_NAME", '-f', 'DOCKERFILE_PATH', "."
             ]
         }
         ]
       }
      

      Remplacez les valeurs d'espace réservé dans la configuration de compilation ci-dessus par ce qui suit :

      • PROJECT_ID : ID de votre projet Cloud.
      • IMAGE_NAME : nom de votre image de conteneur
      • DOCKERFILE_PATH: chemin d'accès à Dockerfile.
  3. Lancez la compilation à l'aide du fichier de configuration de compilation :

    gcloud builds submit --config CONFIG_FILE_PATH SOURCE_DIRECTORY
    

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

    • CONFIG_FILE_PATH : chemin d'accès du fichier de configuration de compilation.
    • SOURCE_DIRECTORY : chemin d'accès ou URL du code source.

    Si vous ne spécifiez pas les éléments CONFIG_FILE_PATH et SOURCE_DIRECTORY dans la commande gcloud builds submit, Cloud Build considère que le fichier de configuration et le code source se trouvent dans le répertoire de travail actuel.

Compiler avec un fichier Dockerfile

Cloud Build vous permet de créer une image Docker à l'aide d'un simple fichier Dockerfile. Aucun fichier de configuration de compilation distinct n'est requis.

Pour générer une image à l'aide d'un Dockerfile, exécutez la commande suivante depuis le répertoire contenant votre code source et le fichier Dockerfile :

    gcloud builds submit --tag gcr.io/PROJECT_ID/IMAGE_NAME

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

  • PROJECT_ID : ID de votre projet Cloud.
  • IMAGE_NAME : nom de votre image de conteneur

Compiler avec les Buildpacks cloud natifs

Cloud Build vous permet de créer une image sans fichier Dockerfile ou fichier de configuration de compilation. Pour ce faire, utilisez les Buildpacks cloud natifs.

Pour compiler à l'aide des buildpacks, exécutez la commande suivante à partir du répertoire contenant votre code source :

    gcloud builds submit --pack builder=BUILDPACK_BUILDER, \
        env=ENVIRONMENT_VARIABLE, \
        image=IMAGE

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

  • BUILDPACK_BUILDER : le compilateur buildpacks à utiliser. Si vous ne spécifiez pas de compilateur, Cloud Build utilise gcr.io/buildpacks/builder par défaut.
  • ENVIRONMENT_VARIABLE : toutes les variables d'environnement de votre compilation.
  • IMAGE : URL de l'image dans Container Registry. Le nom de l'image doit se trouver dans les espaces de noms gcr.io/ ou pkg.dev.

Voici quelques exemples de commandes :

  • Exécuter une compilation à l'aide du fichier gcr.io/buildpacks/builder par défaut pour créer l'image gcr.io/gcb-docs-project/hello :

      gcloud builds submit --pack image=gcr.io/gcb-docs-project/hello
    
  • Transmettre plusieurs variables d'environnement à votre compilation à l'aide de ^--^ comme séparateur. Pour en savoir plus sur les arguments d'échappement, consultez la section gcloud topic escaping.

      gcloud builds submit --pack \
          ^--^image=gcr.io/my-project/myimage--env=GOOGLE_ENTRYPOINT='java -jar target/myjar.jar',GOOGLE_RUNTIME_VERSION='3.1.301'
    

Configurer des déclencheurs pour utiliser des packs de création: en plus de procéder à la compilation à l'aide de la ligne de commande, vous pouvez configurer des déclencheurs afin d'utiliser des packs de création pour créer automatiquement votre image. Pour en savoir plus, consultez la page Créer et gérer des déclencheurs de compilation.

Stocker des images dans Container Registry

Vous pouvez configurer Cloud Build pour stocker l'image générée de l'une des manières suivantes :

  • En utilisant le champ images qui, une fois l'image compilée, la stocke dans Container Registry
  • À l'aide de la commande docker push, qui stocke l'image dans Container Registry dans le cadre de votre processus de compilation

L'utilisation du champ images et celle de la commande Docker push diffèrent en ce que si vous utilisez le champ images, l'image stockée sera affichée dans les résultats de la compilation. Cela inclut la page Description de la compilation d'une compilation dans Cloud Console, les résultats de Build.get() et les résultats de gcloud builds list. Toutefois, si vous utilisez la commande Docker push pour stocker l'image compilée, celle-ci ne sera pas affichée dans les résultats de la compilation.

Pour stocker une image dans le cadre du flux de compilation et l'afficher dans les résultats de la compilation, utilisez à la fois la commande Docker push et le champ images dans la configuration de compilation.

Pour stocker une image de conteneur dans Container Registry une fois la compilation terminée :

  1. Dans le répertoire contenant le code source de votre application et le fichier Dockerfile, créez un fichier nommé cloudbuild.yaml ou cloudbuild.json.
  2. Dans votre fichier de configuration de compilation, ajoutez une étape chargée de générer l'image, puis ajoutez un champ images spécifiant l'image créée. Cette opération stocke l'image dans Container Registry. L'extrait suivant présente une configuration de compilation qui génère une image et la stocke dans Container Registry :

    YAML

    steps:
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'gcr.io/PROJECT_ID/IMAGE_NAME', '.']
    images: ['gcr.io/PROJECT_ID/IMAGE_NAME']
    

    JSON

    {
    "steps": [
    {
        "name": "gcr.io/PROJECT_ID/IMAGE_NAME",
        "args": [
            "build",
            "-t",
            "gcr.io/PROJECT_ID/IMAGE_NAME",
            "."
        ]
    }
    ],
    "images": [
        "gcr.io/PROJECT_ID/IMAGE_NAME"
    ]
    }
    

    Où :

    • PROJECT_ID est votre ID de projet cloud.
    • IMAGE_NAME est le nom de votre image de conteneur.
  3. Lancez la compilation à l'aide du fichier de configuration de compilation :

    gcloud builds submit --config CONFIG_FILE_PATH SOURCE_DIRECTORY
    

    Où :

    • CONFIG_FILE_PATH est le chemin d'accès du fichier de configuration de compilation
    • SOURCE_DIRECTORY est le chemin d'accès ou l'URL du code source.

Pour stocker l'image dans Container Registry dans le cadre de votre flux de compilation :

  1. Dans le répertoire contenant le code source de votre application et le fichier Dockerfile, créez un fichier nommé cloudbuild.yaml ou cloudbuild.json.

  2. Dans votre fichier de configuration, ajoutez une étape de compilation docker pour générer l'image, puis ajoutez une autre étape de compilation docker et transmettez des arguments pour appeler la commande push :

    YAML

    steps:
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'gcr.io/PROJECT_ID/IMAGE_NAME', '.']
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'gcr.io/PROJECT_ID/IMAGE_NAME']
    

    JSON

    {
      "steps": [
       {
          "name": "gcr.io/cloud-builders/docker",
          "args": [
              "build",
              "-t",
              "gcr.io/PROJECT_ID/IMAGE_NAME",
              "."
           ]
       },
       {
           "name": "gcr.io/cloud-builders/docker",
           "args": [
              "push",
              "gcr.io/PROJECT_ID/IMAGE_NAME"
            ]
       }
      ]
    }
    

    Où :

    • PROJECT_ID est votre ID de projet cloud.
    • IMAGE_NAME est le nom de votre image de conteneur.
  3. Lancez la compilation à l'aide du fichier de configuration de compilation :

    gcloud builds submit --config CONFIG_FILE_PATH SOURCE_DIRECTORY
    

    Où :

    • CONFIG_FILE_PATH est le chemin d'accès du fichier de configuration de compilation
    • SOURCE_DIRECTORY est le chemin d'accès ou l'URL du code source.

Pour stocker une image dans le cadre du flux de compilation et l'afficher dans les résultats de la compilation :

  1. Dans le répertoire contenant le code source de votre application et le fichier Dockerfile, créez un fichier nommé cloudbuild.yaml ou cloudbuild.json.
  2. Dans votre fichier de configuration, après l'étape de compilation de l'image, ajoutez une étape pour appeler la commande Docker push et ajoutez le champ images :

    YAML

    steps:
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'gcr.io/PROJECT_ID/IMAGE_NAME', '.']
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'gcr.io/PROJECT_ID/IMAGE_NAME']
    images: ['gcr.io/PROJECT_ID/IMAGE_NAME']
    

    JSON

    {
        "steps": [
       {
           "name": "gcr.io/cloud-builders/docker",
           "args": [
               "build",
               "-t",
               "gcr.io/PROJECT_ID/IMAGE_NAME",
               "."
            ]
       },
       {
           "name": "gcr.io/cloud-builders/docker",
           "args": [
               "push",
               "gcr.io/PROJECT_ID/IMAGE_NAME"
            ]
       }
       ],
        "images": [
           "gcr.io/PROJECT_ID/IMAGE_NAME"
        ]
    }
    

    Où :

    • PROJECT_ID est votre ID de projet cloud.
    • IMAGE_NAME est le nom de votre image de conteneur.
  3. Lancez la compilation à l'aide du fichier de configuration de compilation :

    gcloud builds submit --config CONFIG_FILE_PATH SOURCE_DIRECTORY
    

    Où :

    • CONFIG_FILE_PATH est le chemin d'accès du fichier de configuration de compilation
    • SOURCE_DIRECTORY est le chemin d'accès ou l'URL du code source.

Exécuter l'image Docker

Pour vérifier le bon fonctionnement de l'image compilée, vous pouvez l'exécuter à l'aide de Docker.

  1. Configurez Docker pour qu'il utilise vos informations d'identification Container Registry lors de l'interaction avec Container Registry (action à effectuer une seule fois) :

    gcloud auth configure-docker
    

    Un message semblable à celui-ci s'affiche alors :

    The following settings will be added to your Docker config file
    located at [/.docker/config.json]:
    
    {
      "credHelpers": {
        "gcr.io": "gcloud",
        "us.gcr.io": "gcloud",
        "eu.gcr.io": "gcloud",
        "asia.gcr.io": "gcloud",
        "staging-k8s.gcr.io": "gcloud",
        "marketplace.gcr.io": "gcloud"
      }
    }
    
    Do you want to continue (Y/n)?
    
  2. Saisissez y, puis appuyez sur la touche "Entrée".

  3. Exécutez l'image Docker précédemment compilée où PROJECT_ID correspond à l'ID de votre projet Cloud :

    docker run gcr.io/PROJECT_ID/IMAGE_NAME
    

    Un résultat semblable aux lignes suivantes s'affiche :

    Hello, world! The time is Fri Feb  2 16:09:54 UTC 2018.
    

Étape suivante