Você é novo em Imagens do Docker para Windows? Está trabalhando atualmente em um ambiente Windows e curioso para aprender sobre a construção de imagens de contêineres com o Docker? Você veio ao lugar certo. A melhor maneira de aprender algo novo é praticando com os comandos docker build
e docker build "tag"
!
Neste artigo, você aprenderá como criar sua primeira imagem do Docker para Windows a partir de um Dockerfile usando o comando docker build
.
Vamos começar!
Entendendo Imagens de Contêineres do Docker
Por anos, a única maneira de testar ou realizar desenvolvimento 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. Essa 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êineres do Docker tem crescido em parte devido à popularidade da arquitetura de microsserviços. Em resposta ao aumento da popularidade do Docker, a Microsoft começou a apoiar publicamente imagens do Docker para vários produtos principais em sua página do Docker Hub. Eles até adicionaram suporte nativo para imagens do Windows como uma característica 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.

Compreendendo Construção e Imagens do 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 ao 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árias vantagens em relação ao uso de uma imagem de contêiner pré-construída:
- Você pode 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 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 construir uma imagem Docker usando um Dockerfile. Se você deseja acompanhar, certifique-se de ter os seguintes pré-requisitos no local.
- Docker para Windows instalado. Estarei usando a versão 2.1.0.4 da Docker Community Edition (CE) em meu ambiente.
- É necessário acesso à Internet para baixar as imagens do Docker
- Sistema Operacional Windows 10+ (a versão 1709 está sendo usada neste tutorial)
- Virtualização aninhada ativada
- 5 GB de espaço livre no disco em sua máquina local
- PowerShell 5.0+
- Este tutorial usa o Ambiente de Desenvolvimento Integrado (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.
Preparação
Primeiro, você precisará de uma pasta para armazenar todas as imagens e contêineres do Docker que serão criados 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, altere para esse diretório. Isso define o diretório de trabalho atual do console para C:\Containers para que todos os downloads sejam padrão para este diretório.
Neste artigo, você terá uma vantagem inicial. A maioria dos arquivos para trabalhar neste projeto já está disponível. Depois que a pasta for criada, execute um Git pull para copiar os arquivos necessários para este artigo do repositório do Github da TechSnips para a pasta C:\Containers. Uma vez concluído, verifique se a pasta C:\Containers parece como abaixo.

Baixando a Imagem do Docker do Windows IIS
A primeira tarefa a ser realizada é baixar uma “template” ou imagem base. Mais tarde, você construirá sua própria imagem do Docker, mas primeiro, precisa de uma imagem para começar. Você estará baixando as últimas imagens do Windows Server Core e do IIS que são necessárias para este tutorial. A lista atualizada de imagens pode ser encontrada na página oficial de imagens do Docker da Microsoft.
Revisando as Imagens Base do Docker Atuais
Antes de baixar a imagem do repositório de imagens, vamos primeiro revisar as imagens base do Docker que você possui atualmente em seu sistema local. Para fazer isso, execute um console do 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 Microsoft Windows Core IIS 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 internos.
Construindo uma Nova Imagem Docker
Você já tem o Dockerfile pronto para usar e uma imagem base do IIS baixada. Agora é hora de construir sua nova imagem Docker usando o Dockerfile.
Para construir uma nova imagem, use o comando docker build "tag"
. Este comando cria a imagem. Para este artigo, você também pode ver abaixo que está usando a opção -t **
que substitui a parte “tag”. Esta opção permite que você dê um nome de tag amigável para sua nova imagem e também faça referência ao Dockerfile especificando o caminho da pasta onde ele está localizado.
Abaixo você pode ver um exemplo de garantir que o console esteja no diretório C:\Containers e então construir uma nova imagem a partir do Dockerfile no diretório C:\Containers\Container1.
Uma vez iniciado, você pode ver o progresso do comando enquanto ele percorre cada instrução no arquivo docker linha por linha:

Quando terminar, você deverá ter uma nova imagem Docker!
Agora execute o comando docker images
para ver as imagens disponíveis. Você pode ver abaixo 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 sendo executado.
Executando o Contêiner Docker
Neste ponto, você deve 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
irá 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 depois sair quando o processo raiz usado para executar o contêiner sair.
Quando o docker run
é concluído, ele retorna o ID do contêiner criado. O exemplo abaixo está capturando esse ID em uma variável $containerID
para que possamos facilmente referenciá-lo posteriormente.

Assim que o contêiner estiver criado, execute o comando docker ps
. Este comando permite ver quais contêineres estão atualmente em execução usando cada imagem. Observe abaixo que a imagem em execução é automaticamente gerada um apelido (busy_habit neste caso). Este 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 ver a saída do PowerShell para o comando Get-ChildItem
no contêiner usando a sintaxe de comando abaixo. Isso garantirá que as instruções no Dockerfile para remover os arquivos padrão do IIS tenham sucesso.
Você pode ver abaixo que o único arquivo que existe é index.html o que significa que os arquivos padrão foram removidos.

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 comando ipconfig
foi executado no contêiner, assim como se estivesse sendo executado no seu computador local, e retornou todas as informações de IP.

ipconfig
in a Docker containerInspectando o Site do IIS
Agora é hora de revelar os frutos do seu trabalho! É hora de verificar 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 correto, você deverá ver uma mensagem Hello World!! como abaixo.

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

docker history
Limpeza das Imagens 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 no 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
.
