Imagens de contêineres no Windows Server

No início rápido do Windows Server anterior, um contêiner do Windows foi criado de uma amostra do .Net Core pré-existente. Este exercício detalhará a criação de imagens de contêiner personalizado manualmente, automatizando a criação de imagens de contêiner usando um Dockerfile e armazenando imagens de contêiner no Registro público do Hub do Docker.

Este guia rápido é específico para contêineres do Windows Server no Windows Server 2016 e usará a imagem base do contêiner do Windows Server Core. É possível encontrar documentação adicional de início rápido no sumário à esquerda desta página.

Pré-requisitos:

  • Um sistema de computador (físico ou virtual) executando o Windows Server 2016.
  • Configure este sistema com o recurso de contêiner do Windows e o Docker. Para obter um passo a passo sobre essas etapas, consulte Contêineres do Windows no Windows Server.
  • Uma ID de Docker, que será usada para enviar por push uma imagem de contêiner para o Hub do Docker. Se você não tiver uma ID de Docker, inscreva-se para obter uma na Nuvem do Docker.

1. Imagem de contêiner – manual

Para obter a melhor experiência, percorra este exercício de um shell de comando do Windows (cmd.exe).

A primeira etapa na criação manual de uma imagem de contêiner é implantar um contêiner. Para este exemplo, implante um contêiner de IIS por meio da imagem do IIS criada previamente. Após o contêiner ter sido implantado, você estará trabalhando em uma sessão do shell de dentro do contêiner. A sessão interativa é iniciada com o sinalizador -it. Para encontrar detalhes sobre os comandos Docker Run, consulte Docker Run Reference (Referência do Docker Run) no Docker.com.

Esta etapa pode levar algum tempo devido ao tamanho da imagem base do Windows Server Core.

docker run -d --name myIIS -p 80:80 microsoft/iis

Agora, o contêiner será executado em segundo plano. O comando padrão incluído no contêiner, ServiceMonitor.exe, que monitora o progresso do IIS e para automaticamente o contêiner se o IIS parar. Para saber mais sobre como essa imagem foi criada, consulte Microsoft/docker-iis no GitHub.

Em seguida, inicie um cmd interativo no contêiner. Isso permitirá que você execute comandos no contêiner em execução sem parar o IIS ou ServiceMonitor.

docker exec -i myIIS cmd 

Em seguida, você pode fazer uma alteração no contêiner em execução. Execute o seguinte comando para remover a tela inicial do IIS.

del C:\inetpub\wwwroot\iisstart.htm

E o seguinte para substituir o site do IIS padrão por um novo site estático.

echo "Hello World From a Windows Server Container" > C:\inetpub\wwwroot\index.html

De um sistema diferente, navegue até o endereço IP do host do contêiner. Agora você deverá ver o aplicativo “Hello World”.

Observação: se você estiver trabalhando no Azure, deverá haver uma regra de grupo de segurança de rede que permita o tráfego pela porta 80. Para obter mais informações, consulte Criar regra em um grupo de segurança de rede.

Novamente no contêiner, saia da sessão interativa do contêiner.

exit

O contêiner modificado agora pode ser capturado em uma nova imagem de contêiner. Para fazer isso, você precisará do nome do contêiner. Pode ser encontrado usando o comando docker ps -a.

docker ps -a

CONTAINER ID     IMAGE                             COMMAND   CREATED             STATUS   PORTS   NAMES
489b0b447949     microsoft/iis   "cmd"     About an hour ago   Exited           pedantic_lichterman

Para criar a nova imagem de contêiner, use o comando docker commit. A confirmação de Docker assume uma forma de “docker commit container-name new-image-name”. Observação: substitua o nome do contêiner neste exemplo pelo nome real do contêiner.

docker commit pedantic_lichterman modified-iis

Para verificar se a nova imagem foi criada, use o comando docker images.

docker images

REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
modified-iis        latest              3e4fdb6ed3bc        About a minute ago   10.17 GB
microsoft/iis       windowsservercore   c26f4ceb81db        2 weeks ago          9.48 GB
windowsservercore   10.0.14300.1000     dbfee88ee9fd        8 weeks ago          9.344 GB
windowsservercore   latest              dbfee88ee9fd        8 weeks ago          9.344 GB

Essa imagem agora pode ser implantada. O contêiner resultante incluirá todas as modificações capturadas.

2. Imagem de contêiner – Dockerfile

