¿Cuál es la diferencia entre los contenedores y las máquinas virtuales?

Los contenedores y las máquinas virtuales son tecnologías que permiten que las aplicaciones sean independientes de los recursos de la infraestructura de TI. Un contenedor es un paquete de código de software que contiene el código de una aplicación, sus bibliotecas y otras dependencias. El uso de contenedores permite que las aplicaciones sean portátiles, de modo que el mismo código se pueda ejecutar en cualquier dispositivo. Una máquina virtual es una copia digital de una máquina física. Es posible tener varias máquinas virtuales que tengan sistemas operativos propios e individuales que se ejecuten en el mismo sistema operativo host. Además, se puede crear una máquina virtual que contenga todo lo necesario para ejecutar la aplicación.

¿Dónde se usan los contenedores y las máquinas virtuales?

Los contenedores y las máquinas virtuales son tecnologías de implementación. En el ciclo de vida del desarrollo de software, la implementación es el mecanismo que hace que una aplicación se ejecute eficazmente en un servidor o dispositivo. La aplicación requiere varios componentes de software adicionales (denominados dependencias), que están estrechamente relacionados con el sistema operativo subyacente del servidor. Todas estas distintas capas de software entre el código de la aplicación y el dispositivo físico se denominan entorno de la aplicación.

Desafíos de la implementación de software

Normalmente, las organizaciones tienen que implementar aplicaciones en varios entornos (por ejemplo, desarrollar en el entorno Linux y hacer pruebas en Windows) antes de publicar nuevas características. Mover las aplicaciones entre entornos puede causar errores o problemas técnicos (los cuales reducen la productividad) a causa de las dependencias que faltan. A la vez, compilar y probar la aplicación en un único entorno limita su utilidad. A continuación, se indican varios ejemplos:

  • Puede que tenga desarrollar distintas versiones para usuarios con distintos sistemas operativos
  • Los administradores de sistemas tienen que actualizar y mantener todos los entornos de manera uniforme, lo que aumenta los costos de desarrollo
  • Puede que le resulte complicado mover sus aplicaciones desde los centros de datos en las instalaciones a la nube o entre diferentes entornos de nube.

Propósito de las máquinas virtuales

Antiguamente, la tecnología de las máquinas virtuales se desarrolló para usar eficazmente la creciente capacidad de hardware físico o la potencia de procesamiento. Ejecutar un único entorno de aplicación en un único servidor físico utilizaba los recursos de hardware por debajo de su capacidad. Con las máquinas virtuales, las organizaciones pueden instalar varios sistemas operativos y crear varios entornos en la misma máquina física.

Propósito de los contenedores

Los contenedores se crearon para empaquetar y ejecutar aplicaciones de forma predecible y repetible en varios entornos. En lugar de volver a crear el entorno, empaquetaba la aplicación para ejecutarla en todo tipo de entornos físicos o virtuales. Es parecido a poner un astronauta en un traje espacial en lugar de volver a crear la atmósfera de la Tierra en otro planeta.

Similitudes entre los contenedores y las máquinas virtuales

Los contenedores y las máquinas virtuales permiten aislar completamente las aplicaciones para que las pueda ejecutar en varios entornos. Virtualizan o abstraen la infraestructura subyacente para que los usuarios no se tengan que preocupar por ello. También le permiten empaquetar su infraestructura de software en un único archivo denominado archivo de imagen. Puede usar el archivo de imagen para configurar y ejecutar rápidamente su aplicación en cualquier lugar. Además, también puede utilizar los procesos de software para administrar las configuraciones del sistema o escalarlos para administrar miles de aplicaciones a la vez. Sin embargo, el rol y el alcance de uso de los contenedores y las máquinas virtuales varían en función de la ubicación y el método de implementación de la aplicación.

Diferencias clave: contenedores en comparación con máquinas virtuales

Los contenedores virtualizan el sistema operativo para que la aplicación se pueda ejecutar de forma independiente en cualquier plataforma. Las máquinas virtuales van más allá y virtualizan máquinas físicas para que pueda usar los recursos de hardware de manera eficaz. A continuación exponemos algunas diferencias más.

¿Cómo funcionan?

La tecnología de los contenedores implica la creación de paquetes de software autosuficientes que funcionen de manera uniforme, independientemente de las máquinas en las que se ejecuten. Los desarrolladores de software crean e implementan imágenes de contenedores, es decir, archivos que contienen la información necesaria para ejecutar la aplicación. Las imágenes de contenedores son de solo lectura y el sistema de computación no las puede modificar.

La tecnología de las máquinas virtuales implica la instalación de software de virtualización en un servidor o una computadora físicos. La computadora física es la computadora host y la máquina virtual es el invitado. Es posible configurar y actualizar los sistemas operativos invitados y sus aplicaciones según sea necesario sin afectar al sistema operativo host.

Tecnología principal

Las máquinas virtuales utilizan hipervisores que se comunican entre el sistema operativo invitado y el sistema operativo host. El hipervisor coordina el uso compartido de los recursos para que la máquina virtual se ejecute de forma aislada junto con otras en el mismo hardware.

Por otro lado, los contenedores utilizan un motor de contenedores o un tiempo de ejecución de los contenedores. Este es el software que actúa como un agente intermediario entre los contenedores y el sistema operativo. Esto proporciona y administra los recursos de sistema que necesita la aplicación. Docker es el motor de contenedores de código abierto más usado.

Tamaño

