Checkpoints
Publish your container image to Container Registry
/ 100
Introdução ao Docker
GSP055
Visão geral
O Docker é uma plataforma aberta para desenvolvimento, envio e execução de aplicativos. Com ele, você pode separar os aplicativos da sua infraestrutura e tratá-la como um aplicativo gerenciado. A plataforma agiliza o envio de códigos, os testes e as implantações, além de encurtar o ciclo entre a criação e a execução do código.
Para isso, o Docker combina recursos de conteinerização do kernel com fluxos de trabalho e ferramentas que ajudam no gerenciamento e na implantação dos seus aplicativos.
Os contêineres do Docker podem ser usados diretamente no Kubernetes, o que facilita a execução no Kubernetes Engine. Depois de aprender os conceitos básicos do Docker, você terá as habilidades necessárias para começar a desenvolver aplicativos conteinerizados e no Kubernetes.
Objetivos
Neste laboratório, você vai aprender a:
- Criar, executar e depurar contêineres do Docker.
- Extrair imagens Docker no Docker Hub e no Google Artifact Registry.
- Enviar imagens Docker para o Google Artifact Registry.
Pré-requisitos
Este é um laboratório de nível introdutório. Ele não exige experiência com o Docker e contêineres. Conhecer o Cloud Shell e a linha de comando é recomendável, mas não obrigatório.
Configuração e requisitos
Antes de clicar no botão Start Lab
Leia estas instruções. Os laboratórios são cronometrados e não podem ser pausados. O timer é iniciado quando você clica em Começar o laboratório e mostra por quanto tempo os recursos do Google Cloud vão ficar disponíveis.
Este laboratório prático permite que você realize as atividades em um ambiente real de nuvem, não em uma simulação ou demonstração. Você vai receber novas credenciais temporárias para fazer login e acessar o Google Cloud durante o laboratório.
Confira os requisitos para concluir o laboratório:
- Acesso a um navegador de Internet padrão (recomendamos o Chrome).
- Tempo para concluir o laboratório---não se esqueça: depois de começar, não será possível pausar o laboratório.
Como iniciar seu laboratório e fazer login no console do Google Cloud
-
Clique no botão Começar o laboratório. Se for preciso pagar, você verá um pop-up para selecionar a forma de pagamento. No painel Detalhes do laboratório à esquerda, você vai encontrar o seguinte:
- O botão Abrir console do Google Cloud
- O tempo restante
- As credenciais temporárias que você vai usar neste laboratório
- Outras informações, se forem necessárias
-
Se você estiver usando o navegador Chrome, clique em Abrir console do Google Cloud ou clique com o botão direito do mouse e selecione Abrir link em uma janela anônima.
O laboratório ativa os recursos e depois abre a página Fazer login em outra guia.
Dica: coloque as guias em janelas separadas lado a lado.
Observação: se aparecer a caixa de diálogo Escolher uma conta, clique em Usar outra conta. -
Se necessário, copie o Nome de usuário abaixo e cole na caixa de diálogo Fazer login.
{{{user_0.username | "Nome de usuário"}}} Você também encontra o Nome de usuário no painel Detalhes do laboratório.
-
Clique em Seguinte.
-
Copie a Senha abaixo e cole na caixa de diálogo de boas-vindas.
{{{user_0.password | "Senha"}}} Você também encontra a Senha no painel Detalhes do laboratório.
-
Clique em Seguinte.
Importante: você precisa usar as credenciais fornecidas no laboratório, e não as da sua conta do Google Cloud. Observação: se você usar sua própria conta do Google Cloud neste laboratório, é possível que receba cobranças adicionais. -
Acesse as próximas páginas:
- Aceite os Termos e Condições.
- Não adicione opções de recuperação nem autenticação de dois fatores (porque essa é uma conta temporária).
- Não se inscreva em testes gratuitos.
Depois de alguns instantes, o console do Google Cloud será aberto nesta guia.
Ativar o Cloud Shell
O Cloud Shell é uma máquina virtual com várias ferramentas de desenvolvimento. Ele tem um diretório principal permanente de 5 GB e é executado no Google Cloud. O Cloud Shell oferece acesso de linha de comando aos recursos do Google Cloud.
- Clique em Ativar o Cloud Shell na parte de cima do console do Google Cloud.
Depois de se conectar, vai notar que sua conta já está autenticada, e que o projeto está configurado com seu PROJECT_ID. A saída contém uma linha que declara o projeto PROJECT_ID para esta sessão:
gcloud
é a ferramenta de linha de comando do Google Cloud. Ela vem pré-instalada no Cloud Shell e aceita preenchimento com tabulação.
- (Opcional) É possível listar o nome da conta ativa usando este comando:
-
Clique em Autorizar.
-
A saída será parecida com esta:
Saída:
- (Opcional) É possível listar o ID do projeto usando este comando:
Saída:
Exemplo de saída:
gcloud
, acesse o guia com informações gerais sobre a gcloud CLI no Google Cloud.
Tarefa 1: Hello World
- No Cloud Shell, digite o comando a seguir para executar um contêiner do Hello World:
Resposta ao comando
Esse contêiner simples exibe a mensagem Hello from Docker!
. O comando é simples, mas observe na saída o número de etapas que ele executou. O daemon do Docker procurou a imagem do Hello World, não a encontrou no local, extraiu a imagem de um registro público chamado Docker Hub, criou um contêiner dessa imagem e o executou para você.
- Execute o comando a seguir para examinar a imagem do contêiner extraída do Docker Hub:
Resposta ao comando
Essa é a imagem extraída do registro público Docker Hub. O ID da imagem tem o formato de hash SHA256 (em inglês). Esse campo especifica a imagem do Docker que foi provisionada. Quando o daemon do Docker não encontra uma imagem no local, ele procura a imagem no registro público por padrão.
- Execute o contêiner novamente:
Resposta ao comando
Quando você executar esse comando pela segunda vez, o daemon do Docker vai encontrar a imagem no registro local e executar o contêiner a partir dela. Não será mais necessário extrair a imagem do Docker Hub.
- Por último, para examinar os contêineres em execução, use o seguinte comando:
Resposta ao comando
Não há contêineres em execução. Você já saiu dos contêineres do Hello World executados anteriormente.
- Para conferir todos os contêineres, inclusive os que não estão mais em execução, use o comando
docker ps -a
:
Resposta ao comando
Essa resposta mostra metadados relativos à execução e o Container ID
, um UUID gerado pelo Docker para identificar o contêiner. Os Names
dos contêineres também são gerados aleatoriamente, mas podem ser especificados com o comando docker run --name [container-name] hello-world
.
Tarefa 2: Criação
Nesta seção, você vai criar uma imagem do Docker baseada em um aplicativo de nó simples.
- Execute o comando abaixo para criar e alternar para uma pasta chamada
test
.
- Crie um
Dockerfile
:
O arquivo instrui o daemon do Docker sobre como criar a imagem.
- A linha inicial especifica a imagem primária de base, que, nesse caso, é a imagem oficial do Docker para suporte de longo prazo (LTS) da versão do nó.
- Na segunda linha, você define o diretório de trabalho atual do contêiner.
- Na terceira, você adiciona ao contêiner o conteúdo do diretório atual, indicado por
"."
. - Em seguida, exponha a porta do contêiner para que ela possa aceitar conexões e, por fim, execute o comando do nó para iniciar o aplicativo.
Dockerfile
. Agora você vai criar o aplicativo do nó e depois a imagem.
- Execute o comando abaixo para criar o aplicativo do nó:
Esse é um servidor HTTP simples que detecta atividade na porta 80 e retorna "Hello World".
Agora crie a imagem.
- Observe novamente o
"."
, que indica o diretório atual. Você precisa executar este comando dentro do diretório que contém o Dockerfile:
A execução desse comando pode levar alguns minutos. Ao terminar, a resposta será parecida com esta:
O -t
nomeia e marca uma imagem com a sintaxe name:tag
. O nome da imagem é node-app
, e a tag
é 0.1
. É altamente recomendado usar a tag para criar imagens do Docker. Se você não especificar uma tag, ela vai receber o valor latest
por padrão. Dessa forma, será mais difícil distinguir as imagens mais recentes das mais antigas. Observe também como cada linha no Dockerfile
acima resulta em camadas de contêiner intermediárias à medida que a imagem é criada.
- Agora execute o comando a seguir para conferir as imagens que você criou:
A saída será parecida com esta:
O node
é a imagem de base e o node-app
é a imagem que você criou. Não é possível remover o node
sem remover o node-app
primeiro. O tamanho da imagem é relativamente pequeno em comparação com as VMs. Outras versões da imagem do nó, como node:slim
e node:alpine
, podem ser ainda menores para facilitar a portabilidade. A redução do tamanho dos contêineres é explorada mais a fundo nos tópicos avançados. Todas as versões do repositório oficial estão disponíveis nesta página.
Tarefa 3: Execução
- Use o código a seguir para executar contêineres baseados na imagem que você criou:
Resposta ao comando
A flag --name
permite nomear o contêiner. O -p
instrui o Docker a mapear a porta 4000 do host para a porta 80 do contêiner. Agora você pode acessar o servidor em http://localhost:4000
. Sem o mapeamento de portas, você não poderia acessar o contêiner em localhost.
- Abra outro terminal (no Cloud Shell, clique no ícone
+
) e teste o servidor:
Resposta ao comando
O contêiner será executado enquanto o terminal inicial estiver em funcionamento. Se você quiser que o contêiner seja executado em segundo plano (não vinculado à sessão do terminal), será necessário especificar a sinalização -d
.
- Feche o terminal inicial e execute o comando a seguir para interromper e remover o contêiner:
- Agora execute este comando para iniciar o contêiner em segundo plano:
Resposta ao comando
- Observe que o contêiner está sendo executado na saída do
docker ps
. Para conferir os registros, executedocker logs [container_id]
.
docker logs 17b
se o ID do contêiner for 17bcaca6f....
Resposta ao comando
Agora modifique o aplicativo.
- No Cloud Shell, abra o diretório de teste criado anteriormente no laboratório:
- Edite o arquivo
app.js
com um editor de texto da sua escolha, como o nano ou o vim, e substitua "Hello World" por outra string:
- Crie a nova imagem e atribua a tag
0.2
a ela:
Resposta ao comando
Observe que, na etapa 2, você usou uma camada de cache atual. Da etapa 3 em diante, as camadas serão modificadas porque você alterou o app.js
.
- Execute outro contêiner com a nova versão da imagem. Mapeamos a porta 8080 do host em vez da 80. Não é possível usar a porta 4000 do host porque ela já está sendo utilizada.
Resposta ao comando
- Teste os contêineres:
Resposta ao comando
- Agora teste o primeiro contêiner que você fez:
Resposta ao comando
Tarefa 4: Depuração
Agora que você sabe como criar e executar contêineres, confira algumas práticas de depuração.
- Para acessar os registros de um contêiner, use o comando
docker logs [container_id]
. Para seguir a saída do registro com o contêiner em execução, use a opção-f
.
Resposta ao comando
Em alguns momentos, é melhor iniciar uma sessão interativa de Bash dentro do contêiner em execução.
- Você pode usar o
docker exec
para fazer isso. Abra outro terminal (no Cloud Shell, clique no ícone +) e insira o seguinte comando:
Com as flags -it
, aloque um pseudo-tty e mantenha o stdin aberto para interagir com um contêiner. Observe que o bash foi executado no diretório (/app) WORKDIR
especificado no Dockerfile
. Agora, você tem uma sessão de shell interativa dentro do contêiner para depurar.
Resposta ao comando
- Confira o diretório:
Resposta ao comando
- Saia da sessão de Bash:
- Use "Docker inspect" para examinar os metadados de um contêiner no Docker:
Resposta ao comando
- Use
--format
para inspecionar campos específicos do JSON retornado. Exemplo:
Exemplo de saída
Confira mais informações sobre depuração nos recursos a seguir da documentação do Docker:
- Referência de "Docker inspect" (em inglês)
- Referência de "Docker exec" (em inglês)
Tarefa 5: Publicação
Agora você vai enviar a imagem para o Google Artifact Registry. Depois disso, será preciso remover todos os contêineres e imagens para simular um ambiente novo. Após isso, extraia e execute os contêineres. Essa tarefa vai demonstrar a portabilidade dos contêineres do Docker.
Para enviar imagens para o registro privado hospedado pelo Artifact Registry, marque as imagens com um nome de registro. O formato é <regional-repository>-docker.pkg.dev/my-project/my-repo/my-image
.
Criar o repositório de destino do Docker (usando o console do Cloud)
É necessário criar um repositório antes de enviar imagens para ele. O envio de uma imagem não aciona a criação de um repositório e a conta de serviço do Cloud Build não tem permissões para criar repositórios.
-
No Menu de navegação, em "CI/CD", acesse o Artifact Registry > Repositórios.
-
Clique no ícone +CRIAR REPOSITÓRIO ao lado dos repositórios.
-
Especifique o nome do repositório como
my-repository
. -
Escolha Docker como o formato.
-
Em "Tipo de local", selecione Região e escolha o seguinte local:
. -
Clique em Criar.
Configurar a autenticação
Antes de enviar ou extrair imagens, configure o Docker para usar a CLI do Google Cloud e autenticar solicitações ao Artifact Registry.
- Para configurar a autenticação nos repositórios do Docker na região
, execute o seguinte comando no Cloud Shell:
- Insira
Y
quando solicitado.
O comando atualiza a configuração do Docker. Agora é possível se conectar ao Artifact Registry no projeto do Google Cloud para enviar e extrair imagens.
Criar um repositório do Artifact Registry (usando a CLI)
- Execute estes comandos para criar um repositório de artefatos.
Envie o contêiner para o Artifact Registry
- Mude para o diretório com seu Dockerfile.
- Execute o comando para marcar
node-app:0.2
.
- Execute o comando a seguir para verificar as imagens do Docker.
Resposta ao comando
- Envie esta imagem para o Artifact Registry.
Resposta ao comando (sujeita à variação):
-
Quando o envio terminar, em CI/CD no menu de navegação, acesse Artifact Registry > Repositórios.
-
Clique em my-repository. Você verá o contêiner
node-app
do Docker:
Teste a imagem
Você pode se conectar a uma máquina virtual usando SSH, iniciar uma nova VM e instalar a gcloud. Para simplificar, remova todos os contêineres e imagens para simular um ambiente novo.
- Interrompa e remova todos os contêineres:
Remova as imagens secundárias do node:lts
antes de remover a imagem do nó.
- Execute o comando a seguir para remover todas as imagens do Docker.
Resposta ao comando
Neste ponto, você tem um ambiente praticamente novo.
- Extraia e execute a imagem:
- Use um cURL no contêiner em execução.
Resposta ao comando
Teste a tarefa concluída
Clique em Verificar meu progresso para conferir a tarefa realizada. Se você publicou uma imagem de contêiner no Artifact Registry com êxito, vai receber uma pontuação de avaliação.
A portabilidade dos contêineres é apresentada nesta etapa. Enquanto o Docker estiver instalado no host (seja no local ou na VM), ele poderá extrair imagens de registros públicos ou privados e executar contêineres baseados nelas. Nenhuma dependência de aplicativo precisa ser instalada no host, com exceção do Docker.
Parabéns!
Parabéns! Neste laboratório, você realizou diversas atividades práticas, incluindo a execução de contêineres com base em imagens públicas do Docker Hub. Você também criou suas próprias imagens de contêiner e as enviou para o Google Artifact Registry. Além disso, agora você tem as habilidades necessárias para depurar contêineres em execução de maneira eficaz e ainda ganhou experiência na execução de contêineres com base em imagens extraídas do Google Artifact Registry, aprimorando seu conhecimento e proficiência no Docker.
Próximas etapas/Saiba mais
- Referência do Dockerfile (em inglês)
- Docker Hub (em inglês)
- Saiba mais sobre o Docker com a documentação oficial (em inglês)
- Documentação do Artifact Registry
Treinamento e certificação do Google Cloud
Esses treinamentos ajudam você a aproveitar as tecnologias do Google Cloud ao máximo. Nossas aulas incluem habilidades técnicas e práticas recomendadas para ajudar você a alcançar rapidamente o nível esperado e continuar sua jornada de aprendizado. Oferecemos treinamentos que vão do nível básico ao avançado, com opções de aulas virtuais, sob demanda e por meio de transmissões ao vivo para que você possa encaixá-las na correria do seu dia a dia. As certificações validam sua experiência e comprovam suas habilidades com as tecnologias do Google Cloud.
Manual atualizado em 29 de fevereiro de 2024
Laboratório testado em 29 de fevereiro de 2024
Copyright 2024 Google LLC. Todos os direitos reservados. Google e o logotipo do Google são marcas registradas da Google LLC. Todos os outros nomes de produtos e empresas podem ser marcas registradas das respectivas empresas a que estão associados.