É possível configurar uma instância de máquina virtual (VM, na sigla em inglês) ou um modelo de instância para implantar e lançar um contêiner do Docker. O Compute Engine fornece uma imagem atualizada do Container-Optimized OS (COS) com o Docker instalado e lança o contêiner quando a VM é inicializada.
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 da seguinte maneira.
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- Gerencie as VMs que executam contêineres da mesma forma que você trataria qualquer outra ao configurar e gerenciar a infraestrutura do Compute Engine.
- 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.
- Use ferramentas e processos conhecidos, como a Google Cloud CLI ou a API Compute Engine, para gerenciar VMs com contêineres.
- 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.
- implantar durante a inicialização da VM 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.
- 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 de VM ou um modelo para um MIG. - 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 inicializar seu 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. - Só é possível implantar um contêiner para cada instância de VM. Considere usar o Google Kubernetes Engine caso precise implantar vários contêineres por instância de VM.
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 de VM 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 pode ser usado apenas no Console do Google Cloud ou na Google Cloud CLI, mas não com a API.
- 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.
Acesse a página Criar uma instância.
Especifique os detalhes da VM.
Na seção Contêiner, clique em Implantar contêiner.
Na página Configurar contêiner, especifique um nome de imagem de contêiner e configure as opções para executar o contêiner de acordo com suas necessidades. Por exemplo, é possível especificar
gcr.io/cloud-marketplace/google/nginx1:latest
para a imagem do contêiner.Continue com o processo de criação da VM.
- 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 de VM faz o download da nova imagem e inicializa o contêiner no início da VM.
Acesse a página Instâncias da VM.
Clique no nome da VM a ser atualizada.
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 VM, ele faz o download da nova imagem e inicia o contêiner com a configuração atualizada.
Crie um modelo de instância com base em uma imagem do Docker.
Crie um MIG a partir do novo modelo de instância.
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, se preferir. Por exemplo, é possível especificar
gcr.io/cloud-marketplace/google/nginx1:15
para a imagem do contêiner.Clique em Criar.
- 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.
- Crie um modelo de instância com base na versão atual da sua imagem do Docker, da mesma maneira que um modelo com base em contêiner é criado 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.
VM_NAME
: o nome da instância de VMCONTAINER_NAME
: o nome do contêinerOs 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 da VM 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.Acesse a página Instâncias da VM.
Selecione a instância de VM em que você quer ver os registros do agente de inicialização.
Em Registros, clique em Porta Serial 1 (console) para ver os registros do console serial.
- Conecte-se à sua instância com um contêiner usando o SSH.
Execute o comando
sudo journalctl
para ver os registros de inicialização da VM 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*
Acesse a página Instâncias da VM.
Selecione a instância de VM em que você quer ver 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="VM_NAME"
Substitua:
PROJECT_ID
: o ID do projeto que contém a instânciaVM_NAME
: o nome da instância que você quer que receba os registros
PROJECT_ID
: o ID do projeto que contém a instânciaVM_NAME
: o nome da instância que você quer que receba os registros- 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
Acesse a página Instâncias da VM.
Selecione a instância de VM em que você quer ver 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="VM_NAME" jsonPayload.SYSLOG_IDENTIFIER="docker"
Substitua:
PROJECT_ID
: o ID do projeto que contém a instânciaVM_NAME
: o nome da instância que você quer que receba os registros
PROJECT_ID
: o ID do projeto que contém a instânciaVM_NAME
: o nome da instância que você quer que receba os registrosAcesse a página Instâncias da VM.
Selecione a instância de VM em que você quer ver 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
Determine o ID da instância em que você quer receber os registros:
gcloud compute instances describe VM_NAME \ --zone ZONE \ --format="value(id)"
Substitua:
VM_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 visualizar os últimos 10 registros de contêiner no Cloud Logging de uma instância de VM que executa o COS 70, que existe em
my-project
e que tem um ID de instância como555123456789012345
.gcloud logging read "resource.type=gce_instance AND \ logName=projects/my-project/logs/cos_containers AND \ resource.labels.instance_id=555123456789012345" \ --limit 10
- 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.
- Saiba mais sobre grupos de instâncias gerenciadas.
- Saiba mais sobre o Container-Optimized OS.
Como definir quando implantar contêineres em VMs e MIGs
Ao implantar contêineres no Compute Engine, você simplifica a implantação de aplicativos e controla a infraestrutura da VM.
Como alternativa, considere a implantar no Google Kubernetes Engine para:
Executar cada microsserviço em uma máquina virtual (VM, na sigla em inglês) separada no Compute Engine pode levar o sistema operacional a sobrecarregar grande parte do seu custo. O Google Kubernetes Engine permite que você implante vários contêineres e grupos de contêineres para cada instância de VM, o que pode alocar recursos de VMs 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 de VM do Compute Engine incluem:
Os métodos acima 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 aplicativos em execução em uma VM usam 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 de VM ou 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 com facilidade entre os ambientes de implantação, sem precisar lidar com as versões conflitantes da biblioteca no contêiner e no SO dele.
Você verá a seguir como implantar um contêiner no Compute Engine:
Depois que você faz uma solicitação para criar uma instância de VM, o Compute Engine executa as seguintes tarefas:
Limitações
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:
Como implantar um contêiner em uma nova instância de VM
É possível implantar um contêiner em uma nova instância de VM usando o Console do Google Cloud ou a Google Cloud CLI.
Console
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 diferente do Docker, especifique a que você quer usar nos exemplos abaixo.gcloud
Use o comando
gcloud compute instances create-with-container
:gcloud compute instances create-with-container VM_NAME \ --container-image DOCKER_IMAGE
Por exemplo, o comando a seguir cria uma nova instância de VM chamada
nginx-vm
, que inicia e executa a imagem do Dockergcr.io/cloud-marketplace/google/nginx1:latest
.gcloud compute instances create-with-container nginx-vm \ --container-image gcr.io/cloud-marketplace/google/nginx1:latest
Saiba mais sobre o comando
gcloud compute instances create-with-container
.Ao usar uma imagem pública do Docker Hub, é preciso sempre especificar um nome completo para ela. Por exemplo, forneça o seguinte nome para implantar uma imagem do contêiner Apache:
docker.io/httpd:2.4
Como atualizar um contêiner em uma instância de VM
É possível atualizar uma imagem do Docker e as opções de configuração para executar o contêiner em uma instância de VM usando o Console do Google Cloud ou a Google Cloud CLI.
Quando uma VM que executa um contêiner é atualizada, o Compute Engine executa duas tarefas:
Console
gcloud
Use o comando
gcloud compute instances update-container
para atualizar a declaração do contêiner. 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 Google Cloud CLI, siga as etapas abaixo:
Console
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, especifique a imagem que você quer usar no lugar degcr.io/cloud-marketplace/google/nginx1:15
no exemplo a seguir.Em seguida, crie um MIG que use o novo modelo de instância.
gcloud
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-container TEMPLATE_NAME \ --container-image DOCKER_IMAGE
Caso prefira, configure as 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 de VM criada a partir desse modelo inicia e executa a imagem do Dockergcr.io/cloud-marketplace/google/nginx1:15
quando a VM é 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:
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 em duas etapas, usando o Console do Google Cloud ou a Google Cloud CLI:
Como se conectar a um contêiner usando SSH
Conecte-se a um contêiner em uma VM usando SSH. Use a CLI gcloud para executar
gcloud compute ssh
com a sinalização--container
:gcloud compute ssh VM_NAME --container CONTAINER_NAME
Substitua:
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
comotrue
.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:
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
Console
gcloud
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-output VM_NAME
Substitua
VM_NAME
pelo nome da instância de VM.Por exemplo, use o comando a seguir para ver a saída da porta serial de uma instância de VM chamada
nginx-vm
:gcloud compute instances get-serial-port-output nginx-vm
Como ver registros do agente de inicialização
journald
Como visualizar registros do agente de inicialização no Logging
Console
gcloud
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=VM_NAME"
Substitua:
Por exemplo, use o comando a seguir para ver os últimos 10 registros do agente de inicialização no Logging relacionados a uma instância de VM chamada
nginx-vm
que executa o COS 70 e reside emmy-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 ver 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
Como visualizar registros de eventos do Docker no Logging
Console
gcloud
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=VM_NAME AND \ jsonPayload.SYSLOG_IDENTIFIER=docker"
Substitua:
Por exemplo, use o comando a seguir para ver os últimos 10 registros de eventos do Docker relacionados a uma instância de VM chamada
nginx-vm
que executa o COS 70 e reside emmy-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 visualizar registros de contêiner
Console
gcloud
Use o comando
gcloud logging read
para ver os registros do contêiner.Como especificar imagens ou famílias de imagens otimizadas para contêineres
Por padrão, instâncias de VM em contêiner ou modelos de instância são criados para usar a última imagem otimizada para contêiner compatível. Ela 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 sinalização
--image
para modificar a imagem padrão otimizada para contêineres ou forneça a sinalização--image-family
para escolher a imagem mais recente da família especificada no momento da criação da VM.O exemplo a seguir cria uma instância de VM 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
VMs em contêiner os iniciam 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, as regras de firewall do Google Cloud bloqueiam todas as conexões de entrada e autorizam todas as conexões de saída de uma instância de VM.
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:
Saiba mais sobre como configurar opções para executar o contêiner.
A seguir
Exceto em caso de indicação contrária, o conteúdo desta página é licenciado de acordo com a Licença de atribuição 4.0 do Creative Commons, e as amostras de código são licenciadas de acordo com a Licença Apache 2.0. Para mais detalhes, consulte as políticas do site do Google Developers. Java é uma marca registrada da Oracle e/ou afiliadas.
Última atualização 2024-09-24 UTC.
-