Los archivos de imagen de las máquinas virtuales tienen un mayor tamaño (varios GB), ya que contienen su propio sistema operativo. El aumento de recursos significa que puede duplicar, dividir, abstraer y emular servidores, bases de datos, escritorios y redes enteros. Los archivos de contenedor son más ligeros y se pueden medir en MB. En los contenedores solo se empaquetan los recursos necesarios para ejecutar una única aplicación.

Cuándo se deben usar contenedores o máquinas virtuales

En esta sección exponemos algunos factores que hay que tener en cuenta al elegir entre una máquina virtual y un contenedor para implementar la aplicación.

Configuración del entorno

Las máquinas virtuales ofrecen a los desarrolladores más control sobre el entorno de la aplicación. Pueden instalar manualmente software del sistema, estados de configuración de instantáneas y restaurarlas a un estado anterior, si es necesario. Son útiles para idear o experimentar, o para probar distintos entornos con el fin de mejorar el rendimiento de una aplicación.

Los contenedores ofrecen definiciones estáticas de las configuraciones una vez seleccionadas las mejores.

Velocidad de desarrollo de software

Las máquinas virtuales son sistemas de pila completa y su creación o regeneración puede ser laboriosa. Cualquier modificación requiere mucho tiempo para validarla, ya que tiene que volver a generar el entorno.

Los contenedores resultan una mejor opción si desea crear, probar y lanzar nuevas características con frecuencia. Dado que solo incluyen software de alto nivel, se pueden modificar o iterar con gran rapidez.

Escalabilidad

Las máquinas virtuales ocupan más espacio de almacenamiento y tiene que aprovisionar más hardware en sus centros de datos en las instalaciones. El cambio a instancias de nube reduce los costos, pero migrar todo un entorno conlleva sus dificultades.

Los contenedores ocupan menos espacio y se pueden escalar más fácilmente. Y lo que es más importante, ofrecen un control detallado sobre la escalabilidad de la aplicación, ya que le permiten usar microservicios. Los microservicios son un método arquitectónico y organizativo para el desarrollo de software donde el software está compuesto por pequeños servicios independientes que se comunican a través de API bien definidas. Los contenedores le permiten escalar microservicios individuales según sea necesario.

Más información sobre los microservicios »

Más información sobre las API »

Resumen de diferencias: contenedor en comparación con máquina virtual

Características

Contenedor

Máquina virtual

Definición

Un paquete de código de software que contiene el código de una aplicación, sus bibliotecas y otras dependencias que conforman el entorno de ejecución de la aplicación.

Réplica digital de una máquina física. Divide el hardware físico en varios entornos.

Virtualización

Virtualiza el sistema operativo.

Virtualiza la infraestructura física subyacente.

Encapsulación

La capa de software por encima del sistema operativo necesaria para ejecutar la aplicación o un componente de la aplicación.

Sistema operativo, todas sus capas de software por encima, varias aplicaciones.

Tecnología

El motor de contenedores coordina los recursos con el sistema operativo subyacente. 

El hipervisor se coordina con el sistema operativo subyacente o el hardware. 

Tamaño

Más ligero (en términos de MB).

Más grande (en términos de GB).

Control

Menos control del entorno fuera del contenedor.

Más control sobre todo el entorno.

Flexibilidad

Más flexible. Puede migrar rápidamente entre entornos en las instalaciones y entornos centrados en la nube.

Menos flexible. La migración conlleva dificultades.

Escalabilidad

Muy escalable. Posibilidad de escalabilidad detallada con microservicios.

El escalado puede ser costoso. Requiere cambiar de instancias en las instalaciones a instancias en la nube para tener un escalado rentable.

  Más información sobre los contenedores Más información sobre las máquinas virtuales

 

¿Cómo puede ayudarle AWS con los contenedores y las máquinas virtuales?

AWS tiene varios servicios para admitir todas sus necesidades de implementación de aplicaciones. A continuación, se indican varios ejemplos:

  • AWS App2Container es una herramienta de creación de contenedores que permite a los desarrolladores de software modernizar las aplicaciones heredadas. Los desarrolladores utilizan AWS App2Container para convertir las aplicaciones Java y .NET en aplicaciones agrupadas en contenedores.
  • Amazon Elastic Container Registry (Amazon ECR) es un repositorio de contenedores privado seguro y altamente disponible que facilita el almacenamiento y la administración de imágenes de contenedores de Docker.
  • Amazon Elastic Container Service (Amazon ECS) es un servicio de orquestación de contenedores altamente escalable y de gran rendimiento para ejecutar contenedores de Docker en la nube de AWS.
  • Con Amazon Elastic Compute Cloud (Amazon EC2) puede ejercer un control detallado sobre las instancias en la nube y elegir los procesadores, el almacenamiento y las redes que desee. 
  • AWS Fargate es una tecnología para Amazon ECS que le permite ejecutar contenedores en producción sin implementar o administrar infraestructura.
  • VMWare Cloud en AWS le permite simplificar y acelerar la migración de cargas de trabajo de producción críticas desde máquinas virtuales en las instalaciones a la nube de AWS.

Comience a utilizar la virtualización y la contenedorización al crear una cuenta de AWS gratuita hoy mismo.

Siguientes pasos con AWS

Comience a diseñar con contenedores

Descubra cómo comenzar a utilizar los contenedores en AWS

Más información 
Empiece a crear máquinas virtuales

Descubra cómo comenzar a utilizar máquinas virtuales en AWS

Más información