Pode configurar uma instância do Compute Engine ou um modelo de instância para implementar e iniciar um contentor do Docker. O Compute Engine fornece uma imagem atualizada do SO otimizado para contentores (COS) com o Docker instalado e inicia o contentor quando a instância é iniciada.
Antes de começar
- Se não conhece os contentores, leia o artigo O que são os contentores e quais são as suas vantagens.
- Se não conhece o Docker, leia a documentação do Docker.
- Leia sobre o SO otimizado para contentores.
- Leia sobre os grupos de instâncias geridas (MIGs).
-
Se ainda não o tiver feito, configure a autenticação.
A autenticação valida a sua identidade para aceder a Google Cloud serviços e APIs. Para executar código ou exemplos a partir de um ambiente de desenvolvimento local, pode autenticar-se no Compute Engine selecionando uma das seguintes opções:
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
-
Instale a CLI Google Cloud. Após a instalação, inicialize a CLI gcloud executando o seguinte comando:
gcloud init
Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.
- Set a default region and zone.
Optar por implementar contentores em instâncias e MIGs
Ao implementar contentores no Compute Engine, pode simplificar a implementação de apps enquanto controla a infraestrutura da instância.
- Faça a gestão das instâncias que estão a executar contentores da mesma forma que trataria qualquer outra instância ao configurar e gerir a sua infraestrutura do Compute Engine.
- Use processos e ferramentas familiares, como a CLI Google Cloud ou a API Compute Engine, para gerir as suas instâncias com contentores.
- Crie serviços escaláveis através de grupos de instâncias geridas (GIGs) que executam contentores, que oferecem funcionalidades como escala automática, autorreparação, atualizações contínuas, implementações em várias zonas e balanceamento de carga.
Em alternativa, pode considerar a implementação no Google Kubernetes Engine para:
- Executar um grande número de microsserviços
- Ter um tempo de arranque do contentor mais rápido
- Tire partido da orquestração automatizada do Kubernetes, incluindo atualizações automáticas, reparação automática de nós e escala automática
A execução de cada microsserviço numa instância separada no Compute Engine pode fazer com que a sobrecarga do sistema operativo seja uma parte significativa do seu custo. O Google Kubernetes Engine permite-lhe implementar vários contentores e grupos de contentores para cada instância, o que pode alocar recursos de instâncias de anfitrião de forma mais eficiente para microsserviços com uma pegada mais pequena.
Como funciona a implementação de contentores no Compute Engine
Os métodos comuns de implementação de software numa instância do Compute Engine incluem:
- Implementar software no arranque da instância através de um script de arranque ou do cloud-init.
- Criar uma imagem de disco de arranque personalizada com software pré-instalado.
Ambos os métodos na lista anterior combinam as tarefas de configuração da app e configuração do ambiente do sistema operativo. Enquanto programador, tem de monitorizar e resolver cuidadosamente todas as dependências de tempo de execução. Por exemplo, se duas apps em execução numa MV usarem versões diferentes da mesma biblioteca, tem de instalar ambas as versões e apontar para elas através de variáveis do sistema.
Uma instância com apps implementadas diretamente no sistema operativo Em alternativa, pode implementar software num contentor numa instância ou num MIG. Um contentor transporta o software de aplicação e as bibliotecas necessárias, e está isolado das apps e bibliotecas do SO. Um contentor pode ser movido entre ambientes de implementação sem ter de lidar com versões de bibliotecas em conflito no contentor e no respetivo SO.
Uma instância com apps implementadas num contentor O processo seguinte descreve como implementar um contentor no Compute Engine:
- Agrupa a sua app e as bibliotecas necessárias numa imagem de Docker e publica a imagem no Artifact Registry ou num registo de terceiros, como o Docker Hub.
- Especifica um nome de imagem do Docker e a
docker run
configuração quando cria uma instância ou um modelo de instância para um MIG.
O Compute Engine executa as seguintes tarefas depois de fazer um pedido para criar uma instância:
- O Compute Engine cria uma instância de VM que usa uma imagem do SO otimizado para contentores fornecida pela Google. Esta imagem inclui um tempo de execução do Docker e software adicional responsável por iniciar o seu contentor.
- O Compute Engine armazena as definições do contentor nos metadados da instância na chave de metadados
gce-container-declaration
. - Quando a VM é iniciada, a imagem do SO otimizado para contentores usa a configuração do comando
docker run
armazenada nos metadados da instância, extrai a imagem do contentor do repositório e inicia o contentor.
Passos para criar uma instância ou um grupo de instâncias geridas que execute um contentor Limitações
- Só pode implementar um contentor para cada instância. Considere o Google Kubernetes Engine se precisar de implementar vários contentores por instância.
Só pode implementar contentores a partir de um repositório público ou de um repositório privado do Artifact Registry ou do Container Registry ao qual tenha acesso. Outros repositórios privados não são suportados.
Consulte a documentação de controlo de acesso do Artifact Registry ou do Container Registry para ver informações acerca das autorizações do registo privado.
Não pode mapear as portas de uma instância para as portas do contentor (opção
-p
do Docker). Para ativar o acesso aos seus contentores, consulte o artigo Publicar portas de contentores.Só pode usar imagens do SO otimizado para contentores com este método de implementação.
Só pode usar esta funcionalidade através da Google Cloud consola ou da CLI Google Cloud e não da API.
Preparar um contentor para implementação
Escolha uma das seguintes abordagens para tornar a imagem do contentor acessível ao Compute Engine:
- Carregue a sua imagem de Docker para o Artifact Registry.
- Use quaisquer imagens de contentores disponíveis publicamente a partir do Docker Hub ou de outros registos.
Implementar um contentor numa nova instância
Pode implementar um contentor numa nova instância de VM através daGoogle Cloud consola ou da Google Cloud CLI.
Consola
O exemplo seguinte implementa um contentor a partir de uma imagem do Docker do Nginx fornecida pela Google,
https://gcr.io/cloud-marketplace/google/nginx1:latest
, numa instância de VM. Para usar uma imagem do Docker diferente, substitua a imagem do Docker do Nginx pela que quer nos passos seguintes.Se lhe for solicitado, selecione o seu projeto e clique em Continuar. É apresentada a página Criar uma instância e é apresentado o painel Configuração da máquina.
No painel Configuração da máquina, aceda a Nome e especifique um nome para a instância. Para mais informações, consulte o artigo Convenção de nomenclatura de recursos.
No menu de navegação, clique em SO e armazenamento. É apresentado o painel Sistema operativo e armazenamento.
Aceda à secção Contentor e, de seguida, clique em Implementar contentor. No painel Configurar contentor apresentado, faça o seguinte:
- Especifique a imagem do contentor a usar. Considere os seguintes exemplos:
- Para selecionar uma imagem de contentor do NGINX 1.12 a partir do Cloud Launcher,
especifique
gcr.io/cloud-marketplace/google/nginx1:1.12
. - Para implementar uma imagem de contentor Apache a partir do Docker Hub, especifique sempre o nome completo da imagem do Docker, como
docker.io/httpd:2.4
.
- Para selecionar uma imagem de contentor do NGINX 1.12 a partir do Cloud Launcher,
especifique
- Opcional. Especifique outros parâmetros de configuração à sua escolha. Para mais informações sobre as opções de configuração do contentor, consulte o artigo Configurar opções para executar o contentor.
- Para terminar a configuração do contentor e regressar ao painel Sistema operativo e armazenamento, clique em Selecionar.
- Especifique a imagem do contentor a usar. Considere os seguintes exemplos:
Opcional: especifique outras opções de configuração. Para mais informações, consulte o artigo Opções de configuração durante a criação da instância.
Para concluir a criação da instância, clique em Criar.
Depois de criar a instância, o Compute Engine inicia a instância e inicia o contentor.
gcloud
-
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 comando
gcloud compute instances create-with-container
:gcloud compute instances create-with-container INSTANCE_NAME \ --container-image=CONTAINER_IMAGE
Substitua o seguinte:
INSTANCE_NAME
: name para a nova instância.CONTAINER_IMAGE
: nome da imagem do contentor.
Por exemplo, o comando seguinte cria uma instância com o nome
nginx-vm
, que inicia e executa a imagem do contentor: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 implementar uma imagem de contentor Apache a partir do Docker Hub, especifique sempre o nome completo da imagem Docker:
docker.io/httpd:2.4
.
Atualizar um contentor numa instância
Pode atualizar uma imagem do Docker e as opções de configuração para executar o contentor numa instância através da Google Cloud consola ou da CLI Google Cloud.
Quando atualiza um contentor em execução, o Compute Engine executa dois passos:
- Atualiza a declaração do contentor na instância. O Compute Engine
armazena a declaração do contentor atualizada nos
metadados da instância na
gce-container-declaration
chave de metadados. - Para e reinicia a instância para acionar a configuração atualizada, se a instância estiver em execução. Se a instância estiver parada, atualiza a declaração do contentor e mantém a instância parada. A instância transfere a nova imagem e inicia o contentor no arranque.
Consola
Aceda à página Instâncias de VM.
Clique no nome da instância a atualizar.
Na página de detalhes da instância, clique em Editar.
Especifique a nova imagem do contentor e atualize as opções para executar o contentor conforme necessário.
Para guardar as alterações, clique em Guardar e reiniciar. O Compute Engine guarda as alterações e reinicia a instância automaticamente para fazer a atualização. Após o reinício da instância, esta transfere a nova imagem e inicia o contentor com a configuração atualizada.
gcloud
Atualize a declaração do contentor através do comando
gcloud compute instances update-container
. Por exemplo:gcloud compute instances update-container nginx-vm \ --container-image gcr.io/cloud-marketplace/google/nginx1:latest
Este comando define a imagem do contentor como
gcr.io/cloud-marketplace/google/nginx1:latest
e reinicia a instância para acionar as alterações. Também pode atualizar qualquer uma das propriedades descritas em Configurar opções para executar o seu contentor adicionando as flags correspondentes.Após o reinício da instância, esta transfere a nova imagem do contentor e inicia o contentor com a nova configuração.
Implementar um contentor num grupo de instâncias geridas
Pode implementar um contentor num novo grupo de instâncias gerido (MIG) através da Google Cloud consola ou da Google Cloud CLI seguindo estes passos:
Crie um modelo de instância baseado numa imagem do Docker.
Crie um MIG a partir do novo modelo de instância.
Consola
O exemplo seguinte cria um modelo de instância que implementa um contentor a partir de uma imagem do Docker do Nginx (
gcr.io/cloud-marketplace/google/nginx1:15
) fornecida pela Google num MIG. Para usar outras imagens do Docker, substituagcr.io/cloud-marketplace/google/nginx1:15
no exemplo seguinte pela imagem que quer usar.Aceda à página Modelos de instâncias.
Para criar um modelo de instância, clique em Criar modelo de instância.
Em Contentor, selecione Implementar imagem do contentor.
Em Imagem do contentor, especifique o nome da imagem do Docker e configure as opções para executar o contentor. Por exemplo, pode especificar
gcr.io/cloud-marketplace/google/nginx1:15
para a imagem do contentor.Clique em Criar.
Em seguida, crie um MIG que use o novo modelo de instância.
gcloud
Crie um modelo de instância para executar imagens do Docker com o comando
gcloud compute instance-templates create-with-container
:gcloud compute instance-templates create-with-container TEMPLATE_NAME \ --container-image DOCKER_IMAGE
Também pode configurar as opções para executar o contentor.
Por exemplo, o comando seguinte 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 deste modelo inicia e executa a imagem do Dockergcr.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 com o novo modelo de instância.
Agora que tem um modelo de instância, pode criar um MIG que usa o modelo de instância. Por exemplo, para criar um MIG usando a CLI gcloud e o
nginx-template
que 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
Atualizar um grupo de instâncias gerido que executa um contentor
Pode atualizar um grupo de instâncias gerido (MIG) para implementar uma nova versão de uma imagem do Docker ou uma nova versão da imagem do SO otimizado para contentores.
Atualizar um MIG para uma nova versão de uma imagem de contentor
Pode implementar uma nova versão de uma imagem do Docker num MIG através do atualizador do grupo de instâncias gerido em três passos:
- Prepare uma nova imagem do Docker para implementação.
- Crie um modelo de instância com base na nova imagem do Docker da mesma forma que cria um modelo baseado em contentores.
- Atualize um MIG para o novo modelo de instância através do atualizador do grupo de instâncias geridas.
Atualizar um grupo de instâncias gerido para uma nova versão da imagem do SO otimizado para contentores
A Google atualiza as imagens do SO otimizado para contentores regularmente e, por isso, é recomendável aplicar essas atualizações aos MIGs contentorizados sem alterar a imagem do Docker. Pode atualizar um MIG para uma nova versão de uma imagem do SO otimizado para contentores através da Google Cloud consola ou da CLI Google Cloud em dois passos:
- Crie um modelo de instância com base na versão atual da sua imagem do Docker, da mesma forma que cria um modelo baseado em contentores para um novo MIG. A versão suportada mais recente de uma imagem do SO otimizado para contentores é usada por predefinição.
- Atualize um MIG com o novo modelo de instância através do atualizador do grupo de instâncias geridas.
Ligar-se a um contentor através de SSH
Pode estabelecer ligação a um contentor numa instância através de SSH. Use a CLI gcloud para executar
gcloud compute ssh
com a flag--container
:gcloud compute ssh INSTANCE_NAME --container CONTAINER_NAME
Substitua o seguinte:
INSTANCE_NAME
: o nome da instânciaCONTAINER_NAME
: o nome do contentor
Saiba mais sobre o comando
gcloud compute ssh
e os respetivos argumentos.Monitorizar contentores no Compute Engine
Para monitorizar as suas instâncias que executam uma imagem do SO otimizado para contentores, use o agente Node Problem Detector, que comunica com o Cloud Monitoring e comunica métricas relacionadas com o estado. O agente está integrado nas imagens do SO otimizado para contentores a partir da versão Milestone 77.
Para ativar o agente, em contentores que usam imagens com a versão 88 ou posterior do Milestone, edite a secção de metadados personalizados e defina
google-monitoring-enabled
comotrue
.Para encontrar outras formas de ativar o Node Problem Detector, visite o artigo Ativar a monitorização da integridade.
O agente Node Problem Detector suporta as métricas na lista de métricas que começam com
guest/
.Para interagir com as métricas recolhidas pelo agente, visite o Explorador de métricas.
Ver registos
Pode ver três tipos de registos relacionados com contentores:
Registos do agente de arranque, também conhecidos como registos do konlet. O agente de arranque analisa a configuração do contentor e executa tarefas para iniciar o contentor numa instância do Compute Engine.
Os registos de eventos do Docker comunicam eventos de contentores, incluindo eventos de início e fim de contentores.
Os registos do seu contentor incluem o
STDOUT
de apps que são executadas no seu contentor.
Ver registos de agentes de arranque
Os registos do agente de arranque estão disponíveis na consola série, através do serviço de sistema
journald
incluído na imagem do SO e através do Cloud Logging.Ver registos do agente de arranque na consola de série
Consola
Aceda à página Instâncias de VM.
Selecione a instância para a qual quer ver os registos do agente de arranque.
Em Registos, clique em Porta de série 1 (consola) para ver os registos da consola de série.
gcloud
Use o comando
get-serial-port-output
para ver os registos na porta série da instância.gcloud compute instances get-serial-port-output INSTANCE_NAME
Substitua
INSTANCE_NAME
pelo nome da instância.Por exemplo, use o seguinte comando para ver o resultado da porta série de uma instância denominada
nginx-vm
:gcloud compute instances get-serial-port-output nginx-vm
Visualizar registos de agentes de arranque no
journald
- Estabeleça ligação à sua instância com um contentor através do SSH.
Execute o comando
sudo journalctl
para ver os registos de arranque da instância e de arranque do contentor. Use o seguinte comando para filtrar os registos do agente de arranque do contentor (konlet
).sudo journalctl -u konlet*
Ver registos de agentes de arranque no registo
Consola
Aceda à página Instâncias de VM.
Selecione a instância para a qual quer ver os registos do agente de arranque.
Em Registos, clique em Cloud Logging para ver os registos do Cloud Logging.
Introduza um filtro de pesquisa para obter registos de agentes de arranque.
resource.type="gce_instance" logName="projects/PROJECT_ID/logs/cos_system" jsonPayload.SYSLOG_IDENTIFIER="konlet-startup" jsonPayload._HOSTNAME="INSTANCE_NAME"
Substitua o seguinte:
PROJECT_ID
: o ID do projeto que contém a instânciaINSTANCE_NAME
: o nome da instância para a qual quer obter registos
gcloud
Use o comando
gcloud logging read
com um filtro adequado para ver os registos do agente de arranque do contentor.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 o seguinte:
PROJECT_ID
: o ID do projeto que contém a instânciaINSTANCE_NAME
: o nome da instância para a qual quer obter registos
Por exemplo, use o seguinte comando para ver os últimos 10 registos de agentes de arranque no Logging para uma instância denominada
nginx-vm
que está a executar o COS 70 e que existe 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
Visualizar registos de eventos do Docker
Pode ver os registos de eventos do Docker no
journald
e no Cloud Logging.Visualizar registos de eventos do Docker no
journald
- Estabeleça ligação à sua instância com um contentor através do SSH.
Execute o comando
sudo journalctl
com o seguinte filtro para ver os registos de eventos do Docker.sudo journalctl -u docker-events-collector
Visualizar registos de eventos do Docker no Logging
Consola
Aceda à página Instâncias de VM.
Selecione a instância para a qual quer ver os registos do agente de arranque.
Em Registos, clique em Cloud Logging para ver os registos do Cloud Logging.
Introduza o seguinte filtro de pesquisa para obter registos de eventos do Docker.
resource.type="gce_instance" logName="projects/PROJECT_ID/logs/cos_system" jsonPayload._HOSTNAME="INSTANCE_NAME" jsonPayload.SYSLOG_IDENTIFIER="docker"
Substitua o seguinte:
PROJECT_ID
: o ID do projeto que contém a instânciaINSTANCE_NAME
: o nome da instância para a qual quer obter registos
gcloud
Use o comando
gcloud logging read
com um filtro adequado para ver os registos 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 o seguinte:
PROJECT_ID
: o ID do projeto que contém a instânciaINSTANCE_NAME
: o nome da instância para a qual quer obter registos
Por exemplo, use o seguinte comando para ver os últimos 10 registos de eventos do Docker no Logging para uma instância denominada
nginx-vm
que esteja a executar o COS 70 e que exista 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
Ver registos de contentores
Consola
Aceda à página Instâncias de VM.
Selecione a instância para a qual quer ver os registos do agente de arranque.
Em Registos, clique em Cloud Logging para ver os registos do Cloud Logging.
A página do Cloud Logging é carregada com um filtro de pesquisa predefinido. Copie o valor de
resource.labels.instance_id
. Vai usá-lo mais tarde.Atualize o filtro de pesquisa para obter registos de contentores.
resource.type="gce_instance" logName="projects/PROJECT_ID/logs/cos_containers" resource.labels.instance_id="INSTANCE_ID"
Substitua o seguinte:
PROJECT_ID
: o ID do projeto que contém a instânciaINSTANCE_ID
: o ID da instância para a qual quer obter registos
gcloud
Use o comando
gcloud logging read
para ver os registos do contentor.Determine o ID da instância para a qual quer obter registos:
gcloud compute instances describe INSTANCE_NAME \ --zone ZONE \ --format="value(id)"
Substitua o seguinte:
INSTANCE_NAME
: o nome da instância para a qual quer obter registosZONE
: a zona onde a instância está localizada
Use o seguinte comando e filtro para ver os registos do contentor 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 o seguinte:
PROJECT_ID
: o ID do projeto que contém a instância.INSTANCE_ID
: o ID da instância.
Por exemplo, use o seguinte comando para ver os últimos 10 registos de contentores no Cloud Logging para uma instância que esteja a executar o COS 70, que exista em
my-project
e que tenha um ID da instância de555123456789012345
.gcloud logging read "resource.type=gce_instance AND \ logName=projects/my-project/logs/cos_containers AND \ resource.labels.instance_id=555123456789012345" \ --limit 10
Especificar imagens otimizadas para contentores ou famílias de imagens
As instâncias ou os modelos de instâncias em contentores são criados para usar a imagem otimizada para contentores suportada mais recente por predefinição. A imagem pertence ao projeto
cos-cloud
.Pode substituir esta predefinição por outra imagem do projeto
cos-cloud
. Para obter informações sobre as famílias de imagens disponíveis e os respetivos atributos, consulte o artigo Escolher a versão certa do SO otimizado para contentores.Por exemplo, depois de saber que imagem quer usar, na CLI gcloud, forneça a flag
--image
para substituir a imagem otimizada para contentores predefinida 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 seguinte cria uma instância contentorizada 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
Configurar regras de firewall
As instâncias contentorizadas iniciam contentores cuja rede está definida para o modo de anfitrião. Um contentor partilha a pilha de rede do anfitrião e todas as interfaces do anfitrião estão disponíveis para o contentor.
Por predefinição, Google Cloud as regras de firewall bloqueiam todas as ligações recebidas a uma instância e permitem todas as ligações enviadas a partir de uma instância.
Crie regras de firewall para permitir ligações recebidas à sua instância e, por conseguinte, ao contentor.
Configurar opções para executar um contentor
Pode configurar as seguintes opções para executar o seu contentor:
- Especifique uma política de reinício do contentor.
- Substituir contentor
ENTRYPOINT
(comando predefinido a executar no início do contentor). - Transmita argumentos para o comando
ENTRYPOINT
do contentor. - Executar um contentor num modo privilegiado.
- Montar um diretório do anfitrião ou
tmpfs
como um volume de dados no contentor. - Defina variáveis de ambiente.
- Atribua um buffer para
STDIN
no tempo de execução do contentor. - Atribua um pseudo-TTY.
Saiba como configurar opções para executar o seu contentor.
O que se segue?
- Saiba como configurar opções para executar o seu contentor.
- Saiba mais acerca dos grupos de instâncias geridos.
- Saiba mais sobre o SO otimizado para contentores.
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 2025-09-23 UTC.
-