Puntos clave
Contenedores vs máquinas virtuales: ¿qué conviene saber?
- Qué son las máquinas virtuales y los contenedores:
- Las máquinas virtuales (VM) son ordenadores basados en software que ejecutan un sistema operativo invitado completo sobre hardware virtualizado mediante un hipervisor.
- Los contenedores son entornos de aplicación ligeros y aislados que empaquetan una aplicación y sus dependencias, y comparten el kernel del sistema operativo anfitrión.
- Su principal diferencia: las máquinas virtuales virtualizan ordenadores completos con sistemas operativos independientes, mientras que los contenedores virtualizan aplicaciones y procesos compartiendo el sistema operativo anfitrión.
- Otros factores clave que distinguen las VM de los contenedores son el uso de recursos, el aislamiento, la portabilidad, el tiempo de arranque, el rendimiento y la escalabilidad.
- Cuándo usar contenedores y cuándo VM:
- Usa VM cuando necesites virtualizar un sistema operativo completo, un aislamiento más sólido o ejecutar aplicaciones heredadas o no contenerizadas.
- Usa contenedores cuando necesites despliegues de aplicaciones ligeros, rápidos y portables, que escalen con facilidad y se integren bien con los flujos de trabajo de CI/CD.
- También puedes seguir un enfoque híbrido para entornos multicliente o centrados en la s
Contenedores vs máquinas virtuales: ¿qué conviene saber? Son tecnologías de virtualización clave que utilizan desarrolladores, administradores de sistemas y, cada vez más, usuarios domésticos para ejecutar aplicaciones. Aunque se parecen, tienen casos de uso distintos y funcionan de forma diferente en aspectos fundamentales.
En esta guía verás la diferencia entre contenedores y máquinas virtuales (VM), compararemos sus ventajas y repasaremos sus casos de uso para que sepas cuál elegir al construir una infraestructura de TI eficiente y escalable.
Deja de hacer malabares con varias herramientas para gestionar VM o hosts de contenedores.
¿Qué son las máquinas virtuales (VM)?
Las máquinas virtuales son ordenadores virtuales completos, con su propio sistema operativo invitado totalmente independiente. Una máquina virtual se comporta como un ordenador físico completo (incluidos CPU, RAM, disco duro, GPU, tarjeta de sonido, etc.), todo ello virtualizado mediante un hipervisor en una máquina anfitriona.
Las VM pueden ejecutar sistemas operativos de escritorio completos. Los profesionales las usan para simular dispositivos y entornos destinados al desarrollo de software o al alojamiento de servidores, y los usuarios domésticos, para ejecutar software de consumo diseñado para otros sistemas operativos (por ejemplo, quienes usan MacOS recurren a menudo a máquinas virtuales para ejecutar software de Windows, y quienes usan Windows hacen lo propio para ejecutar software de Linux).
Entre el software de máquinas virtuales más popular están VirtualBox, VMWare, Hyper-V y Parallels.
¿Qué son los contenedores (y la contenerización)?
Los contenedores son una tecnología de virtualización ligera gestionada por un motor de contenedores. A diferencia de las máquinas virtuales, los contenedores comparten recursos con el host en lugar de reservar grandes porciones de CPU o memoria para emular los suyos propios. Por eso consumen menos recursos, aunque también están más limitados en lo que pueden virtualizar. En infraestructura de TI, los contenedores se usan sobre todo para desplegar aplicaciones y, en desarrollo de software, para ofrecer entornos de desarrollo coherentes con la infraestructura de despliegue.
Su uso más habitual es empaquetar aplicaciones para que sean portables y fáciles de desplegar. Al tomar una aplicación con todos sus archivos, dependencias y componentes y agruparlos en un único paquete, se pueden ejecutar sin necesidad de instalar esas dependencias en la máquina anfitriona. Este proceso se denomina contenerización, y el archivo que contiene la aplicación empaquetada se llama imagen.
La contenerización hace que las aplicaciones sean portables y fáciles de instalar, y resuelve muchos problemas de compatibilidad (sobre todo si ejecutas varias aplicaciones en la misma máquina que dependen de dependencias distintas y en conflicto).
El software de contenedores más popular es Docker, LXD y Singularity.
Principales diferencias entre contenedores y máquinas virtuales
Las diferencias de arquitectura (y de propósito) entre contenedores y máquinas virtuales se reflejan en los distintos comportamientos y ventajas que ofrece cada uno:
- Uso de recursos: los contenedores aprovechan los recursos mucho mejor que las máquinas virtuales, ya que no emulan un ordenador completo y comparten recursos con el sistema operativo anfitrión.
- Aislamiento: las máquinas virtuales ofrecen el aislamiento más sólido (prácticamente como si se ejecutaran en máquinas separadas), mientras que los contenedores solo proporcionan aislamiento a nivel de proceso.
- Portabilidad: los contenedores son más portables (siempre que el host admita el motor de contenedores) que las máquinas virtuales, que están ligadas a un hipervisor concreto.
- Tiempo de arranque: al ser mucho más ligeros, los contenedores se pueden iniciar, detener, pausar y reanudar rápidamente. Las máquinas virtuales tardan más, porque tienen que arrancar un sistema operativo completo.
- Rendimiento: gracias a su mejor aprovechamiento de los recursos y a su arranque más rápido, los contenedores suelen rendir más.
- Escalabilidad: los contenedores se escalan y coordinan con facilidad (por ejemplo, lanzando nuevos contenedores cuando sube el tráfico y deteniéndolos cuando baja), mientras que las VM son menos escalables por sus tiempos de arranque más lentos.
Este vídeo repasa sus diferencias clave: Contenedores vs máquinas virtuales (VM): diferencias clave y visión general.
Cuándo usar contenedores y cuándo máquinas virtuales
A la vista de las comparaciones anteriores, podría parecer a primera vista que los contenedores son superiores a las máquinas virtuales. Pero ten en cuenta que los contenedores no pueden emular un sistema operativo completo, por lo que no sirven para las mismas tareas que las máquinas virtuales.
Los escenarios más adecuados para los contenedores son aquellos que priorizan la eficiencia y la velocidad, además de la portabilidad y la integración con herramientas de CI/CD, entre ellos:
- Aplicaciones en el cloud: muchos proveedores de cloud (como AWS, DigitalOcean y Azure) ofrecen herramientas para subir y desplegar imágenes de Docker en sus plataformas gestionadas, lo que evita tareas de administración de servidores que consumen mucho tiempo.
- DevOps con CI/CD: los desarrolladores pueden crear aplicaciones en entornos coherentes, compartidos con el resto del equipo, y después desplegarlas en entornos equivalentes, lo que reduce la carga de desarrollo y pruebas.
- Aplicaciones escalables (incluidas las arquitecturas basadas en microservicios): las arquitecturas de microservicios reparten una aplicación entre numerosos servicios más pequeños, de modo que cada uno se escala de forma individual según la demanda (en lugar de escalar toda la aplicación). Los contenedores son ideales para esto porque son ligeros y se inician rápido.
Los escenarios más adecuados para las máquinas virtuales son los que exigen un aislamiento y una seguridad robustos, o requieren virtualizar un sistema operativo completo (o incluso una arquitectura de procesador distinta para ampliar la compatibilidad). Por ejemplo:
- Ejecutar otros sistemas operativos: los contenedores no sirven para ejecutar sistemas operativos de escritorio completos, como Windows, en otra plataforma. Esto convierte a las máquinas virtuales en la mejor opción para ejecutar software heredado (es decir, virtualizar un sistema operativo obsoleto para acceder a su biblioteca de software).
- Entornos centrados en la seguridad: las máquinas virtuales ofrecen un mejor aislamiento, lo que las convierte en la mejor opción cuando la seguridad pesa más que el rendimiento o cuando la normativa exige un aislamiento adicional.
- Aplicaciones que no están diseñadas para contenedores: algunas aplicaciones esperan acceso directo a los recursos del sistema operativo o control total sobre ellos. Una máquina virtual se presenta como un ordenador físico completo ante las aplicaciones que se ejecutan en su interior, por lo que su compatibilidad es mucho mayor.
También puedes aplicar un enfoque híbrido si tu caso de uso lo requiere: por ejemplo, en entornos multicliente, cuando quieres un aislamiento total entre usuarios ejecutando sus contenedores dentro de sus propias máquinas virtuales.
Resuelve incidencias en VM o hosts de contenedores más rápido.
Contenedores vs VM: cómo planificar una infraestructura de TI escalable
Si trabajas en un sector de alta seguridad que exige el aislamiento completo de una máquina virtual, o quieres ejecutar software diseñado para otra plataforma, las máquinas virtuales ofrecen una emulación completa del sistema capaz de ejecutar cualquier software, incluido el software heredado y las aplicaciones pensadas para otro SO. Si vas a desplegar aplicaciones en el cloud o infraestructura de red, los contenedores aportan numerosas ventajas, ya que son más portables y ligeros.
No se puede hablar de contenedores y escalabilidad sin mencionar Kubernetes. Kubernetes es un sistema de orquestación y automatización para Docker que escala y gestiona aplicaciones de Docker. Una vez que hayas contenerizado tus aplicaciones, puedes usar Kubernetes para desplegarlas en infraestructura cloud gestionada y después escalarlas según tus necesidades de coste y demanda.