No último exercício, um contêiner foi manualmente criado, modificado e capturado em uma nova imagem de contêiner. O Docker inclui um método para automatizar esse processo usando um Dockerfile. Este exercício terá resultados quase idênticos ao último, no entanto, desta vez o processo será automatizado. Para este exercício, é necessária uma ID de Docker. Se você não tiver uma ID de Docker, inscreva-se para obter uma na Nuvem do Docker.

No host do contêiner, crie um diretório c:\build e, nesse diretório, crie um arquivo chamado Dockerfile. Observação: o arquivo não deve ter uma extensão de arquivo.

powershell new-item c:\build\Dockerfile -Force

Abra o Dockerfile no Bloco de Notas.

notepad c:\build\Dockerfile

Copie o texto a seguir para o Dockerfile e salve o arquivo. Esses comandos instruem Docker a criar uma nova imagem, usando microsoft/iis como base. O dockerfile executa os comandos especificados na instrução RUN, neste caso, o arquivo index.html é atualizado com conteúdo novo.

Para obter mais informações sobre Dockerfiles, consulte a Dockerfiles on Windows (Dockerfiles no Windows).

FROM microsoft/iis
RUN echo "Hello World - Dockerfile" > c:\inetpub\wwwroot\index.html

O comando docker build iniciará o processo de criação da imagem. O parâmetro -t instrui o processo de criação para nomear a nova imagem como iis-dockerfile. Substitua 'user' pelo nome de usuário da sua conta de Docker. Se você não tiver uma conta com o Docker, inscreva-se para obter uma na Nuvem do Docker.

docker build -t <user>/iis-dockerfile c:\Build

Quando concluído, você poderá verificar se a imagem foi criada usando o comando docker images.

docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
iis-dockerfile      latest              8d1ab4e7e48e        2 seconds ago       9.483 GB
microsoft/iis       windowsservercore   c26f4ceb81db        2 weeks ago         9.48 GB
windowsservercore   10.0.14300.1000     dbfee88ee9fd        8 weeks ago         9.344 GB
windowsservercore   latest              dbfee88ee9fd        8 weeks ago         9.344 GB

Agora, implante um contêiner com o seguinte comando, substituindo novamente o usuário pela ID do Docker.

docker run -d -p 80:80 <user>/iis-dockerfile ping -t localhost

Quando o contêiner tiver sido criado, acesse o endereço IP do host do contêiner. Você deverá ver o aplicativo hello world.

De volta ao host do contêiner, use docker ps para obter o nome do contêiner e docker rm para remover o contêiner. Observação: substitua o nome do contêiner neste exemplo pelo nome real do contêiner.

Obtenha o nome do contêiner.

docker ps

CONTAINER ID   IMAGE            COMMAND               CREATED              STATUS              PORTS                NAMES
c1dc6c1387b9   iis-dockerfile   "ping -t localhost"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp   cranky_brown

Remova o contêiner.

docker rm -f <container name>

3. Push do Docker

Imagens de contêineres do Docker podem ser armazenadas em um Registro de contêiner. Depois que uma imagem é armazenada em um Registro, ela pode ser recuperada para uso posterior em vários hosts de contêiner diferentes. O Docker oferece um Registro público para armazenar imagens de contêiner no Hub do Docker.

Para este exercício, a imagem hello world personalizada será enviada por push para sua própria conta no Hub do Docker.

Primeiro, faça logon em sua conta do Docker usando docker login command.

docker login

Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.

Username: user
Password: Password

Login Succeeded

Depois de conectado, a imagem de contêiner pode ser enviada por push para o Hub do Docker. Para fazer isso, use o comando docker push. Substitua 'user' pela sua ID de Docker.

docker push <user>/iis-dockerfile

A imagem de contêiner agora pode ser baixada do Hub do Docker em qualquer host do contêiner do Windows usando docker pull. Para este tutorial, podemos excluir a imagem existente e puxá-la do Hub do Docker.

docker rmi <user>/iis-dockerfile

A execução do docker images mostrará que a imagem foi removida.

docker images

REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
modified-iis              latest              51f1fe8470b3        5 minutes ago       7.69 GB
microsoft/iis             latest              e4525dda8206        3 hours ago         7.61 GB

Por fim, efetuar pull do Docker pode ser usado para puxar a imagem de volta para o host do contêiner. Substitua user pelo nome de usuário da sua conta de Docker.

docker pull <user>/iis-dockerfile

Próximas etapas

Contêineres do Windows no Windows 10