Jump to section

Diferencias entre los contenedores y las máquinas virtuales

Copiar URL

Las máquinas virtuales (VM) y los contenedores de Linux® son entornos informáticos empaquetados que combinan varios elementos de TI y los aíslan del resto del sistema. Las principales diferencias radican en la capacidad de ampliación y la portabilidad.

  • Por lo general, los contenedores se miden en megabytes. El elemento más grande que empaquetan es una aplicación y todos los archivos necesarios para su ejecución. También suelen utilizarse para empaquetar funciones individuales que realizan tareas específicas (conocidas como microservicios). La naturaleza ligera de los contenedores y su sistema operativo (SO) compartido permiten trasladarlos entre los distintos entornos con mucha facilidad.
  • Por lo general, las máquinas virtuales se miden en gigabytes. Suelen tener su propio sistema operativo, lo cual les permite realizar varias funciones con uso intensivo de los recursos al mismo tiempo. Las máquinas virtuales cuentan con una mayor cantidad de recursos disponibles, lo cual les permite extraer, dividir, duplicar y simular sistemas operativos, escritorios, bases de datos, conexiones de red y servidores completos.

Más allá de las diferencias tecnológicas, la comparación entre los contenedores y las máquinas virtuales es una comparación indirecta entre las prácticas de TI nuevas y las arquitecturas de TI tradicionales.

Las prácticas de TI nuevas (el desarrollo nativo de la nube, la CI/CD y DevOps) son posibles porque las cargas de trabajo se dividen en las unidades de servicio más pequeñas posibles, normalmente una función o un microservicio. La mejor manera de empaquetar estas unidades es en contenedores, ya que permiten que varios equipos trabajen en partes individuales de una aplicación o un servicio sin interrumpir o poner en peligro el código empaquetado en otros contenedores.

En el caso de las arquitecturas de TI tradicionales (monolíticas y heredadas), todos los aspectos de las cargas de trabajo se almacenan en un solo archivo grande, que no puede dividirse y, en consecuencia, necesita empaquetarse como una unidad completa dentro de un entorno más grande, que normalmente es una máquina virtual. Antes era común diseñar y ejecutar una aplicación completa dentro de una máquina virtual. Sin embargo, el hecho de que todo el código y las dependencias se almacenaran en un solo lugar dio como resultado máquinas virtuales de gran tamaño que sufrían fallas en cascada y tiempo de inactividad al implementar las actualizaciones.

Eso depende de si necesita una instancia pequeña de algo que se pueda trasladar con facilidad (contenedores) o de si necesita una asignación semipermanente de recursos personalizados de TI.

Debido a que los contenedores son pequeños y ligeros, pueden trasladarse con facilidad entre los equipos sin sistema operativo, así como entre los entornos de nube pública, privada, híbrida y multicloud. También son el entorno ideal para implementar las aplicaciones nativas de la nube actuales. Estas consisten en colecciones de microservicios diseñadas para proporcionar un desarrollo uniforme y una experiencia de gestión automatizada en los entornos de nube pública, privada, híbrida y multicloud. Las aplicaciones nativas de la nube agilizan el diseño de aplicaciones nuevas, la optimización de las actuales y la conexión entre todas ellas. Tenga en cuenta que los contenedores deben ser compatibles con el sistema operativo subyacente. Si comparamos los contenedores con las máquinas virtuales, son mejores para las siguientes funciones:

  • Diseñar aplicaciones nativas de la nube
  • Empaquetar microservicios
  • Implantar gradualmente las prácticas de DevOps o CI/CD
  • Trasladar proyectos de TI escalables a todo un footprint de TI diverso con el mismo sistema operativo

Las máquinas virtuales pueden ejecutar muchas más operaciones que un contenedor individual. Por eso se han utilizado para empaquetar las cargas de trabajo monolíticas, incluso en la actualidad. Sin embargo, esa capacidad para ofrecer más funciones reduce su portabilidad, debido a su dependencia del sistema operativo, las aplicaciones y las bibliotecas. Si comparamos las máquinas virtuales con los contenedores, son mejores para las siguientes funciones:

  • Alojar cargas de trabajo tradicionales, monolíticas y heredadas
  • Aislar ciclos de desarrollo riesgosos
  • Implementar recursos de infraestructura (como redes, servidores y datos)
  • Ejecutar un sistema operativo diferente dentro de otro (por ejemplo, ejecutar Unix en Linux)

virtualization vs containers

Virtualización

El software llamado hipervisor separa los recursos de las máquinas físicas para que puedan dividirse y destinarse a las máquinas virtuales. Cuando un usuario emite una instrucción de una máquina virtual que requiere recursos adicionales del entorno físico, el hipervisor transmite la solicitud al sistema físico y almacena los cambios en la memoria caché. Las máquinas virtuales parecen servidores físicos y actúan como tales, lo que puede multiplicar las desventajas de las dependencias de las aplicaciones y los grandes footprints del sistema operativo. Incluso, en la mayoría de los casos, ese footprint no se necesita para ejecutar una sola aplicación o microservicio.

Contenedores

Los contenedores contienen un microservicio o una aplicación y todo lo que necesita para ejecutarse. Lo que está dentro de un contenedor se conserva en lo que llamamos imagen: un archivo basado en un código que incluye todas las bibliotecas y las dependencias. Estos archivos pueden considerarse una instalación de la distribución de Linux, porque la imagen viene con paquetes RPM y archivos de configuración. Como los contenedores son tan pequeños, suele haber cientos de ellos con un nivel de acoplamiento bajo, así que se utilizan plataformas de organización de contenedores (como Red Hat OpenShift y Kubernetes) para configurarlos y gestionarlos.

Porque desde hace mucho tiempo respaldamos la virtualización y el desarrollo en contenedores. Cooperamos con las comunidades de máquina virtual basada en el kernel (KVM) y oVirt desde su fundación, y somos el segundo colaborador principal de las bases de código Docker y Kubernetes. También invertimos en el futuro de ambas tecnologías. Nuestra participación en la virtualización propia de los contenedores, KubeVirt y la infraestructura hiperconvergente mejoran la forma en la que los contenedores y las máquinas virtuales trabajan en conjunto como parte del mismo sistema de TI.

Keep reading

Article

What's a Linux container?

A Linux container is a set of processes isolated from the system, running from a distinct image that provides all the files necessary to support the processes.

Article

Containers vs VMs

Linux containers and virtual machines (VMs) are packaged computing environments that combine various IT components and isolate them from the rest of the system.

Article

What is container orchestration?

Container orchestration automates the deployment, management, scaling, and networking of containers.

Más información sobre los contenedores

Productos

Plataforma de contenedores de Kubernetes empresarial con operaciones automatizadas integrales para gestionar implementaciones de nube híbrida, multicloud y edge computing.

Contenido adicional

Lista de verificación

Desarrollo de aplicaciones en contenedores: cinco temas para analizar con su equipo

Ebook

Los tres aspectos más importantes que debe tener en cuenta a la hora de seleccionar una plataforma de Kubernetes

Capacitación

Curso de capacitación gratuito

Running Containers with Red Hat Technical Overview

Curso de capacitación gratuito

Containers, Kubernetes and Red Hat OpenShift Technical Overview

Curso de capacitación gratuito

Developing Cloud-Native Applications with Microservices Architectures

Illustration - mail

Obtenga más contenido como este

Suscríbase a nuestro boletín informativo: Red Hat Shares.