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.
  • Disposez d'un dépôt Docker pour stocker des images dans Artifact Registry ou créez-en un.
  • Si vous souhaitez utiliser les commandes gcloud de cette page, installez la CLI Google Cloud.
  • 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 Container Registry à l'adresse gcr.io/cloud-builders/docker. Dans l'exemple de fichier de configuration ci-dessous, le champ name indique que l'image Docker prédéfinie est utilisée par Cloud Build 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', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME', '.' ]
      

      JSON

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

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

    • LOCATION : emplacement régional ou multirégional de votre dépôt Docker dans Artifact Registry.

    • PROJECT_ID : ID de votre projet Cloud.

    • REPOSITORY : nom de votre dépôt Docker dans Artifact Registry.

    • 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', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME', '-f', 'DOCKERFILE_PATH', '.' ]
      

      JSON

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

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

      • LOCATION : emplacement régional ou multirégional de votre dépôt.
      • PROJECT_ID : ID de votre projet Cloud.
      • REPOSITORY : nom de votre dépôt Artifact Registry.
      • 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 LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME

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

  • LOCATION: emplacement régional ou multirégional de votre dépôt.
  • PROJECT_ID : ID de votre projet Cloud.
  • REPOSITORY: nom de votre dépôt Artifact Registry.
  • 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_NAME

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 Artifact Registry. L'URL de l'image doit être au format LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME.

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 us-docker.pkg.dev/gcb-docs-project/containers/gke/hello-app :

      gcloud builds submit --pack image=us-docker.pkg.dev/gcb-docs-project/containers/gke/hello-app
    
  • 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.

Différentes manières de stocker des images dans Artifact Registry

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

  • à l'aide du champ images, qui stocke l'image dans Artifact Registry une fois la compilation terminée.
  • à l'aide de la commande docker push, qui stocke l'image dans Artifact Registry dans le cadre de votre flux 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'un build dans la console, les résultats de Build.get() et ceux 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 Artifact Registry une fois la compilation terminée :

  1. Si le dépôt cible n'existe pas, créez un dépôt.
  2. 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.
  3. 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. Cela permet de stocker l'image dans Artifact Registry. L'extrait de code suivant montre une configuration de compilation permettant de compiler une image et de la stocker dans Artifact Registry:

    YAML

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

    JSON

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

    Où :

    • LOCATION : emplacement régional ou multirégional de votre dépôt.
    • PROJECT_ID : ID de votre projet Cloud.
    • REPOSITORY: nom de votre dépôt Artifact Registry.
    • IMAGE_NAME : nom de votre image de conteneur
  4. 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 Artifact 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', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME', '.']
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME']
    

    JSON

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

    Où :

    • LOCATION : emplacement régional ou multirégional de votre dépôt.
    • PROJECT_ID : ID de votre projet Cloud.
    • REPOSITORY : nom de votre dépôt Artifact Registry.
    • IMAGE_NAME : 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', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME', '.']
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME']
    images: ['LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME']
    

    JSON

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

    Où :

    • LOCATION: emplacement régional ou multirégional de votre dépôt.
    • PROJECT_ID : ID de votre projet Cloud.
    • REPOSITORY: nom de votre dépôt Artifact Registry.
    • IMAGE_NAME : 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 identifiants Artifact Registry lors de l'interaction avec Artifact Registry. Cette opération n'est à effectuer qu'une seule fois. Utilisez la commande suivante pour vous authentifier à l'aide de gcloud credential helper.

    gcloud auth configure-docker HOSTNAME-LIST
    

    Où HOSTNAME-LIST est une liste de noms d'hôtes de dépôts séparés par une virgule à ajouter à la configuration de l'outil d'aide à la connexion.

    Par exemple, pour ajouter les régions us-central1 et asia-northeast1, exécutez la commande suivante :

    gcloud auth configure-docker us-central1-docker.pkg.dev,asia-northeast1-docker.pkg.dev
    
  2. Exécutez l'image Docker que vous avez créée précédemment:

    docker run LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME
    

    Où :

    • LOCATION: emplacement régional ou multirégional de votre dépôt.
    • PROJECT_ID : ID de votre projet Cloud.
    • REPOSITORY : nom de votre dépôt Artifact Registry.
    • IMAGE_NAME : nom de votre image de conteneur

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

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

Étapes suivantes