Comparación de contenedores y máquinas virtuales

Descubre las diferencias que hay entre los contenedores y las máquinas virtuales, los proveedores más populares que existen para cada uno y cómo se pueden utilizar de manera conjunta.

Ian Buchanan Ian Buchanan

Los contenedores y las máquinas virtuales son tecnologías de virtualización de recursos muy similares. La virtualización es el proceso en el que un recurso singular del sistema, como la RAM, la CPU, el disco o la red, se puede “virtualizar” y representar como varios recursos. La diferencia clave entre los contenedores y las máquinas virtuales es que estas virtualizan toda una máquina hasta las capas de hardware, y los contenedores solo virtualizan las capas de software por encima del nivel del sistema operativo.

Un contenedor que muestra las diferencias entre las máquinas virtuales y los contenedores.

¿Qué es un contenedor?

Los contenedores son paquetes de software ligeros que contienen todas las dependencias necesarias para ejecutar la aplicación de software contenida. Estas dependencias incluyen elementos como bibliotecas del sistema, paquetes de código externos de terceros y otras aplicaciones a nivel del sistema operativo. Las dependencias incluidas en un contenedor existen en niveles de pila que se encuentran por encima del sistema operativo.

Ventajas

  • Velocidad de iteración
    Como los contenedores son ligeros y solo incluyen software de alto nivel, son muy rápidos de modificar e iterar.
  • Ecosistema estable
    La mayoría de los sistemas de entornos en tiempo de ejecución de contenedores ofrecen un repositorio público alojado de contenedores prefabricados. Estos repositorios de contenedores contienen muchas aplicaciones de software populares, como bases de datos o sistemas de mensajería, y se pueden descargar y ejecutar al instante, lo que ahorra tiempo a los equipos de desarrollo

Inconvenientes

  • Vulnerabilidades de hosts compartidos
    Todos los contenedores comparten el mismo sistema de hardware subyacente por debajo de la capa del sistema operativo; es posible que una vulnerabilidad de un contenedor pueda salir de este y afectar al hardware compartido. Los entornos en tiempo de ejecución de contenedores más populares tienen repositorios públicos de contenedores prefabricados. Existe un riesgo de seguridad al utilizar una de estas imágenes públicas, ya que pueden contener vulnerabilidades o pueden ser un suculento objetivo para los delincuentes.

Proveedores de contenedores populares

  • Docker
    Docker es el entorno en tiempo de ejecución de contenedores más popular y ampliamente utilizado. Docker Hub es un gigantesco repositorio público de aplicaciones populares de software en contenedores. Los contenedores en Docker Hub se pueden descargar e implementar al instante en un entorno en tiempo de ejecución de Docker local.
  • RKT
    Pronunciado “Rocket”, RKT es un sistema de contenedores centrado en la seguridad. Los contenedores RKT no permiten una funcionalidad insegura del contenedor a menos que el usuario habilite de forma explícita las funciones poco seguras. Dichos contenedores pretenden solucionar las incidencias de seguridad subyacentes de explotación de la contaminación cruzada de las que adolecen otros sistemas de entornos en tiempo de ejecución de contenedores.
  • Linux Containers (LXC)
    LXC es un componente de un sistema de entornos en tiempo de ejecución de contenedores Linux de código abierto. LXC se utiliza para aislar los procesos a nivel del sistema operativo. Docker, por ejemplo, usa LXC. El objetivo de Linux Containers es ofrecer un entorno en tiempo de ejecución de contenedores de código abierto neutral para proveedores.
  • CRI-O
    CRI-O es un estándar emergente de entorno en tiempo de ejecución de contenedores de código abierto que están desarrollando varias empresas mediante colaboración. La especificación CRI-O está optimizada para el sistema de gestión de contenedores Kubernetes.

¿Qué es una máquina virtual?

Las máquinas virtuales son paquetes de software pesados que proporcionan una emulación completa de dispositivos de hardware de bajo nivel, como la CPU, el disco y los dispositivos de red. Las máquinas virtuales también pueden incluir una pila de software complementaria para ejecutarse en el hardware emulado. Estos paquetes de hardware y software combinados producen una instantánea totalmente funcional de un sistema informático.

