Docker vs máquinas virtuales: ¿en qué se diferencian?

Lección 2 del curso de Docker.

Docker frente a las máquinas virtuales

Tanto los contenedores como las máquinas virtuales (VM) sirven para aislar aplicaciones, pero lo hacen a niveles muy distintos. Entender la diferencia es clave para saber cuándo conviene cada tecnología.

Cómo funciona una máquina virtual

Una VM emula un ordenador completo. Sobre el hardware físico se instala un hipervisor (VMware, VirtualBox, Hyper-V, KVM...), y encima de él cada máquina virtual incluye:

  • Hardware virtualizado (CPU, memoria, disco, red).
  • Un sistema operativo completo (el llamado guest OS), con su propio kernel.
  • Las librerías y la aplicación.

El resultado es un aislamiento muy fuerte, pero a costa de muchos recursos: cada VM puede ocupar gigabytes y tardar minutos en arrancar, porque tiene que iniciar un sistema operativo entero.

Cómo funciona un contenedor

Un contenedor no virtualiza hardware ni arranca un sistema operativo nuevo. Es simplemente un proceso del sistema anfitrión que Docker aísla usando funciones del kernel de Linux (namespaces y cgroups):

  • Comparte el kernel del sistema anfitrión con el resto de contenedores.
  • Solo contiene la aplicación y sus dependencias, no un sistema operativo completo.
  • Arranca en milisegundos o segundos y ocupa megabytes.

Comparativa rápida

Máquina virtualContenedor Docker
AislamientoMuy fuerte (hardware virtualizado)A nivel de proceso (comparten kernel)
Tamaño típicoGigabytesMegabytes
ArranqueMinutosSegundos o menos
Sistema operativoUno completo por VMComparte el kernel del anfitrión
DensidadPocas VMs por servidorDecenas o cientos de contenedores
PortabilidadLimitada (formatos de disco pesados)Alta (la imagen viaja a cualquier Docker)

¿Cuándo usar cada uno?

Elige máquinas virtuales cuando necesites ejecutar sistemas operativos distintos sobre el mismo hardware (por ejemplo Windows y Linux), un aislamiento de seguridad máximo entre clientes, o software que exige un kernel propio.

Elige contenedores cuando quieras desplegar aplicaciones de forma rápida, ligera y reproducible, trabajar con microservicios, o igualar los entornos de desarrollo, pruebas y producción.

En la práctica ambas tecnologías conviven: es muy habitual ejecutar decenas de contenedores Docker dentro de una máquina virtual en la nube.

Ejemplo práctico: un servidor doméstico

Imagina que quieres montar en casa varios servicios: un servidor multimedia, un gestor de contraseñas y un panel de domótica. Con máquinas virtuales tendrías que crear tres sistemas completos, cada uno con su sistema operativo, sus actualizaciones y su reserva de memoria. Con contenedores ejecutas los tres sobre el mismo sistema, comparten el núcleo y cada uno consume solo lo que necesita.

Eso no significa que las máquinas virtuales sobren. Si quieres probar otro sistema operativo, ejecutar software antiguo que exige un núcleo concreto o aislar por completo un entorno poco fiable, la máquina virtual es la herramienta adecuada. Muchas personas montan una sola máquina virtual con Linux y dentro gestionan todos sus contenedores, combinando lo mejor de cada enfoque. Así aprovechas el aislamiento de la máquina virtual y la rapidez de los contenedores, y además puedes hacer una copia de toda la máquina de una sola vez.

Fíjate también en el consumo: una máquina virtual reserva memoria aunque no la use, mientras que un contenedor la libera cuando no trabaja. En un equipo doméstico con poca memoria esa diferencia se nota enseguida.

La decisión práctica es sencilla: empieza por contenedores para tus aplicaciones y recurre a una máquina virtual cuando necesites aislamiento fuerte o un sistema operativo distinto del que tienes.

Te puede interesar

Comentarios

Entradas populares de este blog

Cómo instalar Hermes Agent en Docker y conectarlo con tu suscripción de Antigravity

Docker: OpenBao - para qué sirve y cómo instalarlo

Cómo funciona Docker Compose