Docker no Windows? Comece a aprender agora ou…!

Se você é novo em containers e Docker e trabalha principalmente no Windows, está prestes a ter uma experiência agradável. Neste artigo, você aprenderá como configurar o Docker no Windows 10 usando o Docker Desktop for Windows ou simplesmente chamado de Docker Desktop neste artigo.

O Docker Desktop é o Docker Engine e um cliente de gerenciamento empacotados juntos para facilitar o uso no Windows 10. Neste artigo, você instalará o Docker Desktop, implantará seu primeiro container e compartilhará dados entre seu host e seus containers.

Pré-requisitos para o Docker no Windows

Este é um artigo passo a passo que demonstra vários passos no Docker Desktop para o Docker no Windows. Para acompanhar, certifique-se de ter alguns requisitos específicos em vigor primeiro.

  • Uma conexão com a Internet para baixar mais de 800MB de dados
  • Windows 10 64 bits executando a edição Pro, Enterprise ou Education com a versão 1703 ou mais recente. Isso é necessário para executar o Hyper-V no Windows 10.
  • A CPU with SLAT (nested paging) compatibility. All AMD/Intel processors since approximately 2008 are SLAT compatible
  • Pelo menos 4GB de RAM
  • Virtualização de hardware na BIOS, às vezes rotulada como Tecnologia de Virtualização ou VTx. Isso deve estar habilitado e aparecer como Habilitado na guia de desempenho do Gerenciador de Tarefas, conforme mostrado abaixo.
Enabled BIOS virtualization shown in Windows Task Manager

Baixando e Instalando o Docker Desktop

Em primeiro lugar, é necessário baixar e instalar o Docker Desktop para começar a usar o Docker no Windows. O Docker Desktop está disponível em duas versões: uma versão estável e uma versão de teste.

A versão estável é lançada trimestralmente e garante uma aplicação totalmente testada. Neste artigo, será utilizada a versão estável.

Aviso: Após a instalação, o Docker Desktop solicitará a instalação do hipervisor Hyper-V, caso ainda não esteja instalado. Ao fazer isso, o hipervisor Hyper-V impede que hipervisores em modo de usuário, como o VirtualBox, VMWare, etc., executem máquinas virtuais de convidados. O suporte do Hyper-V para o VirtualBox e o VMWare é limitado, mas está em desenvolvimento.

Você também tem a opção de baixar o Docker Desktop diretamente do Docker.com ou através do gerenciador de pacotes do Windows, o Chocolatey. Vamos abordar brevemente cada método.

Do Docker.com

Para baixar o Docker Desktop diretamente do docker.com, você pode ir para a página do produto, registrar uma conta e baixá-lo de lá. Isso é preferido se você pretende usar o Docker em produção registrando uma conta.

No entanto, se você está apenas testando o Docker pela primeira vez, também pode baixá-lo diretamente, o que é muito mais fácil.

Assim que o EXE for baixado, execute o executável e clique através dos prompts aceitando todos os padrões.

Ao ser perguntado se você planeja Usar containers do Windows em vez de containers do Linux, como mostrado abaixo, não habilite a caixa de seleção. Você estará usando containers do Linux neste artigo.

Installing Docker Desktop

Assim que a instalação estiver completa, reinicie o seu computador.

Selecionar a opção de usar containers do Windows ou containers do Linux diz ao Docker para anexar imagens a um kernel do Windows ou kernel do Linux. Você pode alterar essa configuração a qualquer momento após a instalação clicando com o botão direito no ícone do Docker na bandeja do sistema e selecionando Alternar para containers do Windows, conforme mostrado abaixo.

Switching to Windows containers

Usando o Chocolatey

A outra opção para baixar e instalar o Docker Desktop é usando o Chocolatey. O Chocolatey automatiza muitas das tarefas de download e instalação para você. Para fazer isso, abra um console de linha de comando (cmd ou PowerShell) como administrador para baixar e instalar o programa de uma vez, executando o comando abaixo.

choco install docker-desktop

Após a conclusão, reinicie o Windows 10.

Se você quiser experimentar a versão de teste em algum momento, pode baixar e instalar executando o comando choco install docker-desktop --pre.

Validando a instalação do Docker Desktop

