Conceptos

LXC o máquina virtual en Proxmox: cuándo usar cada uno (y por qué no es lo mismo que Docker)

Por Equipo Cloud Privado · · 12 min de lectura
Imagen de portada del artículo «LXC o máquina virtual en Proxmox: cuándo usar cada uno (y por qué no es lo mismo que Docker)»

Un vistazo en 33 segundos

  • Proxmox ofrece dos formas de aislar cargas: contenedores LXC y máquinas virtuales (KVM). No es lo mismo, y cada una tiene su sitio.
  • Un LXC comparte el kernel del host: es ligero, denso y arranca en segundos, pero el aislamiento es más débil y solo corre Linux.
  • Una VM lleva su propio kernel: aísla de verdad, corre cualquier sistema operativo (incluido Windows) y es la opción para cargas no confiables o multitenant.
  • Regla rápida: LXC para servicios Linux propios donde priorizas densidad; VM para aislamiento fuerte, otros sistemas operativos o cargas de terceros.
  • Un LXC no es un contenedor Docker: LXC es un contenedor de sistema (una máquina Linux completa); Docker empaqueta una aplicación. Se pueden combinar.

En Proxmox, cada vez que vas a levantar una carga te encuentras la misma bifurcación: ¿contenedor LXC o máquina virtual? Mucha gente elige siempre lo mismo por inercia —«yo hago todo en VMs» o «yo todo en LXC»— sin pararse a pensar qué conviene en cada caso. Y las dos posturas extremas dejan rendimiento o seguridad sobre la mesa.

La elección no es de gustos: es de compromiso entre densidad y aislamiento. Entenderlo bien te permite meter el doble de servicios en el mismo hardware cuando toca, y aislar con garantías cuando la carga lo exige. Este artículo explica la diferencia real entre LXC y VM en Proxmox, cuándo elegir cada uno, y despeja una confusión muy común: por qué un LXC no es lo mismo que un contenedor Docker, aunque ambos se llamen «contenedores».

La diferencia de fondo: ¿kernel propio o compartido?

Todo se reduce a una pregunta: ¿la carga trae su propio kernel o usa el del host?

Una máquina virtual (KVM en Proxmox) es un ordenador completo emulado. Tiene su propio kernel, su propio sistema operativo de arranque a fin, y el hipervisor le da hardware virtual (CPU, RAM, discos VirtIO). El sistema invitado no sabe —o no necesita saber— que está virtualizado. Aislamiento total: lo que pasa dentro de la VM se queda dentro, porque tiene su propio núcleo.

Un contenedor LXC es distinto. No emula un ordenador: usa el kernel del propio host, y sobre él aísla un espacio de usuario Linux completo —sus procesos, su red, su sistema de ficheros— mediante las funciones de aislamiento del kernel Linux (namespaces y cgroups). Desde dentro parece una máquina Linux propia, pero por debajo comparte el núcleo con el host y con los demás contenedores.

Esa única diferencia —kernel propio o compartido— explica todo lo demás:

LXC (contenedor)VM (KVM)
KernelCompartido con el hostPropio
Peso / densidadLigero: muchos por hostMás pesado: menos por host
ArranqueSegundosMás lento (arranca un SO entero)
AislamientoBueno, pero menor (mismo kernel)Fuerte (kernel separado)
Sistemas operativosSolo LinuxCualquiera (Linux, Windows, BSD…)
Overhead de RAM/CPUMínimoEl de un SO completo
Acceso a hardware especialLimitadoPassthrough de GPU, etc.

Cuándo LXC

El LXC brilla cuando priorizas densidad y eficiencia en cargas Linux que controlas:

  • Servicios Linux propios y numerosos: un servidor web, un proxy inverso, un servicio interno, un entorno de desarrollo. Si vas a levantar muchos y son tuyos, LXC te deja meter muchos más en el mismo hardware.
  • Cargas donde el arranque rápido importa: LXC arranca en segundos, sin esperar a que un sistema operativo entero se inicie.
  • Cuando el overhead cuenta: cada VM carga con la RAM y CPU de su propio kernel y servicios de sistema. Cien LXC pesan mucho menos que cien VMs equivalentes.

El consejo de seguridad clave para LXC: usa contenedores no privilegiados (unprivileged). Proxmox los crea así por defecto, y es lo correcto: mapean el root del contenedor a un usuario sin privilegios del host, de modo que una fuga desde dentro no es root en el anfitrión. Un LXC privilegiado tiene más riesgo y solo debería usarse con motivo y a conciencia.

Cuándo VM

