Configurer des conteneurs

Cette page explique comment configurer le port d'un conteneur, ainsi que la commande entrypoint et les arguments associés pour les services Cloud Run.

Lorsque Cloud Run démarre un conteneur, il exécute la commande entrypoint par défaut et les arguments de commande par défaut de l'image. Si vous souhaitez ignorer la commande entrypoint et les arguments de commande par défaut de l'image, vous pouvez utiliser les champs command et args dans la configuration du conteneur. Le champ command spécifie la commande réelle exécutée par le conteneur. Le champ args spécifie les arguments transmis à cette commande.

Rôles requis

Pour obtenir les autorisations nécessaires pour configurer et déployer des services Cloud Run, demandez à votre administrateur de vous accorder les rôles IAM suivants :

Pour obtenir la liste des rôles et des autorisations IAM associés à Cloud Run, consultez les sections Rôles IAM Cloud Run et Autorisations IAM Cloud Run. Si votre service Cloud Run communique avec les API Google Cloud, telles que les bibliothèques clientes Cloud, consultez le guide de configuration de l'identité du service. Pour en savoir plus sur l'attribution de rôles, consultez les sections Autorisations de déploiement et Gérer les accès.

Configurer le port du conteneur

Tout changement de configuration entraîne la création d'une révision. Les révisions ultérieures obtiennent aussi automatiquement le même paramètre de configuration, à moins que vous ne le mettiez explicitement à jour.

Pour les services Cloud Run, Cloud Run injecte la variable d'environnement PORT dans le conteneur. Si vous déployez plusieurs conteneurs sur un service, il s'agit du conteneur d'entrée. Le conteneur écoute sur le port défini par la variable d'environnement PORT, plutôt que sur un port spécifique codé en dur. Si cela n'est pas possible, configurez l'écoute sur le port qui envoie les requêtes au conteneur. Notez que les paramètres de port ne s'appliquent pas aux jobs Cloud Run.

Console

  1. Dans la console Google Cloud, accédez à Cloud Run :

    Accédez à Cloud Run

  2. Cliquez sur Déployer un conteneur et sélectionnez Service pour configurer un nouveau service. Si vous configurez un service existant, cliquez sur celui-ci puis sur Modifier et déployer la nouvelle révision.

  3. Si vous configurez un nouveau service, remplissez la page initiale des paramètres du service, puis cliquez sur Conteneur(s), volumes, mise en réseau et sécurité pour développer la page de configuration du service.

  4. Cliquez sur l'onglet Conteneur.

    image

    • Spécifiez le port auquel vous souhaitez envoyer les requêtes, s'il ne s'agit pas du port par défaut 8080. Cela définit également la variable d'environnement PORT.
  5. Cliquez sur Créer ou Déployer.

gcloud

Vous pouvez mettre à jour la configuration du port d'un service à l'aide de la commande suivante :

gcloud run services update SERVICE --port PORT

Remplacer

  • SERVICE par le nom du service ;
  • PORT par le port auquel envoyer les requêtes. Notez que le port par défaut est 8080.

Vous pouvez également configurer des ports lors du déploiement à l'aide de la commande suivante :

gcloud run deploy --image IMAGE_URL --port PORT

Remplacez IMAGE_URL par une référence à l'image de conteneur, par exemple us-docker.pkg.dev/cloudrun/container/hello:latest. Si vous utilisez Artifact Registry, le dépôt REPO_NAME doit déjà être créé. L'URL se présente sous la forme suivante : LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.

