Resumen ejecutivo del Informe Global sobre Amenazas 2026 de CrowdStrike: el informe definitivo sobre inteligencia de amenazas para la era de la IA Descargar

Descubre el poder de las CNAPP con nuestra guía

Aprende cuáles son las ventajas clave y accede a consejos de integración para las plataformas de protección de aplicaciones nativas de la nube. Mejora tu estrategia de seguridad de la nube.

Descarga la guía ya

Descubre el poder de las CNAPP con nuestra guía

Aprende cuáles son las ventajas clave y accede a consejos de integración para las plataformas de protección de aplicaciones nativas de la nube. Mejora tu estrategia de seguridad de la nube.

Descarga la guía ya

En el contexto de la computación en la nube actual, probablemente hayas oído hablar tanto de máquinas virtuales (VM) como de contenedores. Ambos desempeñan una función importante, ya sea en la computación en la nube o en datacenters más tradicionales (incluidos los locales). En este artículo explicaremos las diferencias entre ambos, los compararemos y analizaremos algunos casos de uso para ver cuál escoger en función del contexto.

Resumen de las diferencias a nivel técnico

Empecemos por aclarar las diferencias técnicas. Para ello, debemos entender qué es el kernel de un sistema operativo. El kernel es el responsable de todo lo relacionado con el software de bajo nivel, por ejemplo:

  • Asignar de manera justa el tiempo de CPU para procesamiento.
  • Gestionar la RAM.
  • Otorgar acceso a los dispositivos de hardware, como discos duros (magnéticos o SSD), teclados, ratones, pantallas, interfaces de red, etc.
  • Proporcionar una capa de abstracción para acceder a los archivos de los discos duros, lo que se conoce comúnmente como "sistemas de archivos".
  • Gestionar las comunicaciones entre procesos.
  • Implementar las diferentes capas de la red en la pila de red (IP, TCP, UDP, etc.).
  • Y muchos otros aspectos que tardaríamos demasiado en enumerar aquí.

Como vemos, se encargan de muchas tareas. De hecho, los kernels (como el núcleo de Linux) son bastante grandes y están conformados por millones de líneas de código.

Habiendo explicado esto, ¿cuál es la principal diferencia técnica entre una máquina virtual y un contenedor? La máquina virtual ejecuta su propio kernel, mientras que el contenedor utiliza el kernel de su host. Este sencillo diagrama ayuda a comprenderlo visualmente:

Diagrama de la comparativa entre contenedores y máquinas virtuales Figura 1. Comparativa entre contenedores y máquinas virtuales

Algunos se refieren a los contenedores como "máquinas virtuales ligeras". Sin embargo, utilizar este término no es correcto, ya que albergan muchos menos procesos (frecuentemente, solo uno). Ejecutar un sistema operativo completo dentro de un contenedor es muy difícil y, a menudo, simplemente imposible.

Por otro lado, una máquina virtual "cree" que es un sistema operativo completo por sí solo que se ejecuta en un hardware real. Realmente no sabe que este hardware se ha simulado mediante software que se ejecuta dentro del kernel del host, el denominado hipervisor.

Información sobre las máquinas virtuales

Se puede entender que la máquina virtual es como un sistema operativo (el invitado) que se ejecuta sobre otro sistema operativo (el host), que a su vez se ejecuta en el hardware real. Para poder ejecutar máquinas virtuales, el sistema operativo del host requiere un hipervisor. Esto proporciona una capa de virtualización completa con algo de hardware simulado, de modo que el sistema operativo invitado cree que se está ejecutando en un hardware real. Por lo demás, el sistema operativo invitado se comporta exactamente igual que un sistema operativo estándar.

Conviene saber: cuando ejecutas una instancia en un proveedor de nube, el proveedor de nube realmente pone en marcha una máquina virtual.

Entre las ventajas de utilizar máquinas virtuales encontramos las siguientes:

  • El sistema operativo invitado se comporta exactamente igual que un sistema operativo corriente, y no sabe que se está ejecutando en un hipervisor, y no en hardware real.
  • La máquina virtual puede "guardarse" como un único archivo y, simplemente, moverse o replicarse en otra parte.