La máquina virtual es la opción cuando el aislamiento o la compatibilidad mandan sobre la densidad:

  • Cargas no confiables o de terceros: si alojas algo que no controlas del todo —código ajeno, un cliente distinto por máquina, cualquier cosa donde una fuga sería grave—, el kernel separado de una VM es una barrera mucho más sólida. Es la base de un multitenant seguro.
  • Sistemas operativos que no son Linux: Windows Server, BSD, o cualquier cosa que no sea Linux, solo corre en VM. Un LXC es Linux sobre kernel Linux, punto.
  • Necesidades de kernel propio: módulos de kernel específicos, una versión de kernel distinta a la del host, o cargas que tocan el núcleo. Como el LXC usa el kernel del host, no puede cambiarlo; la VM sí.
  • Hardware dedicado: passthrough de GPU para IA, de dispositivos PCI, etc. Va por VM.

La regla que resume la decisión: ¿es Linux, es tuyo y quieres densidad? LXC. ¿Es no confiable, no es Linux o necesita su propio kernel/hardware? VM. La mayoría de infraestructuras acaban con una mezcla: LXC para el grueso de servicios internos, VMs para lo que exige aislamiento fuerte o no es Linux.

La confusión que hay que despejar: LXC no es Docker

Aquí tropieza mucha gente, porque ambos se llaman «contenedores» y no son lo mismo. La diferencia está en qué empaquetan.

LXC es un contenedor de sistema. Dentro tienes una distribución Linux completa: su gestor de procesos (systemd o similar), sus servicios, sus usuarios, su gestor de paquetes. Se comporta como una máquina Linux ligera. La usas como usarías un servidor: entras, instalas, configuras, mantienes.

Docker es un contenedor de aplicación. No empaqueta una máquina, empaqueta un proceso y sus dependencias: una aplicación con lo justo para correr, inmutable, que se despliega y se descarta. La filosofía es distinta: no entras a mantenerlo, lo reconstruyes desde su imagen. Es lo que cubrimos en Docker, OCI y contenedores en Proxmox.

No compiten; operan en capas distintas. De hecho, un patrón habitual es correr Docker dentro de una VM de Proxmox (o dentro de un LXC preparado para ello): la VM/LXC te da la máquina Linux, Docker te da el empaquetado de aplicaciones encima. Elegir entre LXC y VM es elegir el tipo de máquina; usar Docker es elegir cómo empaquetar las aplicaciones que corren en esa máquina.

Por dónde decidir

Sin dogmas, un criterio que funciona:

  1. ¿La carga no es Linux (Windows, BSD)? → VM. Fin.
  2. ¿Es de terceros, no confiable o multitenant sensible? → VM, por el aislamiento del kernel separado.
  3. ¿Necesita kernel propio, módulos especiales o hardware dedicado (GPU)? → VM.
  4. En los demás casos —servicios Linux propios donde quieres densidad— → LXC no privilegiado.
  5. ¿Vas a desplegar aplicaciones empaquetadas? → Docker, dentro de una VM o LXC, según el nivel de aislamiento que quieras alrededor.

La belleza de Proxmox es que no te obliga a elegir una filosofía única: convives con LXC y VMs en el mismo clúster, gestionados igual, y usas cada uno donde rinde mejor.

Preguntas frecuentes

¿Qué es más rápido, un LXC o una VM? El LXC es más ligero y arranca en segundos, porque comparte el kernel del host y no carga con un sistema operativo completo. Para servicios Linux, permite mucha más densidad en el mismo hardware. La VM tiene algo más de overhead por su kernel propio, a cambio de aislamiento fuerte y de poder correr cualquier sistema operativo.

¿Es seguro un LXC? Sí, especialmente en modo no privilegiado (lo que Proxmox usa por defecto), que mapea el root del contenedor a un usuario sin privilegios del host. Aun así, como comparte el kernel con el host, su aislamiento es intrínsecamente menor que el de una VM. Para cargas no confiables o multitenant sensible, la VM es la opción más segura.

¿Puedo correr Windows en un LXC? No. Un LXC usa el kernel Linux del host, así que solo corre Linux. Para Windows —o cualquier sistema que no sea Linux— necesitas una máquina virtual, que lleva su propio kernel.

¿LXC es lo mismo que Docker? No. LXC es un contenedor de sistema: una máquina Linux completa y ligera que mantienes como un servidor. Docker es un contenedor de aplicación: empaqueta un proceso y sus dependencias, inmutable, que se despliega y descarta. Se complementan; es habitual correr Docker dentro de una VM o LXC de Proxmox.

¿Puedo migrar un LXC entre nodos como una VM? Sí, Proxmox gestiona LXC y VMs en el mismo clúster, con migración entre nodos y alta disponibilidad. Hay matices —la migración en vivo de contenedores tiene más limitaciones que la de VMs—, pero para operación normal ambos conviven y se gestionan de forma equivalente.

Fuentes


¿No tienes claro si tus cargas deberían ir en LXC o en VM y sospechas que estás desaprovechando hardware o aislamiento? Te ayudamos a diseñar tu cloud privado con la mezcla correcta sobre Proxmox. Empieza por nuestra comparativa de cloud o hablemos de tu proyecto.