YAML

  1. Si vous créez un service, ignorez cette étape. Si vous mettez à jour un service existant, téléchargez sa configuration YAML :

    gcloud run services describe SERVICE --format export > service.yaml
  2. Mettez à jour l'attribut containerPort: :

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION
        spec:
          containers:
          - image: IMAGE_URL
            ports:
            - containerPort: PORT
    

    Remplacez :

    • SERVICE par le nom de votre service Cloud Run
    • IMAGE_URL par une référence à l'image de conteneur, par exemple us-docker.pkg.dev/cloudrun/container/hello:latest. Si vous utilisez Artifact Registry, le dépôt REPO_NAME doit déjà être créé. L'URL se présente sous la forme suivante : LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
    • PORT par le port auquel envoyer les requêtes.
    • REVISION par un nouveau nom de révision ou supprimez-le (le cas échéant). Si vous indiquez un nouveau nom de révision, il doit répondre aux critères suivants :
      • Commencer par SERVICE-
      • Ne contenir que des lettres minuscules, des chiffres et -
      • Ne pas se terminer par -
      • Ne pas dépasser 63 caractères
  3. Remplacez la configuration du service en exécutant la commande suivante :

    gcloud run services replace service.yaml

Configurer un point d'entrée et des arguments

Tout changement de configuration entraîne la création d'une révision. Les révisions ultérieures obtiennent aussi automatiquement le même paramètre de configuration, à moins que vous ne le mettiez explicitement à jour.

La commande du conteneur et les arguments spécifiés remplacent l'image par défaut ENTRYPOINT et CMD.

Vous pouvez définir la commande entrypoint et ses arguments à l'aide de la console Google Cloud, de Google Cloud CLI ou d'un fichier YAML lorsque vous créez un service ou déployez une nouvelle révision :

Console

  1. Dans la console Google Cloud, accédez à Cloud Run :

    Accédez à Cloud Run

  2. Cliquez sur Déployer un conteneur et sélectionnez Service pour configurer un nouveau service. Si vous configurez un service existant, cliquez sur celui-ci puis sur Modifier et déployer la nouvelle révision.

  3. Si vous configurez un nouveau service, remplissez la page initiale des paramètres du service, puis cliquez sur Conteneur(s), volumes, mise en réseau et sécurité pour développer la page de configuration du service.

  4. Cliquez sur l'onglet Conteneur.

    image

    • Spécifiez la commande que le conteneur doit exécuter, s'il ne s'agit pas de la commande définie dans votre conteneur, et spécifiez éventuellement les arguments de la commande entrypoint.
  5. Cliquez sur Créer ou Déployer.

gcloud

Pour mettre à jour la commande de démarrage et les arguments d'un service existant, procédez comme suit :

gcloud run services update SERVICE --command COMMAND --args ARG1,ARG-N

Remplacer

  • COMMAND par la commande avec laquelle le conteneur doit démarrer si vous n'utilisez pas la commande par défaut ;
  • ARG1 par l'argument à envoyer à la commande du conteneur. Si vous avez plusieurs arguments, indiquez-les sous forme de liste en les séparant par une virgule.

Pour spécifier le point d'entrée et les arguments lors du déploiement d'un service nouveau ou existant, procédez comme suit :

gcloud run deploy --image IMAGE_URL --command COMMAND --args ARG1,ARG-N

Remplacez IMAGE_URL par une référence à l'image de conteneur, par exemple us-docker.pkg.dev/cloudrun/container/hello:latest. Si vous utilisez Artifact Registry, le dépôt REPO_NAME doit déjà être créé. L'URL se présente sous la forme suivante : LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

Pour effacer les commandes entrypoint et les arguments que vous avez définis (restaurez sur les valeurs par défaut du conteneur), fournissez des chaînes vides comme suit :

gcloud run deploy --image IMAGE_URL --command "" --args ""

YAML

  1. Si vous créez un service, ignorez cette étape. Si vous mettez à jour un service existant, téléchargez sa configuration YAML :

    gcloud run services describe SERVICE --format export > service.yaml
  2. Modifiez les attributs command et args :

    spec:
      containers:
      - image: IMAGE_URL
        command:
        - COMMAND
        args:
        - "ARG1"
        - "ARG-N"
    

    Remplacer

    • IMAGE_URL par une référence à l'image de conteneur, par exemple us-docker.pkg.dev/cloudrun/container/hello:latest. Si vous utilisez Artifact Registry, le dépôt REPO_NAME doit déjà être créé. L'URL se présente sous la forme suivante : LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • COMMAND par la commande avec laquelle le conteneur doit démarrer si vous n'utilisez pas la commande par défaut.
    • ARG1 par l'argument à envoyer à la commande du conteneur. Si vous utilisez plusieurs arguments, spécifiez chacun d'eux sur une ligne distincte (par exemple, ARG-N).
  3. Remplacez la configuration du service en exécutant la commande suivante :

    gcloud run services replace service.yaml

