Implementa servicios con Compose

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

Puedes realizar implementaciones en Cloud Run con un archivo de Compose de las siguientes maneras:

Usar Compose para realizar implementaciones 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 para tus aplicaciones locales y las implementadas.

Para administrar entornos de producción en un entorno de infraestructura como código (IaC), recomendamos usar Terraform.

Limitaciones

  • La implementación de Compose implementa un solo servicio de Cloud Run con varios contenedores.
  • La composición de la implementación solo traduce un subconjunto de las funciones compatibles de Cloud Run.
  • De forma predeterminada, los servicios creados con Compose se establecen en 1 instancia máxima.
  • Si bien simplifica la implementación, Cloud Run Compose deploy no reemplaza una estrategia integral de infraestructura como código para los entornos de producción.

Implementa servicios desde imágenes de contenedor con Compose

Define tus servicios en un archivo compose.yaml y, luego, impleméntalos desde imágenes de contenedor existentes. Para obtener más información, consulta Implementa imágenes de contenedor.

Ejemplo: Aplicación de un solo servicio

En el siguiente ejemplo, se muestra un archivo compose.yaml para un servicio web que usa una imagen de contenedor compilada previamente.

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

Implementa los servicios

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

    gcloud beta run compose up compose.yaml

  2. Responde y a cualquier solicitud para instalar los componentes obligatorios o habilitar las APIs.

  3. Opcional: Haz que tu servicio sea público si deseas permitir el acceso sin autenticación.

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

Implementa desde la fuente con Compose

Define tus servicios en un archivo compose.yaml y, luego, compílalos a partir del código fuente para implementarlos. Para obtener más información, consulta Implementa servicios desde el código fuente.

Ejemplo: Aplicación de un solo servicio

En el siguiente ejemplo, se muestra un archivo compose.yaml para un servicio web que se compila a partir del código fuente en el directorio actual.

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

Implementa los servicios

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

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

      gcloud beta run compose up compose.yaml
    2. Responde y a cualquier solicitud para instalar los componentes obligatorios o habilitar las APIs.

    3. Opcional: Haz que tu servicio sea público si deseas permitir el acceso sin autenticación.

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

Funciones admitidas

Cuando realizas la implementación con un archivo compose.yaml, Cloud Run puede aprovisionar automáticamente otros recursos de Google Cloud según se definan en tu archivo de Compose. Si se requieren recursos, Cloud Run te pedirá tu consentimiento 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

Es parcialmente compatible. Traduce los parámetros de activación bind, volume y tmpfs en sus equivalentes de Cloud Run.

secrets

Compatible. Usar Secret Manager

configs

Compatible. Usa 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 en Artifact Registry.

image

Implementa una imagen de contenedor compilada previamente desde un registro compatible. Úsalo si tienes una imagen compilada previamente. Solo admite imágenes de Docker Hub y Artifact Registry. En el caso de las imágenes personalizadas, puedes enviarlas a Artifact Registry y usarlas.

ports

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

expose

Es una lista de puertos para exponer, pero no publicar, como 3000, para garantizar que los servicios dependientes tengan un puerto disponible para la comunicación.

depends_on

Define el orden de inicio del contenedor. Esto garantiza que cualquier servicio incluido en la lista de run-compose tenga un puerto definido por ports o expose para que otros contenedores puedan comunicarse con él.

cpu_count/cpus

Es una sugerencia que se usa para establecer los límites de CPU y memoria de Cloud Run, y 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

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

environment

Pasa 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, una instrucción CMD de Dockerfile.

entrypoint

Compatible.

env_file

Compatible.

x-google-cloudrun:ingress-container

(Extensión) Agrega 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) Agrega esta extensión específica de Google a un volumen y configúrala en in-memory en lugar del volumen predeterminado respaldado por Cloud Storage.

Secrets asignados a Secret Manager

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

Volúmenes y configuraciones asignados a Cloud Storage

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

  • Volúmenes con nombre: En el bucket, se crea una carpeta vacía que corresponde al nombre del volumen.
  • Activaciones: En el caso de las activaciones, Cloud Run sube el contenido del directorio del código fuente local a una carpeta del bucket antes de la implementación.
  • Configs: Para cada configuración definida con una fuente file:, Cloud Run sube el contenido del archivo local a una carpeta del bucket.

Roles obligatorios

Durante la implementación, Cloud Run otorga automáticamente a la identidad del servicio implementado los roles necesarios para acceder a los recursos aprovisionados:

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

Comunicación entre contenedores de la misma instancia

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

¿Qué sigue?