Você é novo em imagens Docker do Windows? Você está trabalhando atualmente em um ambiente Windows e tem curiosidade de aprender sobre construções Docker para imagens de contêiner? Você veio ao lugar certo. A melhor maneira de aprender algo novo é fazendo com os comandos docker build
e docker build "tag"
!
Neste artigo, você aprenderá como criar sua primeira imagem Docker do Windows a partir de um Dockerfile usando o comando docker build
.
Vamos começar!
Entendendo Imagens de Contêiner Docker
Por anos, a única maneira de testar ou desenvolver em vários sistemas operacionais (SO) era ter várias máquinas físicas ou virtuais dedicadas com a imagem da versão do SO de sua escolha. Esta metodologia exigia mais hardware e sobrecarga para provisionar novas máquinas para cada especificação de software e SO.
No entanto, nos dias de hoje, o uso de imagens de contêiner Docker cresceu em parte devido à popularidade da arquitetura de microsserviços. Em resposta ao aumento da popularidade do Docker, a Microsoft começou a oferecer suporte público para imagens Docker de vários produtos principais em sua página do Docker Hub. Eles até adicionaram suporte nativo para imagens para Windows como um recurso do produto no Windows 10 e no Windows Server 2016!
A Docker image is run on a container by using the Docker Engine. Docker images have many benefits such as portability (applicable to multiple environments and platforms), customizable, and highly scalable. As you can see below, unlike traditional virtual machines, the Docker engine runs on a layer between the host OS kernel and the isolated application services that are being containerized.

Entendendo Construção e Imagens Docker
O comando docker build
pode ser aproveitado para automatizar a criação de imagens de contêiner, adotar uma prática de DevOps de contêiner-como-código e integrar a contenerização no ciclo de desenvolvimento de seus projetos. Os Dockerfiles são simplesmente arquivos de texto que contêm instruções de construção usadas pelo Docker para criar uma nova imagem de contêiner baseada em uma imagem existente.
O usuário pode especificar a imagem base e a lista de comandos a serem executados quando uma imagem de contêiner é implantada ou iniciada pela primeira vez. Neste artigo, você aprenderá como criar uma imagem Docker baseada no Windows a partir de um Dockerfile usando um contêiner do Windows.
Esse processo tem vários benefícios em relação ao uso de uma imagem de contêiner pré-construída:
- É possível reconstruir uma imagem de contêiner para várias versões do Windows – o que é ótimo para testar alterações de código em várias plataformas.
- Você terá mais controle sobre o que é instalado no contêiner. Isso permitirá manter o tamanho do seu contêiner ao mínimo.
- Por motivos de segurança, você pode querer verificar o contêiner em busca de vulnerabilidades e aplicar endurecimento de segurança à imagem base.
Pré-requisitos/Requisitos
Este artigo é um guia sobre como aprender a criar uma imagem Docker usando um Dockerfile. Se desejar acompanhar, certifique-se de ter os seguintes pré-requisitos em vigor.
- Docker for Windows instalado. Estarei utilizando a versão 2.1.0.4 da Docker Community Edition (CE) em meu ambiente.
- O acesso à Internet é necessário para baixar as imagens do Docker
- Sistema Operacional Windows 10+ (a versão 1709 está sendo usada para este tutorial)
- Virtualização aninhada ativada
- 5 GB de espaço livre no disco em sua máquina local
- PowerShell 5.0+
- Este tutorial utiliza o IDE Visual Studio Code. No entanto, sinta-se à vontade para usar o IDE que preferir.
Nota: Certifique-se de habilitar a Configuração de Contêineres do Windows ao instalar o Docker.
Preparando-se
Primeiro, você precisará de uma pasta para armazenar todas as imagens e contêineres do Docker que irá construir a partir dessas imagens. Para fazer isso, abra um terminal PowerShell ou cmd (você usará o PowerShell ao longo deste artigo) e crie um novo diretório chamado C:\Containers.
Depois que a pasta for criada, mude para esse diretório. Isso coloca o diretório de trabalho atual do console em C:\Containers para definir todos os downloads para este diretório por padrão.
Neste artigo, você terá uma vantagem inicial. A maioria dos arquivos para trabalhar neste projeto já está disponível. Uma vez criada a pasta, execute um Git pull para copiar os arquivos necessários para este artigo do repositório Github do TechSnips para a pasta C:\Containers. Depois de concluído, verifique se a pasta C:\Containers está como abaixo.

Baixando a Imagem Docker do Windows IIS
A primeira tarefa a ser realizada é baixar uma “template” ou imagem base. Mais tarde, você estará construindo sua própria imagem Docker, mas primeiro, você precisa de uma imagem para começar. Você estará baixando as últimas imagens do Windows Server Core e IIS que são necessárias para este tutorial. A lista atualizada de imagens pode ser encontrada na página oficial da imagem Docker da Microsoft.
Revisando as Imagens Base Docker Atuais
Antes de baixar a imagem do repositório de imagens, vamos primeiro revisar as imagens base Docker atuais que você tem em seu sistema local. Para fazer isso, execute um console PowerShell como Administrador e então digite docker images
. Este comando retorna todas as imagens em seu sistema local.
Como você pode ver abaixo, as imagens disponíveis estão inicialmente vazias.

