Questa pagina descrive come eseguire il deployment dei servizi in Cloud Run utilizzando un file basato sulla specifica Compose.
Puoi eseguire il deployment su Cloud Run con un file Compose nei seguenti modi:
L'utilizzo di Compose per il deployment su Cloud Run è ideale per lo sviluppo e semplifica la transizione dall'ambiente locale a un ambiente cloud. 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), ti consigliamo di utilizzare Terraform.
Limitazioni
- Il deployment di Compose esegue il deployment di un singolo servizio Cloud Run con più container.
- Compose deployment 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, Cloud Run Compose deploy non sostituisce una strategia Infrastructure as Code completa per gli ambienti di produzione.
Deployment di servizi da immagini container con Compose
Definisci i tuoi servizi in un file compose.yaml ed esegui il deployment da immagini container esistenti. Per saperne di più, consulta Eseguire il deployment di 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"
Esempio: applicazione multi-container con Nginx, Flask e MongoDB
L'esempio seguente mostra un file compose.yaml per un'applicazione con un
proxy Nginx, un backend Flask e un database MongoDB.
Il deployment di questo esempio richiede la seguente struttura del progetto:
compose.yaml: il file Compose che definisce i servizi.nginx/nginx.conf: Configurazione del proxy Nginx.flask/: Directory contenente il codice dell'applicazione Flask (server.py,Dockerfileerequirements.txt).
services:
web:
image: nginx
volumes:
- ./nginx/nginx.conf:/tmp/nginx.conf
environment:
- FLASK_SERVER_ADDR=backend:9091
command: /bin/bash -c "envsubst < /tmp/nginx.conf > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
- 80:80
x-google-cloudrun:
ingress-container: true
depends_on:
- backend
backend:
build:
context: flask
target: builder
stop_signal: SIGINT
environment:
- FLASK_SERVER_PORT=9091
volumes:
- ./flask:/src
depends_on:
- mongo
ports:
- 9091:9091
mongo:
image: mongo
ports:
- 27017:27017
Esegui il deployment dei servizi
Per eseguire il deployment dei servizi, esegui il comando
gcloud run compose up:gcloud run compose up compose.yamlRispondi
ya eventuali richieste di installazione dei componenti necessari o di abilitazione delle API.(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 contenitore in esecuzione. Puoi disattivare l'autenticazione predefinita dalla console Google Cloud .
Esegui il deployment dall'origine con Compose
Definisci i tuoi servizi in un file compose.yaml ed eseguine il deployment creando dal
codice sorgente. Per saperne di più, consulta Eseguire 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 viene creato
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.yamlcon le definizioni del servizio.Per eseguire il deployment dei servizi, esegui il comando
gcloud run compose up:gcloud run compose up compose.yamlRispondi
ya eventuali richieste di installazione dei componenti necessari o di attivazione delle API.(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 contenitore in esecuzione. Puoi disattivare l'autenticazione predefinita dalla console Google Cloud .
Forzare una rigenerazione
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 configurazione build, utilizza il flag --build
come segue:
gcloud run compose up compose.yaml --build
Ciò è particolarmente utile se un repository remoto, un'immagine o un digest è 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 risorse Google Cloud 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 Componi | Mapping e descrizione di Cloud Run |
|---|---|
services |
I servizi vengono mappati a singoli container nel servizio Cloud Run di cui è stato eseguito il deployment. |
volumes |
Parzialmente supportata. Converte i montaggi |
secrets |
Supportato. Utilizzo di Secret Manager. |
configs |
Supportato. Utilizzo di Cloud Storage. |
build |
Supportato. Crea il container utilizzando il contesto di build, il tagging e il push
nel repository |
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 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 |
expose |
Un elenco di porte da esporre ma non pubblicare, ad esempio |
depends_on |
Definisce l'ordine di avvio del container. In questo modo, qualsiasi servizio elencato in |
cpus |
Un suggerimento utilizzato per impostare i limiti di CPU e memoria di Cloud Run, allocando automaticamente le risorse in base alla seguente logica:
|
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 |
entrypoint |
Supportato. |
env_file |
Supportato. |
x-google-cloudrun:ingress-container |
(Estensione) Aggiungi questa estensione specifica di Google a un servizio e impostala su
|
x-google-cloudrun:volume-type: in-memory |
(Estensione) Aggiungi questa estensione specifica di Google a un volume e impostala su
|
Secret mappati a Secret Manager
Se il file compose.yaml definisce secrets, gcloud CLI esegue il provisioning dei secret di Secret Manager per archiviare questi dati.
Volumi e configurazioni mappati su Cloud Storage
Se il file compose.yaml definisce volumes o configs di primo livello, 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 bind: per i montaggi bind, 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 del file compose.yaml ai relativi indirizzi IP interni, il che consente ai servizi di comunicare tra loro utilizzando i nomi dei servizi.
Passaggi successivi
- Scopri di più sulla gestione dei servizi.
- Scopri di più sulla configurazione dell'autenticazione.
- Scopri come gestire i secret.