Contenedores vs máquinas virtuales
Tres formas de correr una app
Sección titulada «Tres formas de correr una app»Proceso nativo Máquina virtual Contenedor┌─────────────┐ ┌─────────────┐ ┌─────────────┐│ App │ │ App │ │ App │├─────────────┤ ├─────────────┤ ├─────────────┤│ SO host │ │ SO invitado│ │ (sin SO propio)│ │ ├─────────────┤ ├─────────────┤│ │ │ Hypervisor │ │Docker Engine││ │ ├─────────────┤ ├─────────────┤│ │ │ SO host │ │ SO host │└─────────────┘ └─────────────┘ └─────────────┘La diferencia clave: el kernel
Sección titulada «La diferencia clave: el kernel»- 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.
Tabla comparativa
Sección titulada «Tabla comparativa»| Proceso nativo | Contenedor | Máquina virtual | |
|---|---|---|---|
| Arranque | Instantáneo | Segundos | Minutos |
| Tamaño típico | — | MBs–cientos de MBs | GBs |
| Aislamiento | Ninguno | Proceso + filesystem + red | Total (kernel propio) |
| Kernel | Compartido | Compartido con el host | Propio |
| Densidad (cuántos por máquina) | — | Decenas a cientos | Unas pocas |
| Caso de uso típico | Desarrollo directo | Apps, microservicios, bases de datos para dev | Aislamiento fuerte, SOs distintos al host |
Por qué esto importa en la práctica
Sección titulada «Por qué esto importa en la práctica»- 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.
Consideraciones
Sección titulada «Consideraciones»- “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.