Docker no Windows? Comece a aprender agora ou…!

Se você é novo em containers e Docker e trabalha principalmente no Windows, está prestes a se surpreender. Neste artigo, você aprenderá como configurar o Docker no Windows 10 usando o Docker Desktop for Windows ou simplesmente referido como 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 demonstrando vários passos no Docker Desktop para Docker no Windows. Para seguir junto, certifique-se de ter alguns requisitos específicos em vigor primeiro.

  • Uma conexão com a Internet para baixar mais de 800 MB 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
  • A virtualização de hardware da BIOS às vezes rotulada como Tecnologia de Virtualização ou VTx. Isso deve estar habilitado e ser exibido 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, você precisa baixar e instalar o Docker Desktop para 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 um aplicativo totalmente testado. Neste artigo, você usará a versão estável.

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

Você também tem a opção de fazer o download diretamente do Docker Desktop no site Docker.com ou por meio do gerenciador de pacotes do Windows, Chocolatey. Vamos abordar brevemente cada método.

No site 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 é preferível 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.

Depois que o EXE for baixado, execute o executável e siga as instruções aceitando todas as configurações padrão.

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

Installing Docker Desktop

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

Selecionar a opção de usar contêineres do Windows ou contêineres do Linux indica 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 Alterar para contêineres do Windows, conforme mostrado abaixo.

Switching to Windows containers

Usando o Chocolatey

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

choco install docker-desktop

Depois de concluído, reinicie o Windows 10.

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

Validando a Instalação do Docker Desktop

Depois de instalado, o Docker Desktop é executado automaticamente como um serviço fornecendo o Docker no Windows. Ele é mostrado na bandeja do sistema quando você faz login no Windows após reiniciar. Mas como você realmente sabe que 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 foi bem-sucedida, você verá uma referência de comando Docker.

Por fim, faça o Docker baixar e executar uma imagem de contêiner 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 Contêineres Docker

O Docker Desktop está instalado e você verificou que tudo está 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, primeiro você 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 como 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 tudo de uma vez.

Se você deseja manter o contêiner em execução, também pode usar o parâmetro -it. Este parâmetro diz 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 então estará 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 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 o seu container. Esse processo é chamado de vínculo.

Para criar um vínculo, crie uma pasta em uma unidade local. Para este exemplo, vou usar E:\ e chamá-la de input. Em seguida, crie 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 --mount. O parâmetro --mount requer três argumentos: um tipo de montagem, um caminho de diretório de origem do host 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 todo o 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 essa unidade com os containers do Docker, como visto abaixo.

Sharing a Docker drive

Se você criou o arquivo file.txt na pasta do Windows 10 conforme descrito anteriormente, execute cat /home/TEST/input/file.txt. Você verá que o conteúdo é exibido.

Agora, exclua a pasta input que você acabou de criar e execute novamente o comando cat .... 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 a saber é como o Docker no Windows lida com a rede. Para uma breve introdução, vejamos 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. Faça o download e execute a imagem Docker chamada dockersamples/static-site. Você usará o docker container run para fazer isso.

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

  • Faz o download de uma imagem Docker do Docker Hub chamada static-site no “diretório” docker-samples
  • Inicia uma instância de contêiner a partir da imagem static-site
  • Desvincula 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

Após a execução, o Docker retornará o ID do contêiner que foi iniciado, conforme mostrado abaixo.

Docker container ID returned from running a container

Publicação de Portas de Rede

Desde que você utilize 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 as portas atribuídas a cada um deles. No exemplo abaixo, um contêiner está em execução, mapeando a porta do host 32777 para a porta 80 do contêiner e a porta do host 32776 para a porta 443 do contêiner.

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 explicitamente definidas.

Agora, abra um navegador da web e acesse http://localhost:32777 ou a porta que o Docker atribuiu para mapear 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 fornecendo 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 aleatória de porta com --publish-all. Sem problemas. Use o parâmetro -p.

Primeiro, pare o contêiner em execução especificando uma cadeia única de seu ID de contêiner. Você pode encontrar este ID de contêiner executando docker ps. Uma vez que você saiba o ID do contêiner, pare-o e inicie um novo, designando ao Docker a atribuição de 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 da 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 o ID dele for f766f4ac8d66bf7, você pode identificar o contêiner usando qualquer número de caracteres, incluindo apenas f. A exigência é que o que você digitar permita identificar unicamente 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 separados por espaços. Abaixo, você pode ver um exemplo de como parar três contêineres com IDs fd50b0a446e7, 36ee57c3b7da e 7c45664906ff.

> docker stop fd50 36ee 7c45

Se você está gerenciando contêineres Docker no PowerShell, também pode usar um atalho para parar todos os contêineres. Alimente uma lista de IDs de contêiner via docker ps -q para o parâmetro de parada através da expansão de comando do PowerShell docker stop (docker ps -q).

Confirme que todos os contêineres estão parados ao ver que nenhum contêiner é listado quando você digita docker ps.

Limpeza

Você baixou algumas imagens de contêiner e executou alguns contêineres que agora estão parados. Mesmo que estejam parados, o armazenamento alocado não desapareceu do disco do host local. Você deve excluir os contêineres para liberar esse espaço e evitar bagunçar sua área de trabalho.

Para excluir um único contêiner, use o parâmetro de remoção de contêiner rm como abaixo.

> docker container rm <container ID>

Ou, para excluir todos os contêineres parados, use o parâmetro prune como abaixo.

> docker container prune

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