Olá Pessoal!
Se você parou por alguns minutos para ler algumas das novidades do Windows Server 2016, com certeza já se deparou com a seguintes frases: “…O Windows Server 2016 suporta virtualização baseada em containers…”, “…Total integração com a plataforma Docker“, “Containers Images“, entre outras. Antes de explicar o que são containers, é importante saber que tal conceito já é muito bem difundido no “mundo Linux”, por meio do recurso LXC (Linux Containers).
Containers
Para entender o conceito por trás dos containers, é necessário retomar o conteúdo abortado nas disciplinas de sistemas operacionais e e lembrar que um sistema operacional possui dois modos distintos de operação: Kernel Mode – onde reside as funções básicas do núcleo do sistema e User Mode – onde reside aplicações dos usuários e processos não relacionados ao núcleo. O processador alterna entre esses dois modos dependendo do processo em execução, garantindo que se uma aplicação falhar ou apresentar um comportamento inesperado, a mesma não comprometa a estabilidade do sistema.
Atualmente, é comum a implantação de máquinas virtuais com objetivo de isolar (dentro do mesmo hardware) diferentes sistemas operacionais, cada um com seu User Mode e Kernel Mode independente, podendo assim hospedar aplicações distintas e não compatíveis entre si. As máquinas virtuais também garantem um melhor aproveitando dos recursos de hardware, evitando um fenômeno muito conhecido nos anos 90 como “dispersão de servidores”. Essa abordagem traz inúmeras vantagens, porém eleva consideravelmente o grau de complexidade do ambiente – Quanto maior o número de máquinas virtuais, maior serão os desafios para gerenciar updates de segurança, reinicializações, instalações, entre outros.
Compreendendo todos esses pontos, não seria interessante a criação de mais de um User Mode por Kernel Mode? É exatamente isso que os containers proporcionam – Virtualização em nível de sistema operacional, ou seja, Cada container é executado em um User Mode individual (virtualizado), o que garante isolamento (não tão seguro quanto o isolamento oferecido por máquinas virtuais tradicionais) e uma visão exclusiva dos recursos de hardware, mesmo compartilhando um núcleo comum (Figura 1).
Observando a Figura 1, fica bem claro que cada container em execução compartilha o mesmo kernel Mode, logo não existe a possibilidade da execução de sistemas operacionais distintos por container (essa é a primeira grande diferença da virtualização baseada em hypervisor). Containers utilizam menos recursos de hardware, uma vez que não são baseados em instalações tradicionais do sistema operacional, podem ser provisionados em alguns segundos e são ideais para ambientes de desenvolvimento e testes de aplicações.
Assim como acontece atualmente no Linux, O Windows Server 2016 está totalmente integrado ao Docker, uma plataforma aberta para desenvolvedores e administradores de sistemas utilizada para distribuir, executar e construir containers.
Chega de teoria e vamos ver o funcionamento básico de um container na prática. Para isso, você precisa de uma instalação física ou virtual do Windows Server 2016 com acesso a Internet e com TODOS os updates de segurança instalados. Em meu ambiente estou executando o Windows Server 2016 dentro do Hyper-V do Windows 10 Buid 1607.
1. Instalar o Docker
Para instalar o Docker usaremos o OneGet Provider PowerShell Module, esse modulo do Windows PowerShell irá habilitar o recurso de containers no Windows Server 2016 bem como instalar a ultima versão da plataforma Docker (pré-requisito para utilização de containers). Após a instalação o servidor deve ser reiniciado.
Após o servidor ser reiniciado, verifique se a plataforma Docker (cliente e servidor) foram devidamente instalados:
2. Instalar a imagem base
Antes de trabalhar com containers, é necessário instalar uma imagem base. Na plataforma Docker é possível encontrar duas imagens para o Windows Server 2016 – ServerCore e NanoServer. Note que não existe imagem com suporte a interface gráfica do Windows.
Note que também é possível utilizar o comando docker pull microsoft/nanoserver para baixar a imagem base do Windows Server 2016 Nano Server.
Imagens com aplicações personalizadas também estão disponíveis na plataforma Docker:
Visualizar as imagens baixadas no repositório local:
3. Instalar o IIS na imagem baixada:
Execute a imagem anteriormente baixada (nesse ponto o container é realmente colocado em execução). O parâmetro “-it” significa que iremos conectar ao container de maneira interativa, executando o Windows PowerShell. O Parâmetro “-p 80:80” redireciona o tráfego para porta 80 do container:
Agora já estamos conectados interativamente ao container por meio de uma sessão do Windows PowerShell:
Por padrão, todo container é conectado a rede 172.16.0.0/12 que está vinculada a um switch virtual do tipo NAT. Com isso, o container consegue interagir com o host e acessar a Internet de forma transparente:
A partir do host, acesse o site padrão do IIS hospedado dentro do container:
Esse foi um exemplo prático para mostrar como os containers podem ser úteis em um ambiente para desenvolvimento e testes de aplicações. Todo container é somente leitura, ou seja, após a finalização da sessão do Windows PowerShell todo seu conteúdo é perdido. É possível criar imagens personalizadas de containers, com aplicações especificas instaladas e prontas para entrar em produção. Esse artigo teve como objetivo principal apenas quebrar a barreira inicial no mundo dos containers, em futuras publicações irei detalhar a criação de imagens personalizadas, configuração de switch virtual, etc.
Abraços!