Baixando a Imagem Base
Agora é hora de baixar a imagem base do IIS do Docker Hub. Para fazer isso, execute docker pull
conforme mostrado abaixo. Esse processo pode levar algum tempo para ser concluído, dependendo da velocidade da sua internet.

Agora execute docker images
e você deverá ter a imagem mais recente do IIS Core do Microsoft Windows disponível para este tutorial.

Inspeção do Dockerfile
Em um passo anterior, você baixou um Dockerfile existente para este tutorial. Vamos agora dar uma olhada exatamente no que isso implica.
Abra o arquivo C:\Containers\Container1\Dockerfile no seu editor favorito. O conteúdo deste Dockerfile é usado para definir como a imagem do contêiner será configurada no momento da construção.
Você pode ver uma explicação do que cada parte deste arquivo faz nos comentários inline.
Construindo uma Nova Imagem Docker
Você já tem o Dockerfile pronto e baixou uma imagem base do IIS. Agora é hora de construir sua nova imagem Docker usando o Dockerfile.
Para construir uma nova imagem, utilize o comando docker build "tag"
. Este comando cria a imagem. Para este artigo, você pode observar abaixo que também está usando a opção -t **
, que substitui a parte “tag”. Essa opção permite que você dê um nome amigável à sua nova imagem e também referencie o Dockerfile especificando o caminho da pasta onde ele está localizado.
Abaixo, você pode ver um exemplo garantindo que o console esteja no diretório C:\Containers e, em seguida, construindo uma nova imagem a partir do Dockerfile no diretório C:\Containers\Container1.
Assim que iniciado, você pode acompanhar o progresso do comando conforme ele percorre cada instrução no arquivo docker, linha por linha:

Feito isso, agora você deve ter uma nova imagem Docker!
Agora execute o comando docker images
para visualizar as imagens disponíveis. Abaixo, você pode ver um exemplo da imagem container1 criada.

Nota: O comando
docker build —help
é um parâmetro útil para exibir informações detalhadas sobre o comando docker em execução.
Executando o Contêiner Docker
Neste ponto, você deveria ter uma nova imagem criada. É hora de iniciar um contêiner usando essa imagem. Para iniciar um novo contêiner, use o comando docker run
.
O comando docker run
criará um novo contêiner Docker com base na imagem container1 que você criou anteriormente. Você pode ver um exemplo disso abaixo.
Observe que o parâmetro -d
é utilizado. Isso indica ao tempo de execução do Docker para iniciar a imagem no modo destacado e sair quando o processo raiz usado para executar o contêiner encerrar.
Ao concluir o docker run
, ele retornará o ID do contêiner criado. O exemplo abaixo está capturando esse ID em uma variável $containerID
, para que possamos fazer referência a ele facilmente posteriormente.

Depois de iniciar o contêiner, execute o comando docker ps
. Esse comando permite visualizar quais contêineres estão em execução usando cada imagem. Observe abaixo que a imagem em execução é gerada automaticamente com um apelido (busy_habit, neste caso). Esse apelido é às vezes usado em vez do ID do contêiner para gerenciar o contêiner.

Executando Código Dentro de um Contêiner Docker
A new container is built from a new image you just created. Let’s now start actually using that container to run code. Running code inside of a Docker container is done using the docker exec
command.
Neste exemplo, execute docker exec
para visualizar a saída do PowerShell para o comando Get-ChildItem
no contêiner, usando a sintaxe abaixo. Isso garantirá que as instruções no Dockerfile para remover os arquivos padrão do IIS foram bem-sucedidas.
Você pode ver abaixo que o único arquivo que existe é index.html, o que significa que os arquivos padrão foram removidos com sucesso.

Agora, execute o comando ipconfig
no contêiner para obter o endereço IP local da imagem do contêiner, para que você possa tentar se conectar ao site do IIS.
Você pode ver abaixo que o ipconfig
foi executado no contêiner como se estivesse sendo executado em seu computador local e retornou todas as informações de IP.

ipconfig
in a Docker containerInspecting the IIS Website
Agora é hora de revelar os frutos do seu trabalho! É hora de ver se o servidor IIS em execução no contêiner Docker está servindo corretamente a página index.html.
Abra um navegador e cole o Endereço IP4 encontrado via ipconfig
na barra de endereços. Se tudo estiver bem, você deverá ver uma mensagem Hello World!! como abaixo.

Revisando o Histórico do Docker
Um comando útil a ser usado ao trabalhar com contêineres Docker é o comando docker history
. Embora não necessariamente relacionado à criação de uma imagem ou contêiner em si, o comando docker history
é um comando útil que permite revisar as alterações feitas na imagem do contêiner.
Você pode ver abaixo que o docker history
retorna toda a atividade do Dockerfile e PowerShell realizada no contêiner container1 com o qual você esteve trabalhando.

docker history
Limpando as Imagens do Docker em Execução
Os passos abaixo são usados para limpar todos os contêineres parados em execução em sua máquina. Isso liberará espaço em disco e recursos do sistema.
Execute o comando docker ps
para ver uma lista dos contêineres em execução em seu sistema:

Agora, pare os contêineres em execução usando o comando docker stop
:

Finalmente, você pode remover permanentemente os contêineres parados usando o comando docker system prune
.
