Déployer des services à l'aide de Compose

Cette page explique comment déployer des services sur Cloud Run à l'aide d'un fichier basé sur la spécification Compose.

Vous pouvez déployer sur Cloud Run avec un fichier Compose de différentes manières :

L'utilisation de Compose pour le déploiement sur Cloud Run est idéale pour le développement et simplifie la transition de votre environnement local vers un environnement cloud. Il vous permet de conserver un format de configuration cohérent pour vos applications locales et déployées.

Pour gérer les environnements de production dans un environnement IaC (Infrastructure as Code), nous vous recommandons d'utiliser Terraform.

Limites

  • Le déploiement Compose déploie un seul service Cloud Run avec plusieurs conteneurs.
  • Le déploiement Compose ne traduit qu'un sous-ensemble des fonctionnalités Cloud Run compatibles.
  • Les services créés à l'aide de Compose sont définis par défaut sur 1 instance maximale.
  • Bien qu'il simplifie le déploiement, Cloud Run Compose deploy ne remplace pas une stratégie complète d'infrastructure en tant que code pour les environnements de production.

Déployer des services à partir d'images de conteneurs avec Compose

Définissez vos services dans un fichier compose.yaml et déployez-les à partir d'images de conteneur existantes. Pour en savoir plus, consultez Déployer des images de conteneur.

Exemple : Application à service unique

L'exemple suivant montre un fichier compose.yaml pour un service Web qui utilise une image de conteneur prédéfinie.

services:
  web:
    image: us-docker.pkg.dev/cloudrun/container/hello
    ports:
      - "8080:8080"

Déployer les services

  1. Pour déployer les services, exécutez la commande gcloud beta run compose up :

    gcloud beta run compose up compose.yaml

  2. Répondez y à toutes les invites pour installer les composants requis ou activer les API.

  3. Facultatif : Rendez votre service public si vous souhaitez autoriser un accès non authentifié à celui-ci.

    Une fois le déploiement terminé, l'URL du service Cloud Run s'affiche. Copiez cette URL et collez-la dans votre navigateur pour afficher le conteneur en cours d'exécution. Vous pouvez désactiver l'authentification par défaut depuis la console Google Cloud .

Déployer à partir d'une source avec Compose

Définissez vos services dans un fichier compose.yaml et déployez-les en compilant à partir du code source. Pour en savoir plus, consultez Déployer des services à partir du code source.

Exemple : Application à service unique

L'exemple suivant montre un fichier compose.yaml pour un service Web qui est créé à partir de la source dans le répertoire actuel.

services:
  web:
    build: .
    ports:
      - "8080:8080"

Déployer les services

  • Dans le répertoire de votre projet, créez un fichier compose.yaml avec vos définitions de service.

    1. Pour déployer les services, exécutez la commande gcloud beta run compose up :

      gcloud beta run compose up compose.yaml
    2. Répondez y à toutes les invites pour installer les composants requis ou activer les API.

    3. Facultatif : Rendez votre service public si vous souhaitez autoriser un accès non authentifié à celui-ci.

    Une fois le déploiement terminé, l'URL du service Cloud Run s'affiche. Copiez cette URL et collez-la dans votre navigateur pour afficher le conteneur en cours d'exécution. Vous pouvez désactiver l'authentification par défaut depuis la console Google Cloud .

Fonctionnalités compatibles

Lorsque vous effectuez un déploiement à l'aide d'un fichier compose.yaml, Cloud Run peut provisionner automatiquement d'autres ressources Google Cloud , comme défini dans votre fichier Compose. Si des ressources sont nécessaires, Cloud Run vous demande votre autorisation avant de les créer.

Cloud Run est compatible avec le sous-ensemble suivant de fonctionnalités Compose :

Champ de rédaction Mappage et description de Cloud Run
services

Les services sont mappés à des conteneurs individuels dans le service Cloud Run déployé.

volumes

Partiellement compatible. Traduit les montages bind, volume et tmpfs en équivalents Cloud Run.

secrets

Compatible Utiliser Secret Manager.

configs

Compatible Utiliser Cloud Storage

build

Cloud Build crée le conteneur à l'aide du contexte de compilation, en ajoutant des tags et en le transférant vers le dépôt cloud-run-source-deploy dans Artifact Registry.

image

Déploie une image de conteneur préconfigurée à partir d'un registre compatible. À utiliser si vous disposez d'une image prédéfinie. Ne prend en charge que les images Docker Hub et Artifact Registry. Pour les images personnalisées, vous pouvez transférer des images vers Artifact Registry et les utiliser.

ports

Liste des mappages de ports, tels que 8080:8080, qui déterminent le conteneur d'entrée.

expose

Liste des ports à exposer, mais pas à publier, comme 3000, pour s'assurer que les services dépendants disposent d'un port disponible pour la communication.

depends_on

Définit l'ordre de démarrage des conteneurs. Cela garantit que tout service listé dans run-compose dispose d'un port défini par ports ou expose afin que d'autres conteneurs puissent communiquer avec lui.

cpu_count/cpus

Indication utilisée pour définir les limites de processeur et de mémoire Cloud Run, en allouant automatiquement les ressources selon la logique suivante :

  • <= 2 CPU: 1Gi Memory
  • <= 4 CPU: 2Gi Memory
  • > 4 CPU: 4Gi Memory
container_name

Définit le nom du conteneur pour la résolution des dépendances. Par défaut, il s'agit du nom du service s'il n'est pas spécifié.

environment

Transmet les variables d'environnement au conteneur correspondant dans Cloud Run.

command

Remplace la commande par défaut du conteneur, déclarée par le conteneur, en mappant à l'attribut args dans Cloud Run (par exemple, l'instruction CMD d'un Dockerfile).

entrypoint

Compatible

env_file

Compatible

x-google-cloudrun:ingress-container

(Extension) Ajoutez cette extension spécifique à Google à un service et définissez-la sur true pour la marquer comme conteneur d'entrée qui reçoit tout le trafic externe.

x-google-cloudrun:volume-type: in-memory

(Extension) Ajoutez cette extension spécifique à Google à un volume et définissez-la sur in-memory au lieu du volume par défaut sauvegardé par Cloud Storage.

Secrets mappés à Secret Manager

Si votre fichier compose.yaml définit secrets, gcloud CLI provisionne des secrets Secret Manager pour stocker ces données.

Volumes et configurations mappés à Cloud Storage

Si votre fichier compose.yaml définit des volumes ou configs de premier niveau, la gcloud CLI provisionne un bucket Cloud Storage pour gérer ces données. Un seul bucket est créé par déploiement, et des dossiers sont utilisés pour séparer les volumes et les configurations.

  • Volumes nommés : un dossier vide correspondant au nom du volume est créé dans le bucket.
  • Montages liés : pour les montages liés, Cloud Run importe le contenu du répertoire source local dans un dossier du bucket avant le déploiement.
  • Configurations : pour chaque configuration définie avec une source file:, Cloud Run importe le contenu du fichier local dans un dossier du bucket.

Rôles requis

Lors du déploiement, Cloud Run attribue automatiquement à l'identité de service du service déployé les rôles nécessaires pour accéder aux ressources provisionnées :

  • Bucket Cloud Storage : roles/storage.objectUser
  • Secrets Secret Manager : roles/secretmanager.secretAccessor

Communication entre les conteneurs d'une même instance

Cloud Run ajoute une entrée au fichier /etc/hosts dans chaque conteneur. Cette entrée mappe les noms de service de votre fichier compose.yaml à leurs adresses IP internes, ce qui permet aux services de communiquer entre eux à l'aide de leurs noms de service.

Étapes suivantes