Containers e VMs: Diferenças e usos

Diferença entre Containers e Máquinas Virtuais

Muita gente compara containers com máquinas virtuais, e apesar dos containers não serem um substituto direto das máquinas de virtuais, ambas as tecnologias possuem conceitos similares e talvez comparando-os lado a lado facilite a compreensão.

Se “máquina virtual” é um assunto novo para você, apenas imagine que uma máquina virtual é uma máquina física transformada em software e que pode funcionar dentro de outros sistemas operacionais.

Quando abordamos temas como virtualização ou mesmo containers, temos um conceito em comum, a máquina hospedeira. A máquina hospedeira é a máquina pela qual as máquinas virtuais e/ou os containers executam, já a máquina convidada é somente a máquina virtual dentro de uma hospedeira.

A figura abaixo vai nos ajudar a entender a diferença entre containers e máquinas virtuais.

Primeira Camada

No nível mais baixo temos a infraestrutura, que pode ser nossa própria máquina ou um servidor.

Segunda Camada

Para máquinas que rodarão suas aplicações em containers temos apenas o sistema operacional, já para aqueles que rodarão máquinas virtuais temos a figura do Hypervisor, que pode ser o próprio sistema (XEN, KVM ou VMWare) ou uma aplicação dentro do sistema operacional (VirtualBox, KVM, Hyper-V).

Terceira Camada

Não colocamos uma terceira camada nas máquinas virtuais pois não há uma definição clara a respeito de Hypervisors do tipo 1 e do tipo 2, principalmente com o surgimento do KVM. Do lado dos containers aparece a figura do Container Runtime, que no nosso caso podemos entender como o Docker que veremos mais adiante, mas é interessante saber que existem outras ferramentas para criar containers no Linux.

Container runtimes são implementações de baixo nível, elas que de fato criam os containers no sistema operacional, geralmente utilizados por uma Container Engine, por exemplo, o Docker, RKT, LXD ou CRI-O.

Última Camada

Na última camada temos os nossos containers ou as nossas máquinas virtuais, cada qual com suas devidas aplicações. As máquinas virtuais são sistemas completos, com todos os seus processos, drivers e kernel, quando iniciam verificam se todo o hardware está funcional, fazem o boot do sistema operacional e então começam a rodar as aplicações. Já os containers, por sua vez, apenas iniciam a aplicação, compartilhando o kernel com o sistema hospedeiro.

Um pouco confuso? Bom, o aspecto mais básico que podemos notar é que as máquinas virtuais são sistemas operacionais completos somados a nossa aplicação e suas dependências funcionando na máquina hospedeira, enquanto os containers são praticamente apenas nossa aplicação e suas dependências, utilizando o máximo possível de “coisas” da máquina hospedeira.

As Máquinas Virtuais vão ‘morrer’?

Não, bem longe disso.

Cada caso tem sua vantagem, explicaremos alguns casos a seguir do ponto de vista do Linux:

Quando utilizar VMs:

  • Quando o sistema operacional a ser executado não é um Linux, por exemplo um Unix, ou um Windows;
  • Quando procura-se um nível de persistência de dados maior do que os próprios dados da aplicação;
  • Quando a arquitetura da aplicação for diferente da arquitetura da máquina hospedeira, por exemplo amd64 vs arm64, ou mesmo x86;
  • Quando a aplicação for antiga (legada) e sua forma de trabalho é completamente monolítica (sem sessão externa, banco local, etc).

Quando utilizar containers

  • Quando construirmos aplicações “voltadas para cloud”, ou seja, podem trabalhar em qualquer lugar;
  • Quando estamos criando microsserviços;
  • Quando queremos aplicar práticas DevOps ou de CI/CD de forma mais agressiva;
  • Quando o projeto é escalável e pode se espalhar em uma infraestrutura que compartilha o mesmo sistema operacional; Resumindo, os containers não vieram para substituir as VMs em todos os casos, é preciso ter cuidado. Mas, na teoria, onde cabe uma VM, cabe mais do que um container. Pequenos componentes, leves e fáceis de movimentar, isso me lembra do próximo assunto…

Você gostou deste artigo?

Veja outros que temos:

Fique por dentro das novidades:

Conheça nosso blog, com diversos artigos técnicos

Fique por dentro das novidades relacionadas aos softwares open source usado em nossas soluções.
Imagem de uma pessoa na frente do computador

Quer entrar para o mundo de Containers?

Conheça nosso curso online de Devops!

Somos especialistas em implementar soluções em Containers

Desde a definição de arquitetura, planejamento de capacidade até o mentoring da equipe.
plugins premium WordPress
Telegram logo
Whatsapp Logo

Temos um presente para você!

Você ganhou totalmente gratuito um curso da categoria Starter da 4Linux! São 9 opções de cursos para você escolher!

Cursos com 20h de conteúdo prático e certificado de conclusão para você dar uma upgrade na sua carreira.

Preencha o formulário abaixo e você receberá em até 24hs o email com os dados de acesso ao conteúdo: