VM vs Container | Devops
- VM vs Container | Devops
A diferença entre VM (Máquina Virtual) e Container está principalmente em como o isolamento é feito, o que é virtualizado e como o kernel é utilizado.
Vídeo explicando todo o processo - LearnThatStack: 🔗 Clique aqui
Máquina Virtual (VM)
Uma VM virtualiza o hardware inteiro por meio de um hipervisor.
Isso significa que cada máquina virtual simula um computador completo, com sistema operacional próprio e kernel independente.
Como funciona
Existe uma camada chamada hipervisor (ex: VMware, VirtualBox, Hyper-V) que cria máquinas virtuais.
Cada VM possui:
- Sistema operacional próprio
- Kernel próprio
- Bibliotecas e aplicações
- Drivers virtualizados
Arquitetura simplificada:
Hardware
↓
Hipervisor
↓
VM
├─ Kernel
├─ SO
└─ Aplicações
Vantagens
- Isolamento forte
- Segurança mais robusta
- Permite rodar sistemas operacionais diferentes no mesmo host
- Boa compatibilidade com aplicações legadas
Desvantagens
- Mais pesada
- Consome mais CPU, memória e disco
- Inicialização lenta
Container
Um container não é um processo do kernel nem um sistema operacional virtual.
Ele é um conjunto de processos normais do sistema, isolados pelo kernel usando recursos nativos como:
- Namespaces
- Cgroups
Ou seja, o container compartilha o kernel do sistema operacional do host.
Como funciona
Ferramentas como Docker e Podman criam containers usando mecanismos do próprio kernel Linux.
O isolamento ocorre por meio de:
- Namespaces (processos, rede, filesystem, usuários)
- Cgroups (controle de CPU, memória e I/O)
Arquitetura simplificada:
Hardware
↓
Kernel do Host
↓
Containers
├─ Processo 1
├─ Processo 2
└─ Processo 3
Cada container é apenas um grupo de processos isolados.
Exemplo real
Rodando um container com Docker:
docker run -it ubuntu bash
Isso inicia um processo isolado, mas ele continua sendo apenas um processo normal gerenciado pelo kernel.
Podemos verificar com:
ps aux | grep bash
O processo do container aparece como qualquer outro processo do sistema.
Vantagens
- Muito leve
- Inicialização rápida
- Compartilha o kernel
- Escalabilidade alta
- Ideal para microserviços
Desvantagens
- Isolamento menor que VM
- Containers precisam usar o mesmo tipo de kernel do host
Isolamento no kernel
Containers utilizam recursos internos do kernel:
Namespaces
Criam a ilusão de ambiente isolado:
- PID namespace: processos isolados
- Network namespace: rede isolada
- Mount namespace: filesystem isolado
Exemplo:
lsns
Lista namespaces ativos no sistema.
Cgroups
Controlam recursos:
cat /sys/fs/cgroup/memory.max
Define limite de memória.
Esses mecanismos são o motivo pelo qual containers são leves: não existe virtualização de hardware ou kernel.
Comparação rápida
| Característica | VM | Container |
|---|---|---|
| Virtualiza | Hardware | Processos |
| Kernel | Próprio | Compartilhado |
| Sistema operacional | Completo | Não possui SO próprio |
| Peso | Pesada | Leve |
| Inicialização | Lenta | Muito rápida |
| Isolamento | Alto | Médio |
| Escalabilidade | Menor | Muito alta |
Quando usar cada um
Use VM quando
- Precisar de isolamento máximo
- Executar múltiplos sistemas operacionais
- Trabalhar com ambientes críticos ou regulados
Use container quando
- Precisar de velocidade e eficiência
- Trabalhar com microserviços
- CI/CD e cloud
- Escalar aplicações rapidamente