Esegui il deployment dei servizi utilizzando Compose

Questa pagina descrive come eseguire il deployment dei servizi in Cloud Run utilizzando un file basato sulla specifica Compose.

Puoi eseguire il deployment in Cloud Run con un file Compose nei seguenti modi:

L'utilizzo di Compose per il deployment in Cloud Run è ideale per lo sviluppo e semplifica la transizione dall'ambiente locale a un ambiente cloud. Ti consente di mantenere un formato di configurazione coerente sia per le applicazioni locali sia per quelle di cui è stato eseguito il deployment.

Per la gestione degli ambienti di produzione in un ambiente Infrastructure as Code (IaC) ambiente, ti consigliamo di utilizzare Terraform.

Limitazioni

  • Il deployment di Compose esegue il deployment di un singolo servizio Cloud Run con più container.
  • Il deployment di Compose traduce solo un sottoinsieme delle funzionalità di Cloud Run supportate.
  • Per impostazione predefinita, i servizi creati utilizzando Compose sono impostati su 1 istanza massima.
  • Sebbene semplifichi il deployment, il deployment di Cloud Run Compose non sostituisce una strategia Infrastructure as Code completa per gli ambienti di produzione.

Esegui il deployment dei servizi dalle immagini container con Compose

Definisci i servizi in un file compose.yaml ed esegui il deployment dalle immagini container esistenti. Per ulteriori informazioni, consulta Esegui il deployment delle immagini container.

Esempio: applicazione a servizio singolo

L'esempio seguente mostra un file compose.yaml per un servizio web che utilizza un'immagine container predefinita.

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

Esegui il deployment del servizio

  1. Per eseguire il deployment dei servizi, esegui il comando gcloud run compose up:

    gcloud run compose up compose.yaml

  2. Rispondi y a eventuali prompt per installare i componenti richiesti o per attivare le API.

  3. (Facoltativo) Rendi pubblico il servizio se vuoi consentire l'accesso non autenticato al servizio.

    Dopo il deployment, viene visualizzato l'URL del servizio Cloud Run. Copia questo URL e incollalo nel browser per visualizzare il container in esecuzione. Puoi disattivare l'autenticazione predefinita dalla Google Cloud console.

Esegui il deployment dal codice sorgente con Compose

Definisci i servizi in un file compose.yaml ed esegui il deployment creando dal codice sorgente. Per ulteriori informazioni, consulta Esegui il deployment dei servizi dal codice sorgente.

Esempio: applicazione a servizio singolo

L'esempio seguente mostra un file compose.yaml per un servizio web che esegue la build dal codice sorgente nella directory corrente.

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

Esegui il deployment dei servizi

  • Nella directory del progetto, crea un file compose.yaml con le definizioni dei servizi.

    1. Per eseguire il deployment dei servizi, esegui il comando gcloud run compose up:

      gcloud run compose up compose.yaml
    2. Rispondi y a eventuali prompt per installare i componenti richiesti o per attivare le API.

    3. (Facoltativo) Rendi pubblico il servizio se vuoi consentire l'accesso non autenticato al servizio.

    Dopo il deployment, viene visualizzato l'URL del servizio Cloud Run. Copia questo URL e incollalo nel browser per visualizzare il container in esecuzione. Puoi disattivare l'autenticazione predefinita dalla Google Cloud console.

Forza una ricompilazione

Per impostazione predefinita, il deployment di Cloud Run Compose salta il processo di compilazione se il codice sorgente non è stato modificato dall'ultima build. Per forzare una ricompilazione di tutti i servizi definiti con una build configurazione, utilizza il --build flag come segue:

gcloud run compose up compose.yaml --build

Questa opzione è particolarmente utile se un repository, un'immagine o un digest remoto è stato eliminato, ma il codice sorgente locale rimane invariato. I flag --build e --no-build si escludono a vicenda.

Funzionalità supportate

Quando esegui il deployment utilizzando un file compose.yaml, Cloud Run può eseguire automaticamente il provisioning di altre Google Cloud risorse come definito nel file Compose. Se sono necessarie risorse, Cloud Run ti chiede il consenso prima di crearle.

