Learn Docker Help

Containers vs MΓ‘quinas Virtuais

╔═══════════════════════════════════════════════════════════════════════ β•‘ C O N T A I N E R S vs V M s β•‘ β•‘ Round 1: FIGHT! β•‘ πŸ₯Š Containers vs VMs β•‘ πŸ’₯ Quem vence essa batalha? β•‘ β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

TL;DR (Too Long; Didn't Read)

╔════════════════════╦════════════════════ β•‘ Containers β•‘ VMs ╠════════════════════╬════════════════════ β•‘ β–² Leves β•‘ β–Ό Pesadas β•‘ β–² Boot: segundos β•‘ β–Ό Boot: minutos β•‘ β–² MB de tamanho β•‘ β–Ό GB de tamanho β•‘ β–Ό Menos isolado β•‘ β–² Mais isolado β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•©β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

Anatomia Detalhada πŸ”¬

Containers em Profundidade

╔═══════════════════════════════════════════════════════════════════════ β•‘ Container A Container B Container C β•‘ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β•‘ β”‚ App A β”‚ β”‚ App B β”‚ β”‚ App C β”‚ β•‘ β”‚ Bins β”‚ β”‚ Bins β”‚ β”‚ Bins β”‚ β•‘ β”‚ Libs β”‚ β”‚ Libs β”‚ β”‚ Libs β”‚ β•‘ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β•‘ ═══════════════════════════════════════════ β•‘ Docker Engine / Container Runtime β•‘ (namespaces, cgroups, union filesystem) β•‘ ═══════════════════════════════════════════ β•‘ Sistema Operacional Host β•‘ ═══════════════════════════════════════════ β•‘ Hardware β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

Componentes do Container

  1. Namespaces

    • PID: Isolamento de processos

    • NET: Isolamento de rede

    • MNT: Pontos de montagem

    • UTS: Hostname e domínio

    • IPC: Comunicação interprocessos

    • USER: IDs de usuários

  2. Control Groups (cgroups)

    • Limita recursos (CPU, memória)

    • Priorização

    • Contabilização

    • Controle

  3. Union Filesystem

    • Camadas sobrepostas

    • Copy-on-write

    • Compartilhamento eficiente

Virtual Machines em Detalhes

╔═══════════════════════════════════════════════════════════════════════ β•‘ VM A VM B VM C β•‘ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β•‘ β”‚ App A β”‚ β”‚ App B β”‚ β”‚ App C β”‚ β•‘ β”‚ Bins β”‚ β”‚ Bins β”‚ β”‚ Bins β”‚ β•‘ β”‚ Libs β”‚ β”‚ Libs β”‚ β”‚ Libs β”‚ β•‘ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β•‘ β”‚ Kernel A β”‚ β”‚ Kernel B β”‚ β”‚ Kernel C β”‚ β•‘ β”‚ OS A β”‚ β”‚ OS B β”‚ β”‚ OS C β”‚ β•‘ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β•‘ ═══════════════════════════════════════════ β•‘ Hypervisor (Tipo 1 ou Tipo 2) β•‘ ═══════════════════════════════════════════ β•‘ Sistema Operacional Host β•‘ ═══════════════════════════════════════════ β•‘ Hardware β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

Tipos de Hypervisor

  1. Tipo 1 (Bare Metal)

    • VMware ESXi

    • Microsoft Hyper-V

    • Citrix XenServer

  2. Tipo 2 (Hosted)

    • VirtualBox

    • VMware Workstation

    • Parallels

Análise Técnica Detalhada πŸ”

1. Gerenciamento de Recursos

Containers

╔═══════════════════════════════════════════════ β•‘ Recurso Comportamento ╠═══════════════════════════════════════════════ β•‘ CPU Compartilhado + Limites cgroups β•‘ MemΓ³ria Isolada + Limites cgroups β•‘ I/O Compartilhado + Throttling β•‘ Network Virtualizada via namespaces β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

VMs

╔═══════════════════════════════════════════════ β•‘ Recurso Comportamento ╠═══════════════════════════════════════════════ β•‘ CPU Dedicado ou compartilhado β•‘ MemΓ³ria Totalmente isolada β•‘ I/O Emulado ou para-virtualizado β•‘ Network Totalmente virtualizada β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

2. Segurança e Isolamento

Containers

╔═══════════════════════════════════════════════ β•‘ Aspecto NΓ­vel ╠═══════════════════════════════════════════════ β•‘ Processo Alto β•‘ Sistema de Arquivos Alto β•‘ Network MΓ©dio β•‘ Kernel Baixo β•‘ Hardware Baixo β•‘ Vulnerabilidades Kernel compartilhado β•‘ Escape PossΓ­vel β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

VMs

╔═══════════════════════════════════════════════ β•‘ Aspecto NΓ­vel ╠═══════════════════════════════════════════════ β•‘ Processo Total β•‘ Sistema de Arquivos Total β•‘ Network Total β•‘ Kernel Total β•‘ Hardware Alto β•‘ Vulnerabilidades Isoladas por VM β•‘ Escape Muito difΓ­cil β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

3. Performance Detalhada

╔═══════════════════════════════════════════════ β•‘ MΓ©trica Containers VMs ╠═══════════════════════════════════════════════ β•‘ Boot Time 1-3 seg 30-60 seg β•‘ Tamanho Base ~100MB ~1-20GB β•‘ Overhead CPU ~1-5% ~10-30% β•‘ Overhead MemΓ³ria ~5-10% ~20-40% β•‘ I/O Performance Nativo ~90-95% β•‘ Network Performance Nativo ~90-95% β•‘ Densidade/Host 50-100+ 5-10 β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

Casos de Uso Detalhados 🎯

Containers São Ideais Para

  1. Microserviços

    • Deployments independentes

    • Escalabilidade granular

    • Ciclo de vida curto

  2. DevOps

    • CI/CD pipelines

    • Testes automatizados

    • Ambientes efêmeros

  3. Cloud Native

    • Kubernetes

    • Orquestração

    • Auto-scaling

  4. Desenvolvimento

    • Ambientes consistentes

    • Rápida iteração

    • Baixo overhead

VMs São Ideais Para

  1. Infraestrutura Legacy

    • Sistemas monolíticos

    • Dependências de SO

    • Licenciamento específico

  2. Isolamento Total

    • Workloads multi-tenant

    • Compliance

    • Segurança crítica

  3. Recursos Dedicados

    • Garantias de performance

    • SLAs estritos

    • Cargas previsíveis

  4. Disaster Recovery

    • Snapshots completos

    • Backup do estado total

    • Migração live

Cenários Híbridos 🀝

Exemplo: Arquitetura Moderna

╔═══════════════════════════════════════════════ β•‘ VM de Banco de Dados VM de Monolito β•‘ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β•‘ β”‚ PostgreSQL β”‚ β”‚ Legacy App β”‚ β•‘ β”‚ (Dados CrΓ­ticos) β”‚ β”‚ (Sistema Core) β”‚ β•‘ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β•‘ β•‘ Container Cluster Container Cluster β•‘ β”Œβ”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β” β•‘ β”‚API β”‚ β”‚Web β”‚ β”‚Cacheβ”‚ β”‚Log β”‚ β”‚Mon β”‚ β”‚Authβ”‚ β•‘ β””β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”˜ β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•

Melhores Práticas πŸ“š

Para Containers

  1. Uma aplicação por container

  2. Imagens imutáveis

  3. Use multi-stage builds

  4. Minimize camadas

  5. Configure health checks

  6. Não armazene dados no container

  7. Use secrets management

Para VMs

  1. Tamanho apropriado

  2. Templating e automação

  3. Patches regulares

  4. Backup estratégico

  5. Monitoramento robusto

  6. Segurança em camadas

  7. Planejamento de capacidade

Ferramentas do Ecossistema πŸ› οΈ

Containers

  • Docker

  • Podman

  • containerd

  • LXC/LXD

  • rkt

VMs

  • VMware

  • Hyper-V

  • KVM

  • Xen

  • VirtualBox

Waifu Tips πŸ’‘

Exercícios Práticos πŸ‹οΈ

Nível 1: Básico

  1. Compare o tempo de boot entre um container nginx e uma VM com nginx

  2. Meça o uso de memória em ambos os casos

  3. Teste o isolamento de rede em cada tecnologia

Nível 2: Intermediário

  1. Configure um ambiente híbrido com DB em VM e app em container

  2. Implemente limits/requests em containers

  3. Configure resource pools em VMs

Nível 3: Avançado

  1. Implemente uma estratégia de backup para ambos

  2. Configure monitoring e logging

  3. Teste cenários de failover

Referências πŸ“š

  1. Docker Documentation

  2. VMware Knowledge Base

  3. Linux Container Documentation

  4. Kubernetes Documentation

  5. Cloud Native Foundation

15 abril 2025