Ir al contenido
angel.library

Contenedores vs máquinas virtuales

Proceso nativo Máquina virtual Contenedor
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ App │ │ App │ │ App │
├─────────────┤ ├─────────────┤ ├─────────────┤
│ SO host │ │ SO invitado│ │ (sin SO propio)
│ │ ├─────────────┤ ├─────────────┤
│ │ │ Hypervisor │ │Docker Engine│
│ │ ├─────────────┤ ├─────────────┤
│ │ │ SO host │ │ SO host │
└─────────────┘ └─────────────┘ └─────────────┘
  • Máquina virtual: el hypervisor (VMware, VirtualBox, Hyper-V) virtualiza hardware completo, y arriba corre un sistema operativo invitado completo con su propio kernel — pesado (GBs de disco, arranca en minutos), pero aislamiento total.
  • Contenedor: comparte el kernel del sistema operativo host — no arranca un SO nuevo, solo aísla el proceso usando funciones del kernel (namespaces, cgroups en Linux). Resultado: arranca en segundos, pesa MBs, y el overhead de rendimiento es mínimo.
  • Proceso nativo: sin aislamiento — corre directo contra el sistema operativo, comparte todo con el resto de procesos.
Proceso nativoContenedorMáquina virtual
ArranqueInstantáneoSegundosMinutos
Tamaño típico—MBs–cientos de MBsGBs
AislamientoNingunoProceso + filesystem + redTotal (kernel propio)
KernelCompartidoCompartido con el hostPropio
Densidad (cuántos por máquina)—Decenas a cientosUnas pocas
Caso de uso típicoDesarrollo directoApps, microservicios, bases de datos para devAislamiento fuerte, SOs distintos al host
  • Puedes correr 5-10 contenedores (app, base de datos, cache, etc.) en una laptop sin que se note, algo impensable con 5-10 máquinas virtuales.
  • El aislamiento de un contenedor no es tan fuerte como el de una máquina virtual (VM): comparte el kernel con el host. Para escenarios de aislamiento extremo, como un entorno multiusuario hostil, se usan capas adicionales (gVisor o Kata Containers) o máquinas virtuales.
  • En Windows/Mac, Docker igual necesita una VM liviana por debajo (Docker Desktop usa una VM con Linux, vía WSL2 en Windows) porque los contenedores Linux necesitan un kernel Linux — ver Instalación.
  • “Contenedor” no es exclusivo de Docker — es un concepto del kernel de Linux; Docker es la herramienta que lo hizo accesible con una CLI simple y un formato de imagen estándar (OCI).
  • En Windows, un contenedor Windows (no Linux) sí necesita el kernel de Windows — pero la inmensa mayoría de imágenes públicas (Node, Postgres, Nginx…) son Linux, por eso Docker Desktop en Windows corre sobre WSL2.