¿Y las desventajas?

  • La máquina virtual es voluminosa (en términos de espacio en disco, CPU y uso de RAM), ya que es un sistema operativo completo en sí mismo.
  • Como equivalen a un sistema operativo completo, las máquinas virtuales requieren mucho mantenimiento. Para sortear este problema, diseña tu infraestructura para que sea inmutable.
  • La máquina virtual es ligeramente más lenta que el sistema operativo host por la capa del hipervisor; sin embargo, en la actualidad, esta diferencia es mínima.
  • Por lo general, arrancar la máquina virtual suele ser algo más lento porque contiene muchos procesos y servicios.

Acerca de los contenedores

A continuación, vamos a analizar los contenedores. Para entender los contenedores, podemos verlos como uno o más procesos que se ejecutan en el kernel del host. Sin embargo, el kernel del host los mantiene en su propio entorno aislado, lo que significa que estos procesos no pueden ver nada más de lo que se ejecuta en el kernel. Los procesos que se ejecutan dentro de un mismo contenedor sí pueden verse unos a otros, pero no pueden ver aquellos procesos que se ejecutan en otros contenedores o en el kernel del host.

Para que el kernel del host pueda ejecutar contenedores, necesita contar con la tecnología de software adecuada para segregar los procesos según se describe arriba. El kernel de Linux incluye esta tecnología, que se llama "espacio de nombres".

Como puedes ver, es imposible ejecutar un sistema operativo completo dentro de un contenedor porque solo hay un kernel en ejecución: el del sistema operativo del host. Por ello, los contenedores no deben considerarse "máquinas virtuales ligeras", sino más bien espacios cerrados que contienen procesos. Los procesos se ejecutan en su espacio, pero no pueden salir de su espacio para entrar a otros espacios.

Sin entrar más detalle, es importante saber que el kernel del host se puede modificar para que los procesos de un contenedor determinado puedan "ver" y "tocar" cosas que están fuera de su espacio. Sin embargo, hacerlo conlleva un gran riesgo para la seguridad y debe evitarse siempre que sea posible.

¿Cuáles son las ventajas de utilizar contenedores?

  • Los contenedores son "ligeros" en cuanto a que solo ejecutan los procesos requeridos para la carga de trabajo determinada, lo que supone un ahorro de CPU, RAM y espacio de disco en comparación con las máquinas virtuales.
  • Los contenedores suelen iniciarse rápidamente, pero esto depende del software que ejecuten. En cualquier caso, ejecutando el mismo software, se iniciarán más rápido que una máquina virtual.
  • Existen registros públicos que ofrecen una gran cantidad de imágenes de contenedores para muchas aplicaciones, como Docker Hub.
  • La superficie de ataque es más reducida que en las máquinas virtuales.

Sin embargo, el uso de contenedores también tiene sus desventajas:

  • No es posible ejecutar un sistema operativo completo dentro de un contenedor.
  • En teoría, un exploit en un contenedor puede generar exploits en otros contenedores. Sin embargo, este supuesto es bastante inusual en la actualidad, ya que la tecnología de espacio de nombres de Linux (utilizada para ejecutar contenedores) ha alcanzado un nivel elevado de madurez y seguridad.
  • No es posible guardar un contenedor en un único archivo y trasladarlo.
  • El sistema de archivos raíz es efímero, es decir, todo lo que escribas en el sistema de archivos raíz se destruirá cuando finalices el contenedor.

Comparación entre máquinas virtuales y contenedores

Veamos ahora las diferencias prácticas entre las máquinas virtuales y los contenedores. Como es lógico, lo primero que debe destacarse es que es posible ejecutar contenedores dentro de máquinas virtuales, pero no al revés.

Las máquinas virtuales y los contenedores tiene propósitos diferentes. La máquina virtual ejecuta un sistema operativo completo y está diseñada para utilizarse a largo plazo. Por el contrario, el contenedor ejecuta una carga de trabajo específica y es efímero e inmutable. Debido a esto, si tus contenedores requieren almacenamiento a largo plazo (por ejemplo, almacenamiento que sobreviva cuando se reinicie el contenedor), es necesario montar volúmenes, que deben declararse y gestionarse por separado.

En términos generales, los contenedores son más ágiles que las máquinas virtuales porque están diseñados para centrarse en una sola tarea. De hecho, si el caso de uso requiere máquinas virtuales, es muy difícil que puedan utilizarse contenedores en su lugar. Sin embargo, si en el caso de uso se pueden utilizar contenedores, seguramente puedas elegir también máquinas virtuales (aunque la arquitectura sería bastante diferente entre estas dos opciones).

