Contêineres do Windows

O que são Contêineres

Os contêineres são uma maneira de encapsular um aplicativo dentro de sua própria caixa isolada. O aplicativo em seu contêiner não tem conhecimento dos outros aplicativos ou processos que existem fora da sua caixa. Tudo o que é necessário para o aplicativo ser executado com êxito também reside nesse contêiner. Aonde a caixa for, o aplicativo sempre estará satisfeito, porque estará acompanhado de tudo o que é necessário para ser executado.

Imagine uma cozinha. Empacotamos todos os utensílios e móveis, as panelas, o detergente para louças e as toalhas de mão. Esse é o nosso contêiner.

Agora podemos levar esse contêiner para qualquer apartamento que quisermos e ele continuará sendo a mesma cozinha. Basta conectar eletricidade e água a ele e já poderemos começar a cozinhar (porque temos todos os utensílios de que precisamos!)

Os contêineres são como essa cozinha. Pode haver diferentes tipos de cômodos, bem como muitos cômodos de um mesmo tipo. O que importa é que os contêineres vêm empacotados com tudo de que precisam.

Assista a uma breve visão geral: Windows-based containers: Modern app development with enterprise-grade control (Contêineres baseados em Windows: desenvolvimento de aplicativos modernos com controle de nível empresarial).

Conceitos básicos de Contêineres

Os contêineres são ambientes de tempo de execução portáteis, isolados e controlados por recursos, que são executados em um computador host ou máquina virtual. Um aplicativo ou processo executado em um contêiner é empacotado com todas as dependências e os arquivos de configuração necessários. Ele tem a ilusão de que não existem outros processos em execução fora de seu contêiner.

O host do contêiner provisiona um conjunto de recursos para o contêiner e este usará apenas esses recursos. Para o contêiner, não há nenhum outro recurso além daqueles que foram recebidos e, portanto, ele não é capaz de acessar recursos provisionados para um contêiner vizinho.

Os conceitos principais a seguir poderão ser úteis quando você começar a criar e trabalhar com Contêineres do Windows.

Host do contêiner: sistema de computador físico ou virtual configurado com o recurso de contêiner do Windows. O host do contêiner executará um ou mais Contêineres do Windows.

Imagem de contêiner: conforme as modificações são feitas em um sistema de arquivos ou registro de contêineres, assim como na instalação de software, elas são capturadas em uma área restrita. Em muitos casos, pode ser recomendável capturar esse estado para que os novos contêineres criados herdem essas alterações. É isso que é uma imagem – depois que o contêiner parar, qualquer um pode descartar essa área restrita ou você pode convertê-la em uma nova imagem de contêiner. Por exemplo, vamos imaginar que você implantou um contêiner da imagem do sistema operacional Windows Server Core. Você irá então instalar o MySQL neste contêiner. Criar uma nova imagem desse contêiner deverá atuar como uma versão implantável do contêiner. Essa imagem conterá apenas as alterações feitas (MySQL); no entanto, ela funcionará como uma camada sobre a imagem do SO do contêiner.

Área restrita: depois de um contêiner ser iniciado, todas as ações de gravação como modificações no sistema de arquivos, modificações no Registro ou instalações de software são capturadas nesta camada de “área restrita”.

Imagem do sistema operacional do contêiner: contêineres são implantados por meio de imagens. A imagem do sistema operacional do contêiner é a primeira potencialmente de muitas camadas de imagem que compõem um contêiner. Essa imagem fornece o ambiente do sistema operacional. Uma imagem de sistema operacional do contêiner é imutável. Ou seja, ela não pode ser modificada.

Repositório de contêiner: sempre que uma imagem de contêiner for criada, esta imagem e suas dependências serão armazenadas em um repositório local. Essas imagens podem ser reutilizadas várias vezes no host do contêiner. As imagens de contêiner também podem ser armazenadas em um registro público ou privado como o DockerHub para que elas possam ser usadas em vários hosts de contêiner diferentes.

Para alguém familiarizado com máquinas virtuais, contêineres podem parecer muito similares. Um contêiner executa um sistema operacional, tem um sistema de arquivos e pode ser acessado por meio de uma rede como se fosse um sistema de computador físico ou virtual. No entanto, a tecnologia e os conceitos por trás dos contêineres são muito diferentes das máquinas virtuais.

Mark Russinovich, especialista em Microsoft Azure, tem uma postagem de blog excelente que detalha as diferenças.

Tipos de Contêiner do Windows

Contêineres do Windows incluem dois tipos diferentes de contêiner ou tempos de execução.

