É possível configurar uma instância do Compute Engine ou um modelo de instância para implantar e iniciar um contêiner do Docker. O Compute Engine fornece uma imagem atualizada do Container-Optimized OS (COS) com o Docker instalado e inicia o contêiner quando a instância é iniciada.
Antes de começar
- Se você não está familiarizado com contêineres, leia O que são contêineres e quais são seus benefícios.
- Se você não conhece o Docker, leia a documentação do Docker.
- Leia sobre o Container-Optimized OS.
- Leia sobre grupos de instâncias gerenciadas (MIGs, na sigla em inglês).
-
Configure a autenticação, caso ainda não tenha feito isso.
A autenticação é
o processo de verificação da sua identidade para acesso a serviços e APIs do Google Cloud .
Para executar códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no
Compute Engine selecionando uma das seguintes opções:
Select the tab for how you plan to use the samples on this page:
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
-
Como implantar contêineres em instâncias e MIGs
Ao implantar contêineres no Compute Engine, você simplifica a implantação de apps e controla a infraestrutura da instância.
- Gerencie instâncias que executam contêineres da mesma forma que você trataria qualquer outra ao configurar e gerenciar a infraestrutura do Compute Engine.
- Use ferramentas e processos conhecidos, como a Google Cloud CLI ou a API Compute Engine, para gerenciar instâncias com contêineres.
- Crie serviços escalonáveis usando grupos de instâncias gerenciadas (MIGs, na sigla em inglês) que executam contêineres. Eles oferecem recursos como recuperação e escalonamento automáticos, atualizações contínuas, implantações em várias zonas e balanceamento de carga.
Como alternativa, considere a implantar no Google Kubernetes Engine para:
- executar um grande número de microsserviços;
- acelerar o tempo de inicialização do contêiner;
- aproveitar a orquestração automática do Kubernetes, incluindo upgrades, reparo de nó e escalonamento automáticos.
Executar cada microsserviço em uma instância separada no Compute Engine pode levar o sistema operacional a sobrecarregar grande parte do seu custo. O Google Kubernetes Engine permite implantar vários contêineres e grupos de contêineres para cada instância, o que pode alocar recursos de instâncias do host com mais eficiência a microsserviços com um espaço menor.
Como funciona a implantação de contêineres no Compute Engine
Os métodos comuns de implantação de software em uma instância do Compute Engine incluem:
- Implantar o software durante a inicialização da instância usando um script de inicialização ou o cloud-init (em inglês).
- criar uma imagem de disco de inicialização personalizada com o software pré-instalado.
Os dois métodos na lista anterior combinam as tarefas de configuração do app e do ambiente do sistema operacional. Como desenvolvedor, você precisa acompanhar e resolver cuidadosamente quaisquer dependências do tempo de execução. Por exemplo, se dois apps em execução em uma VM usarem versões diferentes da mesma biblioteca, você precisa instalar as duas versões e direcioná-las por meio das variáveis do sistema.

Como alternativa, é possível implantar o software em um contêiner em uma instância ou em um MIG. Um contêiner tem os softwares do aplicativo e as bibliotecas necessárias, além de ser isolado dos aplicativos e bibliotecas do SO. Um contêiner pode ser movido entre os ambientes de implantação sem precisar lidar com versões conflitantes da biblioteca no contêiner e no SO dele.

Você verá a seguir como implantar um contêiner no Compute Engine:
- Você agrupa o aplicativo e as bibliotecas necessárias em uma imagem do Docker e a publica no Artifact Registry ou em um registro de terceiros, como o Docker Hub.
- Especifique um nome de imagem do Docker e a configuração
docker run
ao criar uma instância ou um modelo para um MIG.
Depois que você faz uma solicitação para criar uma instância, o Compute Engine executa as seguintes tarefas:
- O Compute Engine cria uma instância de VM que usa uma imagem do Container-Optimized OS fornecida pelo Google. Essa imagem inclui um ambiente de execução do Docker e um outro software responsável por iniciar o contêiner.
- O Compute Engine armazena as configurações do contêiner nos metadados da instância, na chave de metadados
gce-container-declaration
. - Quando a VM é iniciada, a imagem do Container-Optimized OS usa a
configuração de comando
docker run
armazenada nos metadados da instância, extrai a imagem do contêiner do repositório e inicia o contêiner.