Cloud Run supporta il seguente sottoinsieme di funzionalità di Compose:

Campo Compose Mapping e descrizione di Cloud Run
services

I servizi vengono mappati ai singoli container nel servizio Cloud Run di cui è stato eseguito il deployment.

volumes

Supportata parzialmente. Converte i montaggi bind, volume e tmpfs in equivalenti di Cloud Run.

secrets

Supportata. Utilizzo di Secret Manager.

configs

Supportata. Utilizzo di Cloud Storage.

build

Supportata. Crea il container utilizzando il contesto di build, eseguendo il tagging e il push nel repository cloud-run-source-deploy in Artifact Registry. Utilizza il flag --build per forzare una ricompilazione anche se il codice sorgente non è stato modificato dall'ultima build.

image

Esegue il deployment di un'immagine container predefinita da un registro supportato. Utilizza questa opzione se hai un'immagine predefinita. Supporta solo le immagini di Docker Hub e Artifact Registry. Per le immagini personalizzate, puoi eseguire il push delle immagini in Artifact Registry e utilizzarle.

ports

Un elenco di mappature delle porte, ad esempio 8080:8080, che determinano il container di ingresso.

expose

Un elenco di porte da esporre ma non pubblicare, ad esempio 3000, per garantire che i servizi dipendenti abbiano una porta disponibile per la comunicazione.

depends_on

Definisce l'ordine di avvio del container. In questo modo, qualsiasi servizio elencato in run-compose ha una porta definita da ports o expose, in modo che altri container possano comunicare con esso.

cpus

Un suggerimento utilizzato per impostare i limiti di CPU e memoria di Cloud Run, allocando automaticamente le risorse in base alla seguente logica:

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

Imposta il nome del container per la risoluzione delle dipendenze, impostando come predefinito il nome del servizio se non specificato.

environment

Passa le variabili di ambiente al container corrispondente in Cloud Run.

command

Esegue l'override del comando predefinito del container, dichiarato dal container, eseguendo il mapping all'attributo args in Cloud Run; ad esempio, l'istruzione CMD di un Dockerfile.

entrypoint

Supportata.

env_file

Supportata.

x-google-cloudrun:ingress-container

(Estensione) Aggiungi questa estensione specifica di Google a un servizio e impostala su true per contrassegnarla come container di ingresso che riceve tutto il traffico esterno.

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

(Estensione) Aggiungi questa estensione specifica di Google a un volume e impostala su in-memory anziché sul volume predefinito supportato da Cloud Storage.

Secret mappati a Secret Manager

Se il file compose.yaml definisce secrets, la gcloud CLI esegue il provisioning dei secret di Secret Manager per archiviare questi dati.

Volumi e configurazioni mappati a Cloud Storage

Se il file compose.yaml definisce volumes o configs di primo livello, la gcloud CLI esegue il provisioning di un bucket Cloud Storage per gestire questi dati. Viene creato un singolo bucket per ogni deployment, utilizzando le cartelle per separare volumi e configurazioni.

  • Volumi denominati: nel bucket viene creata una cartella vuota corrispondente al nome del volume.
  • Montaggi di binding: per i montaggi di binding, Cloud Run carica i contenuti della directory di origine locale in una cartella del bucket prima del deployment.
  • Configurazioni: per ogni configurazione definita con un'origine file:, Cloud Run carica i contenuti del file locale in una cartella del bucket.

Ruoli obbligatori

Durante il deployment, Cloud Run concede automaticamente all'identità del servizio di cui è stato eseguito il deployment i ruoli necessari per accedere alle risorse di cui è stato eseguito il provisioning:

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

Comunicazione tra i container della stessa istanza

Cloud Run aggiunge una voce al file /etc/hosts in ogni container. Questa voce mappa i nomi dei servizi dal file compose.yaml ai relativi indirizzi IP interni, il che consente ai servizi di comunicare tra loro utilizzando i nomi dei servizi.

Passaggi successivi