Seguramente hayas oído hablar de herramientas de orquestación de contenedores como los Kubernetes. Si utilizas contenedores, probablemente necesitarás una herramienta de este tipo, lo que conllevará la pertinente curva de aprendizaje y consideraciones de seguridad. Si utilizas máquinas virtuales de tu proveedor de nube, normalmente solo necesitarás las herramientas de gestión proporcionadas por ese proveedor, como grupos de escalado automático y equilibradores de carga. Si utilizas máquinas virtuales en un datacenter tradicional, probablemente deberás recurrir a una herramienta de orquestación orientada a máquinas virtuales como VMware vSphere, lo que también supondrá una propia curva de aprendizaje (posiblemente incluso más pronunciada que las herramientas de orquestación de contenedores).

Por último, utilizar contenedores es más adecuado para configurar una malla de servicios, una arquitectura alternativa al uso de equilibradores de carga internos.

Diagrama de la comparativa entre malla de servicios y equilibradores de carga Figura 2: Comparativa entre malla de servicios y equilibradores de carga

En los diagramas anteriores, podemos ver intuitivamente que el segundo tipo de arquitectura consume más recursos que la primera. La malla de servicios se puede crear utilizando, por ejemplo, HashiCorp Consul, aunque el proceso será más engorroso y la configuración más compleja en comparación con el uso de, por ejemplo, Istio en un clúster de Kubernetes.

Aspectos de seguridad

Aunque son similares en apariencia, las máquinas virtuales y los contenedores presentan retos de seguridad muy diferentes. En primer lugar, las capas de software que habilitan ambas tecnologías (hipervisores y espacios de nombres del kernel, respectivamente) han alcanzado niveles muy elevados de madurez y seguridad, por lo que no deberían ser motivo de preocupación para ninguno de ellos en términos de seguridad.

Básicamente, las máquinas virtuales ejecutan un sistema operativo completo, por lo que requieren los mismos pasos de protección que el sistema completo, como por ejemplo:

  • Refuerzo del sistema operativo.
  • Implementación de software antivirus.
  • Aplicación de parches oportuna y periódica (se puede omitir si se utiliza infraestructura inmutable).
  • Ejecución de procesos como usuarios regulares en lugar de usuarios raíz.
  • Refuerzo del servidor SSH.
  • Configuración del firewall.
  • Reducción de la superficie de ataque (eliminar software innecesario).
  • Uso de escáneres para identificar vulnerabilidades durante el desarrollo de la imagen.
  • Adopción de herramientas para identificar vulnerabilidades en tiempo de ejecución.

Con esta lista, queda claro que proteger una máquina virtual es una tarea laboriosa. Aunque gran parte de este trabajo se hace durante la creación de la imagen que se utilizará para ejecutar la máquina virtual, una buena cantidad de tareas deberán realizarse en tiempo de ejecución para detectar vulnerabilidades y posibles compromisos en los sistemas.

En cambio, proteger un contenedor es bastante más sencillo:

  • Asegúrate de no ejecutar el contenedor en modo privilegiado.
  • Ejecuta los procesos como usuario regular, y no como usuario raíz.
  • Garantiza que los permisos del sistema de archivos son lo más restrictivos posible.
  • Utiliza escáneres para identificar vulnerabilidades durante el desarrollo de la imagen.

En el caso de los contenedores, también hay aspectos de seguridad que deben gestionarse en tiempo de ejecución, pero su administración e implementación suele ser más sencilla que en el caso de las máquinas virtuales.

En ambos casos, todos los pasos descritos en el apartado de máquinas virtuales para proteger el sistema operativo host también se aplican al sistema operativo host en el que se ejecutarán las máquinas virtuales/contenedores.

CrowdStrike cuenta con varias soluciones que protegerán tus cargas de trabajo frente a virus y otros software maliciosos, así como frente a ataques a la red.

La diferencia entre máquinas virtuales y contenedores resulta fácil de entender a nivel técnico. La diferencia entre ambos se vuelve más evidente e interesante cuando se analizan los casos de uso relevantes para cada tecnología.

Desde la creación de Docker, el uso de contenedores ha aumentado de manera constante. Son ágiles y garantizan la inmutabilidad. Además, combinados con un potente orquestador como Kubernetes, tienen ventajas significativas sobre las máquinas virtuales. Por eso los contenedores están ganando terreno poco a poco, aunque algunas organizaciones seguirán utilizando las máquinas virtuales tradicionales durante mucho tiempo.