Uma vez instalado, o Docker Desktop é executado automaticamente como um serviço que fornece o Docker no Windows. Ele é exibido na bandeja do sistema quando você faz login no Windows após reiniciar. Mas como você pode ter certeza de que ele está funcionando?

Para validar se o Docker Desktop está funcionando corretamente, abra um console de linha de comando e execute o comando docker. Se a instalação tiver ocorrido bem, você verá um resumo de comandos do Docker.

Por fim, faça o Docker baixar e executar uma imagem de container de exemplo chamada hello-world executando o comando docker run hello-world. Se tudo estiver correto, você verá uma saída como abaixo.

A successful test image run via Docker Desktop

Executando Comandos em Containers Docker

O Docker Desktop está instalado e você verificou se está tudo bem? E agora? Para começar com o Docker no Windows, uma tarefa comum a ser realizada em um contêiner Docker é executar comandos. Através do comando docker run, você pode enviar comandos através do host (seu PC com Windows 10) diretamente para um contêiner em execução.

Para executar comandos em um contêiner com docker run, você primeiro especificará um nome de imagem seguido pelo comando. Para começar, diga ao Docker para executar o comando hostname dentro de um contêiner chamado alpine conforme visto abaixo.

> docker run alpine hostname
b74ff46601af

Já que você não possui a imagem Docker alpine em seu computador agora, o Docker no Windows irá baixar a pequena imagem do Docker Hub, iniciar um contêiner a partir dessa imagem, e enviar o comando diretamente para o contêiner e desligá-lo de uma só vez.

Se você quiser manter o contêiner em execução, também pode usar o parâmetro -it. Esse parâmetro indica ao Docker para manter o contêiner no “modo interativo”, deixando-o em execução em primeiro plano após a execução do comando. Você verá que estará então apresentado com um prompt de terminal pronto para uso.

> docker run -it alpine sh
/ #

Quando terminar no terminal, digite exit para retornar ao Windows 10.

Acessando Arquivos do Host do Docker em Contêineres

Outra tarefa comum é acessar arquivos do host a partir de containers. Para acessar arquivos do host em containers, o Docker no Windows permite que você vincule um caminho de pasta do seu desktop para compartilhar essa pasta com seu container. Esse processo é chamado de \textit{binding} (\textit{vinculação}).

Para criar uma vinculação, crie uma pasta em uma unidade local. Para este exemplo, vou usar E:\ e chamá-la de input. Isso criará um novo documento de texto chamado file.txt na pasta. Sinta-se à vontade para usar o caminho e o arquivo que desejar.

Depois de ter a pasta que deseja compartilhar entre o host e o container, o Docker precisa montar a pasta usando o parâmetro \texttt{–mount}. O parâmetro \texttt{–mount} requer três argumentos: um tipo de montagem, um caminho de diretório do host de origem e um caminho de diretório de destino. O caminho de destino será um link simbólico dentro do container.

Abaixo, você verá um exemplo de montagem de toda a unidade E:\ dentro do host do Windows 10 para aparecer como o diretório /home/TEST dentro do container Linux.

> docker run --mount type=bind,source="E:/",target=/home/TEST -it alpine

Ao tentar montar uma pasta do host, o Docker Desktop solicitará sua permissão para compartilhar esta unidade com os containers do Docker, conforme mostrado abaixo.

Sharing a Docker drive

Se você criou o arquivo file.txt na pasta do Windows 10, como descrito anteriormente, execute \texttt{cat /home/TEST/input/file.txt}. Você verá que o conteúdo será exibido.

Agora, delete a pasta input que você acabou de criar e execute o comando cat ... novamente. Observe que o shell agora relata que o arquivo não existe mais.

Working with files in Docker containers

Mapeamento de Portas de Rede

Outro conceito importante de saber é como o Docker no Windows lida com a rede. Para uma breve introdução, vamos ver o que é necessário para acessar um serviço da web em execução em um contêiner a partir do host local.

Primeiro, inicie uma imagem de demonstração que executará uma página da web de exemplo. Baixe e execute a imagem do Docker chamada dockersamples/static-site. Você usará docker container run para fazer isso.

O comando a seguir realiza quatro ações de uma vez:

  • Baixa uma imagem do Docker Hub chamada static-site no “diretório” docker-samples
  • Inicia uma instância de contêiner a partir da imagem static-site
  • Desconecta imediatamente o contêiner do primeiro plano do terminal (--detach)
  • Torna as portas de rede do contêiner em execução acessíveis ao host do Windows 10 (--publish-all)