Contêineres do Windows Server: fornecem isolamento de aplicativos por meio da tecnologia de isolamento de processo e de namespace. Um contêiner do Windows Server compartilha um kernel com o host do contêiner e com todos os contêineres em execução no host. Esses contêineres não fornecem um limite de segurança hostil e não devem ser usados para isolar código não confiável. Devido ao espaço de kernel compartilhado, esses contêineres exigem a mesma versão e configuração de kernel.

Isolamento do Hyper-V: expande o isolamento fornecido pelos contêineres do Windows Server executando cada contêiner em uma máquina virtual altamente otimizada. Nessa configuração, o kernel do host do contêiner não é compartilhado com outros contêineres no mesmo host. Esses contêineres são projetados para hospedagem multilocatário hostil com as mesmas garantias de segurança de uma máquina virtual. Como esses contêineres não compartilham o kernel com o host ou outros contêineres no host, eles podem executar kernels com diferentes versões e configurações (em versões compatíveis). Por exemplo, todos os contêineres do Windows no Windows 10 usam o isolamento do Hyper-V para utilizar a versão e a configuração de kernel do Windows Server.

Executar um contêiner no Windows, com ou sem o isolamento do Hyper-V é uma decisão de tempo de execução. Inicialmente, você pode optar por criar o contêiner com isolamento do Hyper-V e, posteriormente, no tempo de execução, escolher executá-lo como um contêiner do Windows Server.

O que é o Docker?

Ao ler sobre contêineres, você inevitavelmente encontrará menções ao Docker. O Docker é o recipiente pelo qual imagens de contêiner são empacotadas e entregues. Esse processo automatizado produz imagens (efetivamente modelos) que podem ser executadas em qualquer lugar, no local, na nuvem ou em um computador pessoal, como um contêiner.

Assim como qualquer outro contêiner, um Contêiner do Windows Server pode ser gerenciado com o Docker.

Contêineres para Desenvolvedores

Desde uma área de trabalho do desenvolvedor até uma máquina de teste ou um conjunto de máquinas de produção, é possível criar uma imagem do Docker para implantação idêntica em qualquer ambiente em questão de segundos. Este artigo criou um ecossistema enorme e crescente de aplicativos empacotados em contêineres do Docker, com o DockerHub, o registro de aplicativos em contêiner público que mantém o Docker, publicando atualmente mais de 180 mil aplicativos no repositório público da comunidade.

Quando você coloca um aplicativo em um contêiner, apenas o aplicativo e os componentes necessários para executá-lo são combinados em uma “imagem”. Os contêineres são então criados usando essa imagem conforme necessário. Você também pode usar uma imagem como uma linha de base para criar uma outra, tornando ainda mais rápida a criação de imagens. Vários contêineres podem compartilhar a mesma imagem, o que significa que os contêineres iniciam rapidamente e usam menos recursos. Por exemplo, você pode usar contêineres para criar componentes de aplicativo leves e portáteis (ou “microsserviços”) para aplicativos distribuídos, além de dimensionar rapidamente cada serviço separadamente.

Como o contêiner tem tudo o que precisa para executar o aplicativo, eles são muito portáteis e podem ser executado em qualquer computador que esteja executando o Windows Server 2016. Você pode criar e testar contêineres localmente para depois implantá-lar a mesma imagem de contêiner na nuvem privada da sua empresa, em uma nuvem pública ou em um provedor de serviços. A agilidade natural dos Contêineres dá suporte a padrões de desenvolvimento de aplicativos modernos em grande escala, virtualizados e em ambientes de nuvem.

Com os contêineres, os desenvolvedores podem criar um aplicativo em qualquer linguagem. Esses aplicativos são totalmente portáteis e podem ser executados em qualquer lugar (laptop, desktop, servidor, nuvem privada, nuvem pública ou provedor de serviços) sem quaisquer alterações de código.

Contêineres ajudam os desenvolvedores a criar e fornecer aplicativos de alta qualidade com maior rapidez.

Contêineres para Profissionais de TI

Profissionais de TI podem usar contêineres para fornecer ambientes padronizados para suas equipes de produção, controle de qualidade e desenvolvimento. Eles não precisam se preocupar com as etapas complexas de instalação e configuração. Usando os contêineres, os administradores do sistema afastam as diferenças em instalações do sistema operacional e da infraestrutura subjacente.

Contêineres ajudam os administradores a criar uma infraestrutura muito mais simples de atualizar e manter.

Visão geral em Vídeo

Experimente os Contêineres do Windows Server

Pronto para começar a aproveitar o incrível poder dos contêineres? Confira os links abaixo para praticar a implantação do seu primeiro contêiner:
Se você for usuário do Windows Server, acesse - Introdução Rápida ao Windows Server
Se for usuário do Windows 10, acesse - Introdução Rápida ao Windows 10