Comparativo entre VM e container
Virtual Machine (VM)
Caso 1 (1 aplicação = 1 servidor)
-
Problemas
-
Custo elevado na manutenção e recursos da máquina
-
Escalonamento vertical
Escalonamento vertical é a ação de aumentar os recursos utilizados, como por exemplo CPU e memória.
-
Downtime elevado
-
Caso 2 (OS compartilhado)
-
Vantagens em relação ao "caso 1"
- Redução no custo
-
Problemas
-
Falta de isolamento de dependências e serviços após alguma atualização de uma das aplicações
-
Dificuldade nas trocas de versões da aplicação
-
Downtime elevado
-
Caso 3 (Virtual Server)
-
Vantagens
-
Maior isolamento entre aplicações (OS / binários para cada aplicação)
-
A partir do Hypervisor é possível salvar snapshots da imagem da VM (facilidade na persistência e gerenciamento de backups)
-
Redução no downtime entre atualizações
-
Container
Características
- Substituição do Hypervisor por um Container Engine (Exemplo: Docker Engine)
A virtualização com um Container Engine é em nível de sistema operacional
- Imutabilidade das imagens (em caso de alteração da imagem, é necessário recriá-la)
Vantagens
-
Simplificação na gestão (1 único sistema operacional e os container runtime o simula)
-
Economia de recurso
-
Controle de memória e CPU para cada container
-
Troca das versões facilidade e sem downtime entre as as atualizações
-
Viabilizam implantações bem sucedidas
-
Imagens de containers garantem eficiência na entrega da aplicação
-
Inibem dependências ausentes ou incorretas
-
Evitam conflitos entre programas/bibliotecas
-
-
Descrevem a aplicação a ser implantada
OBS
Os containers proporciona uma séria de benefícios, porém ainda possuem pontos de melhoria e que outras ferramentas, como o Kubernetes, fazem de forma mais eficiente. Como por exemplo:
-
Para DevOps
-
Implantações bem sucedidas
-
Alta disponibilidade
-
Escalabilidade
-
Segurança
-
-
Para Devs
- Interface agradável (apenas CLI)
cli é a interface mais agradável existente :-P
Sobre os pontos "Problemas que os containers ainda não resolvem" queria que explicasse melhor, porque pra mim não me parecem problemas de fato. Por exemplo, segurança, os containers do docker são executados em um sistema de arquivos isolado, definido pelo programador. Assim como o docker te permite definir como seus containers interagem atráves da rede criada pelo docker. Pra mim, esses pontos são a favor da segurança, e não ao contrário.