Implantar serviços usando o Compose

Nesta página, descrevemos como implantar serviços no Cloud Run usando um arquivo baseado na especificação do Compose.

É possível fazer a implantação no Cloud Run com um arquivo Compose das seguintes maneiras:

Usar o Compose para fazer implantações no Cloud Run é ideal para o desenvolvimento e simplifica a transição do ambiente local para um ambiente de nuvem. Ele permite manter um formato de configuração consistente para aplicativos locais e implantados.

Para gerenciar ambientes de produção em um ambiente de infraestrutura como código (IaC), recomendamos usar o Terraform.

Limitações

  • A implantação do Compose implanta um único serviço do Cloud Run com vários contêineres.
  • A implantação do Compose traduz apenas um subconjunto de recursos compatíveis do Cloud Run.
  • Os serviços criados com o Compose são definidos por padrão como 1 instância máxima.
  • Embora simplifique a implantação, o Cloud Run Compose deploy não substitui uma estratégia abrangente de infraestrutura como código para ambientes de produção.

Implantar serviços de imagens de contêiner com o Compose

Defina seus serviços em um arquivo compose.yaml e implante-os de imagens de contêiner existentes. Para mais informações, consulte Implantar imagens de contêiner.

Exemplo: aplicativo de serviço único

O exemplo a seguir mostra um arquivo compose.yaml para um serviço da Web que usa uma imagem de contêiner pré-criada.

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

Implante os serviços

  1. Para implantar os serviços, execute o comando gcloud beta run compose up:

    gcloud beta run compose up compose.yaml

  2. Responda y a todas as solicitações para instalar os componentes necessários ou ativar as APIs.

  3. Opcional: torne seu serviço público se você quiser permitir o acesso não autenticado ao serviço.

    Após a implantação, o URL do serviço do Cloud Run é exibido. Copie esse URL e cole no navegador para ver o contêiner em execução. É possível desativar a autenticação padrão no console do Google Cloud .

Implantar a partir da origem com o Compose

Defina seus serviços em um arquivo compose.yaml e implante-os criando com base no código-fonte. Para mais informações, consulte Implantar serviços do código-fonte.

Exemplo: aplicativo de serviço único

O exemplo a seguir mostra um arquivo compose.yaml para um serviço da Web que é criado da origem no diretório atual.

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

Implante os serviços

  • No diretório do projeto, crie um arquivo compose.yaml com as definições de serviço.

    1. Para implantar os serviços, execute o comando gcloud beta run compose up:

      gcloud beta run compose up compose.yaml
    2. Responda y a todas as solicitações para instalar os componentes necessários ou ativar APIs.

    3. Opcional: torne seu serviço público se você quiser permitir o acesso não autenticado ao serviço.

    Após a implantação, o URL do serviço do Cloud Run é exibido. Copie esse URL e cole no navegador para ver o contêiner em execução. É possível desativar a autenticação padrão no console do Google Cloud .

Recursos compatíveis

Ao fazer a implantação usando um arquivo compose.yaml, o Cloud Run pode provisionar automaticamente outros recursos Google Cloud , conforme definido no arquivo do Compose. Se forem necessários recursos, o Cloud Run vai pedir sua permissão antes de criá-los.

O Cloud Run é compatível com o seguinte subconjunto de recursos do Compose:

Campo de composição Mapeamento e descrição do Cloud Run
services

Os serviços são mapeados para contêineres individuais no serviço implantado do Cloud Run.

volumes

Parcialmente compatível. Traduz as montagens bind, volume e tmpfs em equivalentes do Cloud Run.

secrets

Compatível. Ao usar o Secret Manager.

configs

Compatível. Usar o Cloud Storage.

build

O Cloud Build cria o contêiner usando o contexto de build, marcando e enviando para o repositório cloud-run-source-deploy no Artifact Registry.

image

Implanta uma imagem de contêiner pré-criada de um registro compatível. Use se você tiver uma imagem pré-criada. Aceita apenas imagens do Docker Hub e do Artifact Registry. Para imagens personalizadas, é possível enviar imagens para o Artifact Registry e usá-las.

ports

Uma lista de mapeamentos de portas, como 8080:8080, que determinam o contêiner de entrada.

expose

Uma lista de portas a serem expostas, mas não publicadas, como 3000, para garantir que os serviços dependentes tenham uma porta disponível para comunicação.

depends_on

Define a ordem de inicialização do contêiner. Isso garante que qualquer serviço listado em run-compose tenha uma porta definida por ports ou expose para que outros contêineres possam se comunicar com ele.

cpu_count / cpus

Uma dica usada para definir limites de CPU e memória do Cloud Run, alocando recursos automaticamente de acordo com a seguinte lógica:

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

Define o nome do contêiner para resolução de dependências, usando o nome do serviço como padrão se não for especificado.

environment

Transmite variáveis de ambiente para o contêiner correspondente no Cloud Run.

command

Substitui o comando padrão do contêiner, declarado por ele, mapeando para o atributo args no Cloud Run. Por exemplo, uma instrução CMD de um Dockerfile.

entrypoint

Compatível.

env_file

Compatível.

x-google-cloudrun:ingress-container

(Extensão) Adicione essa extensão específica do Google a um serviço e defina como true para marcar como o contêiner de entrada que recebe todo o tráfego externo.

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

(Extensão) Adicione essa extensão específica do Google a um volume e defina como in-memory em vez do volume padrão com suporte do Cloud Storage.

Secrets mapeados para o Secret Manager

Se o arquivo compose.yaml definir secrets, a CLI gcloud provisionará secrets do Secret Manager para armazenar esses dados.

Volumes e configurações mapeados para o Cloud Storage

Se o arquivo compose.yaml definir volumes ou configs de nível superior, a CLI gcloud vai provisionar um bucket do Cloud Storage para gerenciar esses dados. Um único bucket é criado por implantação, usando pastas para separar volumes e configurações.

  • Volumes nomeados: uma pasta vazia correspondente ao nome do volume é criada no bucket.
  • Montagens de vinculação: para montagens de vinculação, o Cloud Run faz upload do conteúdo do diretório de origem local para uma pasta no bucket antes da implantação.
  • Configurações: para cada configuração definida com uma origem file:, o Cloud Run envia o conteúdo do arquivo local para uma pasta no bucket.

Funções exigidas

Durante a implantação, o Cloud Run concede automaticamente à identidade do serviço implantado os papéis necessários para acessar os recursos provisionados:

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

Comunicação entre contêineres da mesma instância

O Cloud Run adiciona uma entrada ao arquivo /etc/hosts em cada contêiner. Essa entrada mapeia os nomes de serviço do arquivo compose.yaml para os endereços IP internos deles, permitindo que os serviços se comuniquem entre si usando os nomes de serviço.

A seguir