Skip to main content

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.

success

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ísticaVMContainer
VirtualizaHardwareProcessos
KernelPróprioCompartilhado
Sistema operacionalCompletoNão possui SO próprio
PesoPesadaLeve
InicializaçãoLentaMuito rápida
IsolamentoAltoMédio
EscalabilidadeMenorMuito 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