Terraform

Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez Commandes Terraform de base.

La ressource google_cloud_run_v2_service suivante spécifie une commande et des arguments. Remplacez /server par la commande utilisée pour démarrer votre conteneur et ajoutez les arguments nécessaires au tableau args.

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-containers"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"

      # Container "entry-point" command
      command = ["/server"]

      # Container "entry-point" args
      args = []
    }
  }
}

Utiliser des signes "égal" ou des virgules dans les arguments

Si vous utilisez des signes "égal" dans vos arguments, indiquez-les au format suivant :

gcloud run deploy  \
  --args="--repo-allowlist=github.com/example/example_demo"

Si vos arguments utilisent des virgules, reportez-vous à la section Configurer des variables d'environnement pour savoir comment échapper ces caractères.

Configurer l'ordre de démarrage des conteneurs pour les déploiements side-car

Pour spécifier l'ordre de démarrage des conteneurs dans un déploiement side-car, vous devez utiliser la fonctionnalité de dépendances de conteneurs. Vous spécifiez les conteneurs qui ont des dépendances et répertoriez les conteneurs dont ils dépendent. Ces conteneurs sont démarrés en premier. Les conteneurs sans dépendance sont toujours démarrés en premier et simultanément.

Vous devez utiliser des vérifications d'état de démarrage si vous souhaitez utiliser cette fonctionnalité. La vérification du démarrage permet à Cloud Run d'inspecter l'état d'un conteneur dépendant pour s'assurer qu'il est opérationnel avant de démarrer le conteneur suivant. Si vous n'utilisez pas les vérifications d'état, les conteneurs sont démarrés dans l'ordre spécifié, même si les conteneurs dont ils dépendent échouent.

Notez que les conteneurs d'entrée possèdent une vérification d'état de démarrage par défaut.

Vous pouvez utiliser la console Google Cloud, Google Cloud CLI ou YAML pour spécifier l'ordre de démarrage :

Console

  1. Dans la console Google Cloud, accédez à la page Cloud Run :

    Accédez à Cloud Run

    • Pour un service existant, cliquez sur le service dans la liste et sélectionnez Modifier et déployer la nouvelle révision pour afficher le formulaire de déploiement de révision.
    • Pour un nouveau service, cliquez sur Deploy container (Déployer un conteneur) et sélectionnez Service (Service) pour afficher le formulaire Create service (Créer un service).
  2. Pour un nouveau service, spécifiez le nom du service, l'URL du conteneur d'entrée, l'allocation de processeur, le contrôle des entrées et l'authentification. Dans l'onglet Conteneur(s), volumes, mise en réseau et sécurité, procédez comme suit :

    1. Configurez le conteneur d'entrée.
    2. Pour ajouter chacun des autres conteneurs que vous déployez, cliquez sur Ajouter un conteneur.
    3. Pour tous les conteneurs à l'exception du conteneur d'entrée, configurez une vérification d'état de démarrage. Les conteneurs d'entrée disposent d'une vérification d'état de démarrage par défaut.
    4. Si un conteneur a besoin que d'autres conteneurs soient opérationnels avant de pouvoir démarrer, utilisez le menu Ordre de démarrage du conteneur pour sélectionner les conteneurs qui doivent démarrer en premier.
  3. Pour un service existant, procédez comme suit :

    1. Pour tous les conteneurs à l'exception du conteneur d'entrée, configurez une vérification d'état de démarrage. Les conteneurs d'entrée disposent d'une vérification d'état de démarrage par défaut.
    2. Chaque conteneur s'affiche avec son propre menu Ordre de démarrage du conteneur. Si un conteneur a besoin que d'autres conteneurs soient opérationnels avant de pouvoir démarrer, utilisez le menu Ordre de démarrage du conteneur pour sélectionner les conteneurs qui doivent démarrer en premier.
  4. Terminez toutes les autres configurations requises, puis cliquez sur Créer pour un nouveau service ou Déployer pour un service existant. Patientez jusqu'à la fin du déploiement.

gcloud

Avant de spécifier une commande de démarrage à l'aide de Google Cloud CLI, vous devez configurer une vérification d'état de démarrage pour tous les conteneurs à l'exception du conteneur d'entrée. Les conteneurs d'entrée disposent d'une vérification d'état de démarrage par défaut. Vous ne pouvez pas configurer les vérifications d'état avec Google Cloud CLI.

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Pour déployer plusieurs conteneurs sur un service avec un ordre de démarrage spécifique, exécutez la commande suivante :

gcloud run deploy SERVICE \
     --container CONTAINER_1_NAME --image='INGRESS_IMAGE' --port='CONTAINER_PORT' \
     --container CONTAINER_2_NAME --image='SIDECAR_IMAGE' --depends-on=CONTAINER_1_NAME \
     --container CONTAINER_3_NAME --image='SIDECAR_IMAGE' --depends-on=CONTAINER_1_NAMECONTAINER_2_NAME
  • Remplacez SERVICE par le nom du service sur lequel vous déployez l'image. Vous pouvez omettre ce paramètre, mais dans ce cas le nom du service vous sera demandé.
  • Remplacez CONTAINER_PORT par le port sur lequel le conteneur d'entrée écoute les requêtes entrantes. Contrairement au scénario avec service à conteneur unique, il n'existe pas de port par défaut pour le conteneur d'entrée d'un service incluant des side-cars. Vous devez configurer explicitement le port du conteneur pour le conteneur d'entrée, et le port ne peut être exposé que sur un seul conteneur.
  • Remplacez INGRESS_IMAGE par une référence à l'image de conteneur qui doit recevoir des requêtes, par exemple us-docker.pkg.dev/cloudrun/container/hello:latest.
  • Remplacez SIDECAR_IMAGE par une référence à l'image de conteneur side-car.

    Si vous souhaitez configurer chaque conteneur dans la commande de déploiement, indiquez la configuration de chaque conteneur après les paramètres container.

YAML

  1. Si vous créez un service, ignorez cette étape. Si vous mettez à jour un service existant, téléchargez sa configuration YAML :

    gcloud run services describe SERVICE --format export > service.yaml
  2. Mettez à jour l'attribut container-dependencies :

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/container-dependencies: '{"CONTAINER1":["CONTAINER2"], "CONTAINER3":["CONTAINER1","CONTAINER2"]}'
    

    Remplacer

    • CONTAINER1 par le nom du premier conteneur qui dépend d'un ou de plusieurs conteneurs. Notez que vous pouvez définir le nom du conteneur dans le fichier YAML : Cloud Run génère automatiquement un nom s'il n'est pas spécifié.
    • CONTAINER2 par le nom du conteneur qui doit démarrer avant CONTAINER1.
    • CONTAINER3 par le nom du second conteneur qui dépend d'un ou de plusieurs conteneurs.

    Dans l'exemple présenté dans l'extrait de code YAML, CONTAINER2 démarre en premier, CONTAINER1 en deuxième et CONTAINER3 en dernier.

  3. Remplacez la configuration du service en exécutant la commande suivante :

    gcloud run services replace service.yaml

Afficher les paramètres du conteneur

Pour afficher les paramètres actuels du conteneur de votre service Cloud Run, procédez comme suit :

Console

  1. Dans la console Google Cloud, accédez à Cloud Run :

    Accédez à Cloud Run

  2. Cliquez sur le service qui vous intéresse pour ouvrir la page Informations sur le service.

  3. Cliquez sur l'onglet Révisions.

  4. Dans le panneau de détails sur la droite, le paramètre du conteneur est répertorié sous l'onglet Conteneur.

gcloud

  1. Exécutez la commande suivante :

    gcloud run services describe SERVICE
  2. Recherchez le paramètre de conteneur dans la configuration renvoyée.