Virtualização de Containers (Docker) X VMs

Tempo de leitura: 5 minutos

Containers X VMs
Containers X VMs – Vamos entender como tudo funciona!

Containers, vamos aprender um conceito importante sobre Cloud Computing.

Várias implementações de virtualização de Containers (como o Docker por exemplo) estão fazendo sucesso na computação em nuvem, um espaço antes dominado pela virtualização via hypervisor.

Containers é uma das tendências mais quentes de TI. Um relatório da DataDog, uma empresa com uma plataforma de monitoramento de infraestrutura de TI em SaaS, lançou em 2015, um relatório indicando o aumento do uso de containers em 5x em apenas 1 ano.

Os containers têm facilitado o desenvolvimento ágil e aplicação da metodologia Devops e isso tem aquecido o mercado e soluções poderosas têm sido disponibilizadas. O Google usa containers a mais de 1 década (veja aqui). Mas o assunto nunca foi tão comentado ultimamente, juntamente com o uso do Cloud Computing.

Os containers substituem a virtualização com Hypervisor, então precisamos entender o que cada um oferece para termos certeza que a transição para Docker é uma escolha assertiva.

O que são máquinas virtuais?

Á medida que o poder de processamento e a capacidade dos servidores aumentavam, as aplicações no bare-metal não eram capazes de utilizar a nova abundancia de recursos. Assim as VMs vieram, projetadas executando software em cima de servidores fisicos para emular um sistema de hardware especifico. Um hypervisor é um software que cria e executa máquinas virtuais. É o que fica entre o SO e o hardware, sendo utilizado para virtualizar o servidor. (destacamos vmWare, Xen, Hyper-V e até o VirtualBox).

Dentro de cada VM é executado um sistemas operacional exclusivo. As VMs com diferentes sistemas, podem ser executadas no mesmo servidor fisico. Cada VM tem seus proprios binarios, kernel, bibliotecas, aplicativos e isso as tornam muito grande em termos de espaço no servidor.

A virtualização trouxe uma variedade de benefícios, sendo uma das maiores a capacidade de consolidar aplicativos em único sistema. A virtualização conduziu uma redução de custos através da possibilidade de um provisionamento mais rápido e uma capacidade de recuperação de desastres melhorada. Ambientes de desenvolvimento/QA também se beneficiaram desta consolidação da virtualização, onde por exemplo, com uma maior utilização de servidores mais potentes liberou servidores não utilizados para montagem destes ambientes.

E os containers?

A virtualização do sistema operacional tem crescido em popularidade na última década como mum meio de permitir que o software funcione de forma previsível mesmo movido de um servidor para outro. Os containers fornecem uma maneira de executar esses sistemas isolados em um único sistema operacional servidor/host.

Os containers ficam em cima de um servidor físico e seu sistema operacional hospedeiro. Cada container compartilha o kernel do SO host e geralmente, os binários e bibliotecas também. Componentes compartilhados são somente leitura e isso torna os containers excepcionalmente leve. Os containers têm tamanhos estimados em MB e levam segundos para serem iniciados contra os minutos e os varios gigabytes de uma VM inteira.

Containers fornecem o básico necessário para qualquer aplicativo ser executado em um sistema operacional hospedeiro.
Você poderia pensar neles como máquinas virtuais que executam o software com apenas o suficiente para implantar um aplicativo.

Tecnicamente, o kernel Linux por si só não tem nenhum indício que existem Containers vivendo no andar de cima, mas containers podem, no entanto, partilhar recursos de kernel através de recursos como Namespaces, cgroups e chroot. Estes permitem que os Containers isolem processos e possam gerir totalmente os recursos e garantir a segurança adequada.

Vamos aprender um pouco mais sobre essas três ferramentas (Namespaces, cgroups e chroot):

Namespaces para sistemas Linux são:

Uma forma de embrulhar um recurso global do sistema em uma abstração que faz com que pareça que os processos dentro do namespace tenham a sua própria instância isolado do recurso global.

Se namespaces ajuda os processos a terem seu próprio ambiente, chroot pode isolar os namespaces do resto do sistema e, assim, proteger contra ataques ou interferência de outros Containers no mesmo host. Usando namespaces e chroot, você pode criar um contêiner lógico com a sua própria visão do sistema, mas você também vai precisar alocar recursos para o seu novo Container.
Isto pode ser feito usando cgroups. cgroups é um recurso do kernel Linux responsável por isolar a utilização de recursos como CPU, memória, I/O de disco, e da rede, a partir de um conjunto de processos.

São estes três ingredientes que criam a magia de virtualização de Containers.
A arquitetura básica é usada atualmente em uma verdadeira coleção de implementações, o mais famoso é o Docker e o rkt da CoreOS.

Os benefícios dos containers se resumem em velocidade e leveza. Muitos containers podem ser colocados em um mesmo servidor, contra as VMs, que poucas podem residir no mesmo. Os containers são compartilháveis e podem ser usados em uma variedade de implantações de nuvens públicas e privadas, além do ambiente on premise acelerando o desenvolvimento e teste, facilitando o empacotamento de aplicações. Além disso os containers reduzem a carga de trabalho na gestão dos sistemas operacionais, já que eles compartilham o mesmo kernel, você tem menos sistemas operacionais no seus servidores para gerenciar pacotes de atualização e segurança.

Concluímos que a diferença principal entre containers e VMs é que o container virtualiza o S.O enquanto as VMs virtualizão o hardware. No fim velocidade, agilidade e portabilidade tornam os containers uma ótima tecnologia para facilitar o desenvolvimento de software e gestão de infraestrutura de TI.

Muito bem, depois desta introdução aos princípios da tecnologia de Containers do Linux (LxC), você começar a pensar a usar o Docker para portar suas aplicações.

Quer aprender mais sobre computação em nuvem e Containers Docker?

Insira o seu endereço de email abaixo para receber gratuitamente as atualizações do blog!

>

  • Dio

    Boa explicação.

  • Antonio Júnior

    Show de bola!

  • Igor Cedro

    A melhor explicacao sobre o assunto.

  • André Machado

    E a implementação do Contêiner em cima de uma VM ? o que me diz a respeito ? é funcional ?

    • Wagner da Silva

      Tambem queria saber, por exemplo levantar uma vm com hiperV, com docher e programas nele, funciona, ou posso simplismente instalar o linux e docker e subir programas bancos de dados e outros.

  • Ricardo Carmo

    Olá Thiago, muito bom o seu artigo. Se eu entendi direito, instalar Docker e criar containers em uma máquina virtual (VM) seria uma forma burra de se beneficiar do Docker, já que você está limitado ao hardware disponibilizado pela VM… é isso mesmo? Por outro lado, quando você cria containers Docker diretamente na máquina física, quanto de memória e quanto de disco é alocado para cada container? ou isso é configurado de forma geral para todos os containers?