Ventajas

  • Seguridad de aislamiento total
    Las máquinas virtuales se ejecutan de forma aislada como un sistema totalmente independiente. Esto significa que las máquinas virtuales son inmunes a cualquier vulnerabilidad o interferencia de otras máquinas virtuales en un host compartido. Una máquina virtual individual no está exenta de sufrir un ataque informático debido a una vulnerabilidad, pero estará aislada y no podrá infectar ninguna otra máquina virtual vecina.
  • Desarrollo interactivo
    Los contenedores suelen ser definiciones estáticas de las dependencias esperadas y la configuración necesaria para ejecutar el contenedor. Las máquinas virtuales son más dinámicas y se pueden desarrollar de forma interactiva. Una vez que se ha especificado la definición básica de hardware para una máquina virtual, esta se puede tratar como un ordenador básico. El software se puede instalar de forma manual en la máquina virtual y se puede realizar una captura de esta para registrar el estado de configuración actual. Las instantáneas de la máquina virtual se pueden usar para devolverla al estado que tenía en ese momento o para activar máquinas virtuales adicionales con esa configuración.

Inconvenientes

  • Velocidad de iteración
    El desarrollo y la regeneración de las máquinas virtuales requieren mucho tiempo porque abarcan un sistema de pila completo. Se puede tarda mucho en regenerar cualquier modificación de una instantánea de la máquina virtual, así como en validar que se comporta como se espera.
  • Coste del tamaño de almacenamiento
    Las máquinas virtuales pueden ocupar mucho espacio de almacenamiento. Pueden alcanzar con rapidez un tamaño de varios gigabytes. Esto se puede derivar en incidencias de falta de espacio en el disco de la máquina anfitriona de las máquinas virtuales

Proveedores populares de máquinas virtuales

  • VirtualBox
    VirtualBox es un sistema de emulación de arquitectura x86 gratuito y de código abierto, propiedad de Oracle. VirtualBox es una de las plataformas de máquinas virtuales más populares y consolidadas, con un ecosistema de herramientas complementarias que ayudan a desarrollar y distribuir imágenes de máquinas virtuales.
  • VMware
    VMware es una empresa que cotiza en bolsa y que ha desarrollado su negocio sobre una de las primeras tecnologías de virtualización de hardware x86. VMware viene incluido con un hipervisor, que es una utilidad que implementará y gestionará varias máquinas virtuales. VMware dispone de una sólida interfaz de usuario para gestionar las máquinas virtuales. VMware es una gran opción de máquina virtual empresarial que ofrece soporte.
  • QEMU
    QEMU es la opción de máquina virtual de emulación de hardware más sólida. Es compatible con cualquier arquitectura de hardware genérica. QEMU es una utilidad solo de línea de comandos y no ofrece una interfaz gráfica de usuario para su configuración o ejecución. Esta compensación convierte a QEMU en una de las opciones de máquinas virtuales más rápidas.

¿Qué opción es mejor para ti?

Si tienes requisitos de hardware específicos para tu proyecto o estás desarrollando en una plataforma de hardware y necesitas dirigir a otra, como Windows y macOS, tendrás que usar una máquina virtual. La mayoría de los demás requisitos “solo de software” se pueden cumplir utilizando contenedores.

¿Cómo se pueden utilizar conjuntamente los contenedores y las máquinas virtuales?

Es totalmente posible utilizar contenedores y máquinas virtuales conjuntamente, aunque los casos de uso práctico pueden ser limitados. Se puede crear una máquina virtual que emule una configuración de hardware única. A continuación, se puede instalar un sistema operativo en el hardware de esta máquina virtual. Una vez que la máquina virtual es funcional e inicia el sistema operativo, se puede instalar un entorno en tiempo de ejecución de contenedores en el sistema operativo. En este punto tenemos un sistema informático funcional con hardware emulado en el que podemos instalar contenedores.

Un uso práctico de esta configuración es la experimentación para la implementación de sistemas en chip. Los dispositivos informáticos populares de sistema en chip, como Raspberry Pi o los tableros de desarrollo BeagleBone, se pueden emular como una máquina virtual, para experimentar con la ejecución de contenedores en ellos antes de probarlos en el hardware real.

No obstante, la mayoría de las veces, es probable que una de las dos opciones satisfaga tus necesidades. La clave para decidirte entre contenedores o máquinas virtuales para satisfacer tus necesidades de virtualización es ser consciente de los recursos que necesitas y tener claras las compensaciones que harías.