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.
Transforme-se em um profissional Container requisitado pelo mercado.
Conheça nossa Assinatura de Cursos Container:
Composta por
6 cursos
+180 horas de conteúdo
1 ano de acesso à plataforma
Acesso imediato aos cursos
Com 2 principais vantagens:
- Única plataforma de curso com cursos práticos e aula ao vivo.
- Única escola que também implementa projeto trazendo a experiência para sala de aula.
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…