Configurar contêineres

Nesta página, descrevemos como configurar a porta do contêiner, o comando entrypoint e os argumentos dos serviços do Cloud Run.

Quando o Cloud Run inicia um contêiner, ele executa o comando entrypoint padrão e os argumentos de comando padrão da imagem. Se você quiser modificar os argumentos de ponto de entrada e comando padrão da imagem, use os campos command e args na configuração do contêiner. O campo command especifica o comando real executado pelo contêiner. O campo args especifica os argumentos passados para esse comando.

Funções exigidas

Para receber as permissões necessárias para configurar e implantar os serviços do Cloud Run, peça ao administrador para conceder a você os seguintes papéis do IAM:

Para uma lista de papéis e permissões do IAM associados ao Cloud Run, consulte Papéis do IAM do Cloud Run e Permissões do IAM do Cloud Run. Se o serviço do Cloud Run interage com as APIs do Google Cloud, como as bibliotecas de cliente do Cloud, consulte o guia de configuração de identidade de serviço. Para mais informações sobre como conceder papéis, consulte permissões de implantação e gerenciar acesso.

Configurar a porta do contêiner

Qualquer mudança na configuração leva à criação de uma nova revisão. As próximas revisões também recebem automaticamente essa configuração, a menos que você faça atualizações explícitas para alterá-la.

Para os serviços do Cloud Run, o Cloud Run injeta a variável de ambiente PORT no contêiner. Se você implantar vários contêineres em um serviço, esse será o contêiner de entrada. O contêiner detecta na porta definida pela variável de ambiente PORT, em vez de em uma porta específica fixada no código. Se isso não for possível, configure a detecção para ocorrer na porta que envia solicitações ao contêiner. As configurações de porta não se aplicam aos jobs do Cloud Run.

Console

  1. No console do Google Cloud, acesse o Cloud Run:

    Acessar o Cloud Run

  2. Clique em Implantar contêiner e selecione Serviço para configurar um novo serviço. Se você estiver configurando um serviço atual, clique nele e em Editar e implantar nova revisão.

  3. Ao configurar um novo serviço, preencha a página inicial de configurações de serviço conforme preferir e clique em Contêineres, volumes, redes e segurança para expandir essa página.

  4. Clique na guia Contêiner.

    imagem

    • Especifique a porta em que você quer que as solicitações sejam enviadas, se não for o valor padrão de 8080. Isso também define a variável de ambiente PORT.
  5. Clique em Criar ou Implantar.

gcloud

É possível atualizar a configuração de porta de um serviço usando o seguinte comando:

gcloud run services update SERVICE --port PORT

Substituir

  • SERVICE pelo nome do serviço;
  • PORT pela porta para enviar solicitações. Observe que a porta padrão é 8080.

Também é possível configurar portas durante a implantação usando o comando:

gcloud run deploy --image IMAGE_URL --port PORT

IMAGE_URL por uma referência à imagem de contêiner, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest; Se você usa o Artifact Registry, o repositório REPO_NAME já precisará ter sido criado. O URL tem o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

YAML

  1. Se você estiver criando um novo serviço, pule esta etapa. Se você estiver atualizando um serviço existente, faça o download da configuração YAML correspondente:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Atualize o atributo containerPort::

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION
        spec:
          containers:
          - image: IMAGE_URL
            ports:
            - containerPort: PORT
    

    Substitua:

    • SERVICE pelo nome do serviço do Cloud Run;
    • IMAGE_URL por uma referência à imagem de contêiner. Por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se você usa o Artifact Registry, o repositório REPO_NAME já precisará ter sido criado. O URL tem o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • PORT pela porta para enviar solicitações
    • REVISION por um novo nome de revisão ou excluí-lo (se houver). Se você fornecer um novo nome de revisão, ele precisará atender aos seguintes critérios:
      • Começa com SERVICE-
      • Contém apenas letras minúsculas, números e -
      • Não termina com um -
      • Não excede 63 caracteres
      .
  3. Substitua o serviço pela nova configuração usando o seguinte comando:

    gcloud run services replace service.yaml

Configurar ponto de entrada e argumentos

Qualquer mudança na configuração leva à criação de uma nova revisão. As próximas revisões também recebem automaticamente essa configuração, a menos que você faça atualizações explícitas para alterá-la.

O comando e os argumentos do contêiner especificados modificam as imagens padrão ENTRYPOINT e CMD.

É possível definir comandos e argumentos de ponto de entrada usando o console do Google Cloud, a CLI do Google Cloud ou um arquivo YAML ao criar um novo serviço ou implantar uma nova revisão:

Console

  1. No console do Google Cloud, acesse o Cloud Run:

    Acessar o Cloud Run

  2. Clique em Implantar contêiner e selecione Serviço para configurar um novo serviço. Se você estiver configurando um serviço atual, clique nele e em Editar e implantar nova revisão.

  3. Ao configurar um novo serviço, preencha a página inicial de configurações de serviço conforme preferir e clique em Contêineres, volumes, redes e segurança para expandir essa página.

  4. Clique na guia Contêiner.

    imagem

    • Especifique o comando que você quer que o contêiner execute, se não for o definido no contêiner, e, opcionalmente, especifique os argumentos para o comando entrypoint.
  5. Clique em Criar ou Implantar.

gcloud

Para atualizar o comando e os argumentos de inicialização de um serviço, faça o seguinte:

gcloud run services update SERVICE --command COMMAND --args ARG1,ARG-N

Substituir

  • COMMAND pelo comando com que o contêiner será iniciado se você não estiver usando o comando padrão;
  • ARG1 pelo argumento que você está enviando para o comando do contêiner. Use uma lista delimitada por vírgulas para mais de um argumento.

Para especificar o ponto de entrada e os argumentos durante a implantação de um serviço novo ou existente:

gcloud run deploy --image IMAGE_URL --command COMMAND --args ARG1,ARG-N

IMAGE_URL por uma referência à imagem de contêiner, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest; Se você usa o Artifact Registry, o repositório REPO_NAME já precisará ter sido criado. O URL tem o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

Para limpar os comandos e argumentos do ponto de entrada que você definiu (restaurar para os padrões do contêiner), forneça strings vazias da seguinte maneira:

gcloud run deploy --image IMAGE_URL --command "" --args ""

YAML

  1. Se você estiver criando um novo serviço, pule esta etapa. Se você estiver atualizando um serviço existente, faça o download da configuração YAML correspondente:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Atualize os atributos command e args:

    spec:
      containers:
      - image: IMAGE_URL
        command:
        - COMMAND
        args:
        - "ARG1"
        - "ARG-N"
    

    Substituir

    • IMAGE_URL por uma referência à imagem de contêiner. Por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se você usa o Artifact Registry, o repositório REPO_NAME já precisará ter sido criado. O URL tem o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • COMMAND pelo comando com que o contêiner será iniciado se você não estiver usando o comando padrão.
    • ARG1 pelo argumento que você está enviando para o comando do contêiner. Se você usar vários argumentos, especifique cada um em uma linha própria, por exemplo, ARG-N, como mostrado abaixo.
  3. Substitua o serviço pela nova configuração usando o seguinte comando:

    gcloud run services replace service.yaml

Terraform

Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.

O recurso google_cloud_run_v2_service a seguir especifica um comando e argumentos. Substitua /server pelo comando usado para iniciar o contêiner e adicione os argumentos necessários à matriz args.

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-containers"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"

      # Container "entry-point" command
      command = ["/server"]

      # Container "entry-point" args
      args = []
    }
  }
}

Usar sinais de igual ou vírgulas em argumentos

Se você usar sinais de igual nos argumentos, insira-os usando o seguinte formato:

gcloud run deploy  \
  --args="--repo-allowlist=github.com/example/example_demo"

Se os argumentos usarem vírgulas, consulte Como configurar variáveis de ambiente para mais detalhes sobre como fazer escape.

Configurar ordem de inicialização do contêiner para implantações sidecar

Para especificar a ordem de inicialização do contêiner em uma implantação sidecar, use o recurso de dependências de contêiner. Especifique os contêineres que têm dependências e liste os contêineres de que dependem: eles são iniciados primeiro. Os contêineres sem dependências são sempre iniciados primeiro e simultaneamente.

Use sondagens de verificação de integridade de inicialização se quiser usar esse recurso com êxito. A sondagem de inicialização permite que o Cloud Run inspecione a integridade de um contêiner dependente, garantindo que ele seja aprovado antes de iniciar o próximo contêiner. Se você não usar verificações de integridade, os contêineres serão iniciados na ordem especificada, mesmo que os contêineres de que eles dependem não sejam iniciados.

Os contêineres de entrada têm uma sondagem de verificação de integridade de inicialização padrão.

É possível usar o console do Google Cloud, a CLI do Google Cloud ou o YAML para especificar a ordem de inicialização:

Console

  1. No console do Google Cloud, acesse a página do Cloud Run:

    Acessar o Cloud Run

    • No caso de um serviço atual, clique nele na lista e selecione Editar e implantar uma nova revisão para exibir o formulário de implantação de revisão.
    • No caso de um novo serviço, clique em Implantar contêiner e selecione Serviço para mostrar o formulário Criar serviço.
  2. Para um novo serviço, especifique o nome do serviço, o URL do contêiner de entrada, a alocação da CPU, o controle de entrada e a autenticação. Na guia Contêineres, volumes, rede, segurança, faça o seguinte:

    1. Configure o contêiner de entrada.
    2. Para adicionar cada um dos outros contêineres que você está implantando, clique em Adicionar contêiner.
    3. Para todos os contêineres, exceto o de entrada, configure uma verificação de integridade de inicialização. Os contêineres de entrada têm uma verificação de integridade de inicialização padrão.
    4. Se um contêiner precisar que outros contêineres sejam iniciados antes de ser iniciado, use o menu Ordem de inicialização do contêiner para selecionar os contêineres que precisam ser iniciados primeiro.
  3. Para um serviço atual, siga estas etapas:

    1. Para todos os contêineres, exceto o de entrada, configure uma verificação de integridade de inicialização. Os contêineres de entrada têm uma verificação de integridade de inicialização padrão.
    2. Cada contêiner é mostrado com o próprio menu Ordem de inicialização do contêiner. Se um contêiner precisar que outros contêineres sejam iniciados antes de ser iniciado, use o menu Ordem de inicialização do contêiner para selecionar os contêineres que precisam ser iniciados primeiro.
  4. Conclua as outras configurações necessárias e clique em Criar para um novo serviço ou Implantar para um serviço existente. Aguarde a conclusão da implantação.

gcloud

Antes de usar a CLI do Google Cloud para especificar a ordem de inicialização, configure uma verificação de integridade de inicialização para todos os contêineres, exceto o de entrada. Os contêineres de entrada têm uma verificação de integridade de inicialização padrão. Não é possível configurar verificações de integridade usando a CLI do Google Cloud.

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Para implantar vários contêineres em um serviço com uma ordem de inicialização especificada, execute o comando:

gcloud run deploy SERVICE \
     --container CONTAINER_1_NAME --image='INGRESS_IMAGE' --port='CONTAINER_PORT' \
     --container CONTAINER_2_NAME --image='SIDECAR_IMAGE' --depends-on=CONTAINER_1_NAME \
     --container CONTAINER_3_NAME --image='SIDECAR_IMAGE' --depends-on=CONTAINER_1_NAMECONTAINER_2_NAME
  • Substitua SERVICE pelo nome do serviço que você está implantando. É possível omitir esse parâmetro inteiramente, mas será solicitado o nome do serviço, se você omiti-lo.
  • Substitua CONTAINER_PORT pela porta em que o contêiner de entrada detecta solicitações recebidas. Ao contrário de um serviço de contêiner único, para um serviço com arquivos secundários, não há uma porta padrão para o contêiner de entrada. É necessário configurar explicitamente a porta do contêiner para o contêiner de entrada, e apenas um contêiner pode expor a porta.
  • Substitua INGRESS_IMAGE por uma referência à imagem do contêiner que vai receber solicitações, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest.
  • SIDECAR_IMAGE por uma referência à imagem de contêiner de arquivo secundário

    Se você quiser configurar cada contêiner no comando de implantação, forneça a configuração de cada contêiner após os parâmetros container.

YAML

  1. Se você estiver criando um novo serviço, pule esta etapa. Se você estiver atualizando um serviço existente, faça o download da configuração YAML correspondente:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Atualize o atributo container-dependencies:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/container-dependencies: '{"CONTAINER1":["CONTAINER2"], "CONTAINER3":["CONTAINER1","CONTAINER2"]}'
    

    Substituir

    • CONTAINER1 pelo nome do primeiro contêiner que depende de um ou mais contêineres. Observe que é possível definir o nome do contêiner no YAML. O Cloud Run gerará um nome automaticamente se nenhum for especificado.
    • CONTAINER2 pelo nome do contêiner que precisa ser iniciado antes de CONTAINER1.
    • CONTAINER3 pelo nome do segundo contêiner que depende de um ou mais contêineres.

    No exemplo do snippet YAML, CONTAINER2 é iniciado primeiro, CONTAINER1 é iniciado em seguida e CONTAINER3 é iniciado por último.

  3. Substitua o serviço pela nova configuração usando o seguinte comando:

    gcloud run services replace service.yaml

Ver configurações do contêiner

Para ver as configurações atuais do contêiner para seu serviço do Cloud Run, faça o seguinte:

Console

  1. No console do Google Cloud, acesse o Cloud Run:

    Acessar o Cloud Run

  2. Clique no serviço de seu interesse para abrir a página Detalhes do serviço.

  3. Clique na guia Revisões.

  4. No painel de detalhes à direita, a configuração de contêiner está listada na guia Contêiner.

gcloud

  1. Use o comando a seguir:

    gcloud run services describe SERVICE
  2. Localize a configuração de contêiner na configuração retornada.