Limitações
- Só é possível implantar um contêiner para cada instância. Considere usar o Google Kubernetes Engine caso precise implantar vários contêineres por instância.
Só é possível implantar contêineres de um repositório público ou de um repositório particular do Artifact Registry ou do Container Registry que pode ser acessado. Outros repositórios particulares não são compatíveis.
Consulte a documentação de controle de acesso do Artifact Registry ou do Container Registry para informações sobre permissões de registro particular.
Não é possível mapear as portas de uma instância para as portas do contêiner (opção
-p
do Docker). Para ativar o acesso aos contêineres, consulte Como publicar portas de contêiner.Só é possível usar as imagens do Container-Optimized OS com esse método de implantação.
Esse recurso só pode ser usado no console do Google Cloud ou na CLI do Google Cloud, não com a API.
Como preparar o contêiner para a implantação
Escolha uma das abordagens a seguir para tornar sua imagem de contêiner acessível ao Compute Engine:
- Faça upload da imagem do Docker para o Artifact Registry.
- Use qualquer imagem de contêiner disponível publicamente no Docker Hub (em inglês) ou em outros registros.
Como implantar um contêiner em uma nova instância
É possível implantar um contêiner em uma nova instância de VM usando o Console do Google Cloud ou a CLI do Google Cloud.
No exemplo a seguir, um contêiner de uma imagem do Nginx
Docker fornecida pelo Google, https://gcr.io/cloud-marketplace/google/nginx1:latest
, é implantado em uma
instância de VM. Para usar uma imagem Docker diferente, substitua a imagem Nginx Docker
pela que você quer nas etapas a seguir.
Se solicitado, selecione o projeto e clique em Continuar. A página Criar uma instância aparece e mostra o painel Configuração da máquina.
No painel Configuração da máquina, acesse Nome e especifique um nome para a instância. Saiba mais em Convenção de nomenclatura de recursos.
No menu de navegação, clique em SO e armazenamento. O painel Sistema operacional e armazenamento aparece.
Acesse a seção Contêiner e clique em Implantar contêiner. No painel Configure container que aparece, faça o seguinte:
- Especifique a Imagem do contêiner para usar. Confira os exemplos a seguir:
- Para selecionar uma imagem de contêiner NGINX 1.12 no Cloud Launcher,
especifique
gcr.io/cloud-marketplace/google/nginx1:1.12
. - Para implantar uma imagem de contêiner Apache do Docker Hub, sempre especifique
o nome completo da imagem do Docker, como
docker.io/httpd:2.4
.
- Para selecionar uma imagem de contêiner NGINX 1.12 no Cloud Launcher,
especifique
- Opcional. Especifique outros parâmetros de configuração. Para mais informações sobre as opções de configuração de contêineres, consulte Como configurar opções para executar o contêiner.
- Para terminar de configurar o contêiner e retornar ao painel Sistema operacional e armazenamento, clique em Selecionar.
- Especifique a Imagem do contêiner para usar. Confira os exemplos a seguir:
Opcional: especifique outras opções de configuração. Para mais informações, consulte Opções de configuração durante a criação de instâncias.
Para concluir a criação da instância, clique em Criar.
Depois de criar a instância, o Compute Engine a inicia e lança o contêiner.
-
In the Google Cloud console, 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.
Execute o
gcloud compute instances create-with-container
comando:gcloud compute instances create-with-container
INSTANCE_NAME \ --container-image=CONTAINER_IMAGE Substitua:
INSTANCE_NAME
: nome da nova instância.CONTAINER_IMAGE
: nome da imagem do contêiner.
Por exemplo, o comando a seguir cria uma instância chamada
nginx-vm
, que inicia e executa a imagem do contêiner:gcr.io/cloud-marketplace/google/nginx1:1.12
gcloud compute instances create-with-container nginx-vm \ --container-image=gcr.io/cloud-marketplace/google/nginx1:1.12
Para implantar uma imagem de contêiner Apache do Docker Hub, sempre especifique o nome completo da imagem do Docker:
docker.io/httpd:2.4
Como atualizar um contêiner em uma instância
É possível atualizar uma imagem do Docker e as opções de configuração para executar o contêiner em uma instância usando o console do Google Cloud ou a CLI do Google Cloud.
Quando você atualiza um contêiner em execução, o Compute Engine executa duas etapas:
- Atualiza a declaração do contêiner na instância. O Compute Engine armazena a declaração de contêiner atualizada nos metadados da instância sob a chave de metadados
gce-container-declaration
. - Interrompe e reinicia a instância para ativar a configuração atualizada. Isso só acontece se a instância estiver em execução. Se ela estiver interrompida, o Compute Engine atualiza a declaração do contêiner e mantém esse estado da instância. A instância faz o download da nova imagem e inicia o contêiner na inicialização.
Acesse a página Instâncias da VM.
Clique no nome da instância para atualizar.
Na página de detalhes da instância, clique em Editar.
Especifique a nova imagem do contêiner e atualize as opções para executá-lo conforme necessário.
Para salvar as alterações, clique em Salvar e reiniciar. O Compute Engine salva as alterações e reinicia a instância automaticamente para aplicar a atualização. Após a reinicialização da instância, será feito o download da nova imagem e a inicialização do contêiner com a configuração atualizada.
Use o comando gcloud compute instances update-container
para atualizar a declaração do contêiner. Por exemplo:
gcloud compute instances update-container nginx-vm \ --container-image gcr.io/cloud-marketplace/google/nginx1:latest
Esse comando define a imagem do contêiner para gcr.io/cloud-marketplace/google/nginx1:latest
e reinicia a instância para ativar as alterações. Além disso, é possível atualizar qualquer propriedade descrita em Como configurar opções para executar seu contêiner adicionando as sinalizações correspondentes.
Após reinicialização da instância, será feito o download da nova imagem do contêiner e a inicialização do contêiner com a nova configuração.
Como implantar um contêiner em um grupo de instâncias gerenciadas
Para implantar um contêiner em um novo grupo gerenciado de instâncias (MIG, na sigla em inglês) usando o Console do Google Cloud ou a CLI do Google Cloud, siga estas etapas:
Crie um modelo de instância com base em uma imagem do Docker.
Crie um MIG a partir do novo modelo de instância.
O exemplo a seguir cria um modelo de instância que implanta um
contêiner em um MIG a partir de uma imagem do Docker Nginx
fornecida pelo Google (gcr.io/cloud-marketplace/google/nginx1:15
).
Para usar outras imagens do Docker, substitua
gcr.io/cloud-marketplace/google/nginx1:15
no exemplo a seguir pela
imagem que você quer usar.
Acesse a página Modelos de instância.
Para criar um modelo de instância, clique em Criar modelo de instância.
Em Contêiner, selecione Implantar imagem do contêiner.
Em Imagem do contêiner, especifique o nome da imagem do Docker e configure as opções para executar o contêiner. Por exemplo, é possível especificar
gcr.io/cloud-marketplace/google/nginx1:15
para a imagem do contêiner.Clique em Criar.
Em seguida, crie um MIG que use o novo modelo de instância.
Use o comando gcloud compute instance-templates create-with-container
para criar um modelo de instância para executar imagens do Docker:
gcloud compute instance-templates create-with-containerTEMPLATE_NAME \ --container-imageDOCKER_IMAGE
Você também pode configurar opções para executar seu contêiner.
Por exemplo, o comando abaixo cria um novo modelo de instância com o nome nginx-template
, que inclui informações sobre a imagem do Docker.
Uma instância criada a partir desse modelo inicia e executa a imagem do
Docker gcr.io/cloud-marketplace/google/nginx1:15
quando a instância é iniciada.
gcloud compute instance-templates create-with-container nginx-template \ --container-image gcr.io/cloud-marketplace/google/nginx1:15
Em seguida, crie um MIG usando o novo modelo de instância.
Agora que você tem um modelo de instância, é possível
criar um MIG
que use o modelo. Por exemplo, para criar um MIG
usando a CLI gcloud e o nginx-template
que você acabou de criar,
execute o seguinte comando:
gcloud compute instance-groups managed create example-group \ --base-instance-name nginx-vm \ --size 3 \ --template nginx-template
Como atualizar um grupo de instâncias gerenciadas executando um contêiner
É possível atualizar um grupo gerenciado de instâncias (MIG) para implantar a nova versão de uma imagem do Docker ou uma nova versão da imagem do Container-Optimized OS.
Como atualizar um MIG para a nova versão de uma imagem de contêiner
É possível implantar a nova versão de uma imagem do Docker em um MIG usando o Managed Instance Group Updater, em três etapas:
- Prepare uma nova imagem do Docker para implantação.
- Crie um modelo de instância com base na nova imagem do Docker, da mesma maneira que um modelo com base em contêiner é criado.
- Atualize um MIG para o novo modelo de instância usando o Managed Instance Group Updater.
Como atualizar um grupo de instâncias gerenciadas para uma nova versão da imagem do Container-Optimized OS
O Google atualiza regularmente as imagens do Container-Optimized OS. Convém aplicar essas atualizações nos MIGs em contêineres sem alterar a imagem do Docker. É possível atualizar um MIG para a nova versão de uma imagem do Container-Optimized OS usando o Console do Google Cloud ou a CLI do Google Cloud em duas etapas:
- Crie um modelo de instância com base na versão atual da sua imagem do Docker, da mesma maneira que você cria um modelo baseado em contêiner para um novo MIG. A versão compatível mais recente de uma imagem do Container-Optimized OS é usada por padrão.
- Atualize um MIG com o novo modelo de instância usando o Managed Instance Group Updater.
Como conectar-se a um contêiner usando o SSH
É possível se conectar a um contêiner em uma instância usando SSH. Use a
CLI gcloud para executar gcloud compute ssh
com a sinalização --container
:
gcloud compute sshINSTANCE_NAME --containerCONTAINER_NAME
Substitua:
INSTANCE_NAME
: o nome da instância.CONTAINER_NAME
: o nome do contêiner
Saiba mais sobre o comando gcloud compute ssh
e os respectivos argumentos.
Como monitorar contêineres no Compute Engine
Para monitorar instâncias que executam uma imagem do Container-Optimized OS, use o agente Detector de problemas de nós, que se comunica com o Cloud Monitoring e informa métricas relacionadas à integridade. O agente é integrado a imagens do Container-Optimized OS a partir do Milestone 77.
Para ativar o agente em contêineres que usam imagens com o Milestone 88 ou posterior, edite
a seção de metadados personalizados
e defina google-monitoring-enabled
como true
.
Para encontrar outras maneiras de ativar o detector de problemas de nós, acesse Como ativar o monitoramento de integridade.
O agente do detector de problemas de nós é compatível com as métricas na lista de métricas
que começam com guest/
.
Para interagir com as métricas coletadas pelo agente, acesse o Metrics Explorer.
Como ver registros
É possível visualizar três tipos de registros relacionados a contêineres:
Os registros do agente de inicialização também são conhecidos como registros de konlet (em inglês). O agente de inicialização analisa a configuração do contêiner e executa as tarefas para iniciá-lo em uma instância do Compute Engine.
Os registros do evento do Docker alerta sobre eventos de contêiner, incluindo eventos de início e parada do contêiner.
Os registros do contêiner incluem
STDOUT
dos apps executados no contêiner.
Como ver registros do agente de inicialização
Os registros do agente de inicialização estão disponíveis no console serial por meio do Cloud Logging e do serviço do sistema journald
incluído na imagem do SO.
Como ver os registros do agente de inicialização no console serial
Acesse a página Instâncias da VM.
Selecione a instância em que você quer acessar os registros do agente de inicialização.
Em Registros, clique em Porta Serial 1 (console) para ver os registros do console serial.
Use o comando
get-serial-port-output
(em inglês)
para ver os registros na porta serial da instância.
gcloud compute instances get-serial-port-outputINSTANCE_NAME
Substitua INSTANCE_NAME
pelo nome da instância.
Por exemplo, use o comando a seguir para conferir a saída da porta serial de uma
instância chamada nginx-vm
:
gcloud compute instances get-serial-port-output nginx-vm
Como visualizar registros do agente de inicialização em journald
- Conecte-se à sua instância com um contêiner usando o SSH.
Execute o comando
sudo journalctl
para conferir os registros de inicialização da instância e do contêiner. Use o comando a seguir para filtrar os registros do agente de inicialização do contêiner (konlet
).sudo journalctl -u konlet*
Como visualizar registros do agente de inicialização no Logging
Acesse a página Instâncias da VM.
Selecione a instância em que você quer acessar os registros do agente de inicialização.
Em Registros, clique em Cloud Logging para ver os registros do Cloud Logging.
Digite um filtro de pesquisa para recuperar os registros do agente de inicialização.
resource.type="gce_instance" logName="projects/
PROJECT_ID /logs/cos_system" jsonPayload.SYSLOG_IDENTIFIER="konlet-startup" jsonPayload._HOSTNAME="INSTANCE_NAME "Substitua:
PROJECT_ID
: o ID do projeto que contém a instânciaINSTANCE_NAME
: o nome da instância que você quer que receba os registros
Use o comando gcloud logging read
com um filtro adequado para ver os registros do agente de inicialização do contêiner.
gcloud logging read "resource.type=gce_instance AND \ logName=projects/PROJECT_ID /logs/cos_system AND \ jsonPayload.SYSLOG_IDENTIFIER=konlet-startup AND \ jsonPayload._HOSTNAME=INSTANCE_NAME "
Substitua:
PROJECT_ID
: o ID do projeto que contém a instânciaINSTANCE_NAME
: o nome da instância que você quer que receba os registros
Por exemplo, use o comando a seguir para conferir os últimos 10 registros do agente de inicialização
no Logging de uma instância chamada nginx-vm
que executa o COS 70 e existe em my-project
.
gcloud logging read "resource.type=gce_instance AND \ logName=projects/my-project/logs/cos_system AND \ jsonPayload.SYSLOG_IDENTIFIER=konlet-startup AND \ jsonPayload._HOSTNAME=nginx-vm" \ --limit 10
Como visualizar registros de eventos do Docker
Veja os registros de eventos do Docker em journald
e no Cloud Logging.
Como ver os registros de eventos do Docker em journald
- Conecte-se à sua instância com um contêiner usando o SSH.
Execute o comando
sudo journalctl
com o filtro a seguir para visualizar os registros de eventos do Docker.sudo journalctl -u docker-events-collector
Como visualizar registros de eventos do Docker no Logging
Acesse a página Instâncias da VM.
Selecione a instância em que você quer acessar os registros do agente de inicialização.
Em Registros, clique em Cloud Logging para ver os registros do Cloud Logging.
Digite o filtro de pesquisa a seguir para recuperar os registros de eventos do Docker.
resource.type="gce_instance" logName="projects/
PROJECT_ID /logs/cos_system" jsonPayload._HOSTNAME="INSTANCE_NAME " jsonPayload.SYSLOG_IDENTIFIER="docker"Substitua:
PROJECT_ID
: o ID do projeto que contém a instânciaINSTANCE_NAME
: o nome da instância que você quer que receba os registros
Use o comando gcloud logging read
com um filtro adequado para ver os registros de eventos do Docker.
gcloud logging read "resource.type=gce_instance AND \ logName=projects/PROJECT_ID /logs/cos_system AND \ jsonPayload._HOSTNAME=INSTANCE_NAME AND \ jsonPayload.SYSLOG_IDENTIFIER=docker"
Substitua:
PROJECT_ID
: o ID do projeto que contém a instânciaINSTANCE_NAME
: o nome da instância que você quer que receba os registros
Por exemplo, use o comando a seguir para conferir os últimos 10 registros de eventos do Docker
no Logging para uma instância chamada nginx-vm
que
executa o COS 70 e existe em my-project
.
gcloud logging read "resource.type=gce_instance AND \ logName=projects/my-project/logs/cos_system AND \ jsonPayload._HOSTNAME=nginx-vm AND \ jsonPayload.SYSLOG_IDENTIFIER=docker" \ --limit 10
Como ver registros de contêineres
Acesse a página Instâncias da VM.
Selecione a instância em que você quer acessar os registros do agente de inicialização.
Em Registros, clique em Cloud Logging para ver os registros do Cloud Logging.
A página do Cloud Logging é carregada com um filtro de pesquisa padrão. Copie o valor de
resource.labels.instance_id
. Ele será usado mais tarde.Atualize o filtro de pesquisa para recuperar os registros de contêiner.
resource.type="gce_instance" logName="projects/
PROJECT_ID /logs/cos_containers" resource.labels.instance_id="INSTANCE_ID "Substitua:
PROJECT_ID
: o ID do projeto que contém a instânciaINSTANCE_ID
: o código da instância que você quer que receba o registro
Use o comando gcloud logging read
para ver os registros do contêiner.
Determine o ID da instância em que você quer receber os registros:
gcloud compute instances describe
INSTANCE_NAME \ --zoneZONE \ --format="value(id)"Substitua:
INSTANCE_NAME
: o nome da instância que você quer que receba os registrosZONE
: a zona em que a instância está localizada.
Use o comando a seguir e filtre para visualizar os registros de contêiner da instância.
gcloud logging read "resource.type=gce_instance AND \ logName=projects/
PROJECT_ID /logs/cos_containers AND \ resource.labels.instance_id=INSTANCE_ID "Substitua:
PROJECT_ID
: o ID do projeto que contém a instância.INSTANCE_ID
: o ID da instância.
Por exemplo, use o comando a seguir para conferir os últimos 10 registros de contêiner no Cloud Logging de uma instância que executa o COS 70, que existe em
my-project
e que tem um ID de instância555123456789012345
.gcloud logging read "resource.type=gce_instance AND \ logName=projects/my-project/logs/cos_containers AND \ resource.labels.instance_id=555123456789012345" \ --limit 10
Como especificar imagens ou famílias de imagens otimizadas para contêineres
Por padrão, instâncias ou modelos de instâncias em contêiner são criados para usar a última
imagem otimizada para contêiner compatível.
A imagem pertence ao projeto cos-cloud
.
É possível modificar esse padrão com outra imagem do projeto cos-cloud
.
Para mais informações sobre famílias de imagens disponíveis e os atributos delas, consulte
Como escolher a versão correta do Container-Optimized OS.
Por exemplo, depois de saber qual imagem você quer usar, na
CLI gcloud, forneça a flag --image
para
modificar a imagem padrão otimizada para contêineres ou forneça a
flag --image-family
para escolher a imagem mais recente da família especificada
no momento da criação da instância.
O exemplo a seguir cria uma instância em contêiner que usa a imagem
mais recente da família de imagens cos-dev
:
gcloud compute instances create-with-container nginx-vm \ --image-family cos-dev \ --image-project cos-cloud \ --container-image gcr.io/cloud-marketplace/google/nginx1:1.15
Como configurar regras de firewall
As instâncias em contêiner iniciam contêineres com a rede configurada no modo host. Um contêiner compartilha a pilha de rede do host, e todas as respectivas interfaces estão disponíveis para o contêiner.
Por padrão, Google Cloud as regras de firewall bloqueiam todas as conexões de entrada para uma instância e permitem todas as conexões de saída dela.
Crie regras de firewall para permitir conexões de entrada para a instância e, portanto, para o contêiner.
Como configurar opções para executar um contêiner
Configure as seguintes opções para executar seu contêiner:
- Especifique uma política de reinicialização de contêiner.
- Modifique o contêiner
ENTRYPOINT
, que é o comando padrão a ser executado na inicialização dele. - Transmita os argumentos ao comando
ENTRYPOINT
do contêiner. - Execute um contêiner em modo privilegiado.
- Ative um diretório do host ou
tmpfs
como um volume de dados no contêiner. - Defina variáveis de ambiente.
- Alocar um buffer para
STDIN
no tempo de execução do contêiner. - Aloque um pseudo-TTY.
Saiba mais sobre como configurar opções para executar o contêiner.
A seguir
- Saiba mais sobre como configurar opções para executar o contêiner.
- Saiba mais sobre grupos de instâncias gerenciadas.
- Saiba mais sobre o Container-Optimized OS.