docker container run --detach --publish-all dockersamples/static-site
## Sintaxe alternativa/abreviada que faz a mesma coisa:
## docker container run -d -P dockersamples/static-site
## docker run -d -P dockersamples/static-site

Depois de executado, o Docker retornará o ID do contêiner que foi iniciado como mostrado abaixo.

Docker container ID returned from running a container

Publicando Portas de Rede

Desde que você está utilizando o parâmetro --publish-all, as portas do host local agora estão mapeadas para a pilha de rede do contêiner. Você pode usar o subcomando docker ps para listar todos os contêineres em execução, incluindo quais portas estão atribuídas a todos os contêineres em execução. No exemplo abaixo, um contêiner está em execução mapeando a porta do host 32777 para a porta do contêiner 80 e a porta do host 32776 para a porta do contêiner 443.

Showing port mapping of Docker container

O Docker no Windows atribui portas aleatórias aos contêineres ao usar o parâmetro --publish-all, a menos que sejam explicitamente definidas.

Agora, abra um navegador da web e acesse http://localhost:32777 ou a porta que o Docker atribuiu para mapear para a porta 80, conforme mostrado por docker ps. Se tudo correr bem, você deverá ver a página da web abaixo.

Resulting webpage running in the Docker container

Alterando as Portas Publicadas

Agora você tem um contêiner Docker em execução no Docker no Windows servindo uma página da web simples. Parabéns! Mas agora você precisa especificar uma vinculação de porta específica sem depender da seleção de porta aleatória com --publish-all. Sem problemas. Use o parâmetro -p.

Primeiro, pare o contêiner em execução especificando uma string única de seu ID de contêiner. Você pode encontrar este ID de contêiner executando docker ps. Depois de saber o ID do contêiner, pare o contêiner e inicie um novo enquanto designa ao Docker para atribuir uma porta específica para publicação.

A sintaxe para especificar uma porta é <porta externa>:<porta do contêiner>. Para cada porta que você deseja publicar, use a opção --publish ou -p com os números de porta externa e do contêiner conforme mostrado abaixo.

> docker stop f766
> docker run --detach -p 1337:80 dockersamples/static-site

Ao especificar um ID de contêiner, você só precisa digitar o suficiente do ID para ser único. Se você estiver executando apenas um contêiner e seu ID for f766f4ac8d66bf7, você pode identificar o contêiner usando qualquer número de caracteres, incluindo apenas f. O requisito é que tudo o que você digitar permita identificar de forma única um único contêiner.

Agora vá para o seu navegador da web e acesse localhost:1337. Lembre-se, você não está alterando a imagem e ela sempre escuta na porta 80; você está alterando a regra de tradução de porta na configuração do Docker que permite conectar ao contêiner.

Webpage being served up on port 1337

Parando todos os contêineres

Usando docker stop, você pode parar um contêiner, mas como parar vários contêineres de uma vez? Uma maneira de fazer isso é fornecer vários IDs de contêiner delimitados por espaço. Você pode ver abaixo um exemplo de como parar três contêineres com IDs de fd50b0a446e7, 36ee57c3b7da e 7c45664906ff.

> docker stop fd50 36ee 7c45

Se estiver a gerir contentores Docker no PowerShell, também pode usar um atalho para parar todos os contentores. Alimente uma lista de IDs de contentores através do docker ps -q para o parâmetro de paragem através da expansão de comando do PowerShell docker stop (docker ps -q).

Confirme que todos os contentores estão parados ao ver que não há contentores listados quando escreve docker ps.

Limpeza

Você baixou algumas imagens de contentores e executou alguns contentores que agora estão parados. Mesmo que estejam parados, o espaço alocado não desapareceu do disco do host local. Você deve excluir os contentores para liberar esse espaço e evitar a desorganização no seu espaço de trabalho.

Para excluir um único contentor, utilize o parâmetro de remoção de contentor rm como abaixo.

> docker container rm <container ID>

Ou, para excluir todos os contentores parados, utilize o parâmetro prune como abaixo.

> docker container prune

Source:
https://adamtheautomator.com/docker-windows/