Desplegar servicios con Compose

En esta página se describe cómo desplegar servicios en Cloud Run mediante un archivo basado en la especificación de Compose.

Puedes desplegar en Cloud Run con un archivo de Compose de las siguientes formas:

Usar Compose para desplegar en Cloud Run es ideal para el desarrollo y simplifica la transición de tu entorno local a un entorno de nube. Te permite mantener un formato de configuración coherente tanto para tus aplicaciones locales como para las implementadas.

Para gestionar entornos de producción en un entorno de infraestructura como código (IaC), te recomendamos que uses Terraform.

Limitaciones

  • Compose Deployment despliega un único servicio de Cloud Run con varios contenedores.
  • La opción de crear implementaciones solo traduce un subconjunto de las funciones de Cloud Run admitidas.
  • Los servicios creados con Compose tienen 1 instancia máxima de forma predeterminada.
  • Aunque simplifica el despliegue, Cloud Run Compose deploy no sustituye a una estrategia integral de infraestructura como código para entornos de producción.

Desplegar servicios a partir de imágenes de contenedor con Compose

Define tus servicios en un archivo compose.yaml y despliégalos desde imágenes de contenedor que ya tengas. Para obtener más información, consulta Implementar imágenes de contenedor.

Ejemplo: Aplicación de un solo servicio

En el siguiente ejemplo se muestra un archivo compose.yaml de un servicio web que usa una imagen de contenedor prediseñada.

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

Desplegar los servicios

  1. Para desplegar los servicios, ejecuta el comando gcloud beta run compose up:

    gcloud beta run compose up compose.yaml

  2. Responde y a las peticiones para instalar los componentes necesarios o habilitar las APIs.

  3. Opcional: Haz público tu servicio si quieres permitir el acceso sin autenticar al servicio.

    Después de la implementación, se muestra la URL del servicio de Cloud Run. Copia esta URL y pégala en el navegador para ver el contenedor en ejecución. Puedes inhabilitar la autenticación predeterminada desde la consola Google Cloud .

Desplegar desde el código fuente con Compose

Define tus servicios en un archivo compose.yaml y despliégalos compilando el código fuente. Para obtener más información, consulta Implementar servicios a partir de código fuente.

Ejemplo: Aplicación de un solo servicio

En el siguiente ejemplo se muestra un archivo compose.yaml de un servicio web que se compila a partir de la fuente del directorio actual.

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

Desplegar los servicios

  • En el directorio de tu proyecto, crea un archivo compose.yaml con tus definiciones de servicio.

    1. Para desplegar los servicios, ejecuta el comando gcloud beta run compose up:

      gcloud beta run compose up compose.yaml
    2. Responde y a las peticiones para instalar los componentes necesarios o habilitar las APIs.

    3. Opcional: Haz público tu servicio si quieres permitir el acceso sin autenticación al servicio.

    Después de la implementación, se muestra la URL del servicio de Cloud Run. Copia esta URL y pégala en el navegador para ver el contenedor en ejecución. Puedes inhabilitar la autenticación predeterminada desde la consola Google Cloud .

Funciones compatibles

Cuando despliegas con un archivo compose.yaml, Cloud Run puede aprovisionar automáticamente otros recursos Google Cloud definidos en tu archivo Compose. Si se necesitan recursos, Cloud Run te pedirá permiso antes de crearlos.

Cloud Run admite el siguiente subconjunto de funciones de Compose:

Campo de redacción Asignación y descripción de Cloud Run
services

Los servicios se asignan a contenedores individuales en el servicio de Cloud Run implementado.

volumes

Parcialmente compatible. Traduce los montajes de bind, volume y tmpfs a sus equivalentes en Cloud Run.

secrets

Compatible. Usar Secret Manager.

configs

Compatible. Usar Cloud Storage.

build

Cloud Build compila el contenedor con el contexto de compilación, lo etiqueta y lo envía al repositorio cloud-run-source-deploy de Artifact Registry.

image

Despliega una imagen de contenedor prediseñada desde un registro compatible. Úsalo si tienes una imagen prediseñada. Solo se admiten imágenes de Docker Hub y Artifact Registry. En el caso de las imágenes personalizadas, puedes enviarlas a Artifact Registry y usarlas.

ports

Una lista de asignaciones de puertos, como 8080:8080, que determinan el contenedor de entrada.

expose

Una lista de puertos que se van a exponer, pero no a publicar, como 3000, para asegurarse de que los servicios dependientes tengan un puerto disponible para la comunicación.

depends_on

Define el orden de inicio de los contenedores. De esta forma, se asegura de que cualquier servicio de la lista run-compose tenga un puerto definido por ports o expose para que otros contenedores puedan comunicarse con él.

cpu_count/cpus

Una sugerencia que se usa para definir los límites de CPU y memoria de Cloud Run, que asigna recursos automáticamente según la siguiente lógica:

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

Define el nombre del contenedor para la resolución de dependencias. Si no se especifica, se usa el nombre del servicio de forma predeterminada.

environment

Transfiere variables de entorno al contenedor correspondiente en Cloud Run.

command

Anula el comando predeterminado del contenedor, declarado por el contenedor, asignándolo al atributo args en Cloud Run. Por ejemplo, la instrucción CMD de un Dockerfile.

entrypoint

Compatible.

env_file

Compatible.

x-google-cloudrun:ingress-container

(Extensión) Añade esta extensión específica de Google a un servicio y configúrala como true para marcarla como el contenedor de entrada que recibe todo el tráfico externo.

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

(Extensión) Añade esta extensión específica de Google a un volumen y configúrala como in-memory en lugar del volumen predeterminado respaldado por Cloud Storage.

Secretos asignados a Secret Manager

Si el archivo compose.yaml define secrets, la CLI de gcloud aprovisiona secretos de Secret Manager para almacenar estos datos.

Volúmenes y configuraciones asignados a Cloud Storage

Si el archivo compose.yaml define volumes o configs de nivel superior, la CLI de gcloud aprovisiona un segmento de Cloud Storage para gestionar estos datos. Se crea un solo contenedor por cada implementación, y se usan carpetas para separar los volúmenes y las configuraciones.

  • Volúmenes con nombre: se crea una carpeta vacía correspondiente al nombre del volumen en el contenedor.
  • Montajes de enlace: en el caso de los montajes de enlace, Cloud Run sube el contenido del directorio de origen local a una carpeta del segmento antes de la implementación.
  • Configuraciones: por cada configuración definida con una fuente file:, Cloud Run sube el contenido del archivo local a una carpeta del bucket.

Roles obligatorios

Durante el despliegue, Cloud Run concede automáticamente a la identidad de servicio del servicio desplegado los roles necesarios para acceder a los recursos aprovisionados:

  • Contenedor de Cloud Storage: roles/storage.objectUser
  • Secretos de Secret Manager: roles/secretmanager.secretAccessor

Comunicación entre contenedores de la misma instancia

Cloud Run añade una entrada al archivo /etc/hosts de cada contenedor. Esta entrada asigna los nombres de servicio de tu archivo compose.yaml a sus direcciones IP internas, lo que permite que los servicios se comuniquen entre sí mediante sus nombres de servicio.

Siguientes pasos