Resumen
Los contenedores y las máquinas virtuales (VM) son dos enfoques para empaquetar los entornos informáticos que combinan varios elementos de TI y los aíslan del resto del sistema. La principal diferencia radica en los elementos que se aíslan, lo cual afecta a su vez la capacidad de ajuste y la portabilidad de cada enfoque.
¿Qué es un contenedor?
Un contenedor es una unidad de software que reúne todos los elementos y las funciones necesarios para ejecutar una aplicación. De hecho, la mayoría de las aplicaciones modernas se componen de varios contenedores, donde cada uno desempeña una función específica. Por lo general, se miden en megabytes, no utilizan un hipervisor y se consideran una forma más rápida y ágil de gestionar el aislamiento de los procesos.
Uno de los factores significativos que contribuyen al éxito de los contenedores es la portabilidad.Al igual que sucede con los bloques LEGO™, los contenedores independientes se pueden intercambiar y trasladar a diferentes entornos con facilidad. Una vez que una aplicación y sus dependencias se empaquetan en un contenedor, puede implementarse en el lugar que se necesite, ya sea en la computadora portátil del desarrollador, el centro de datos, la nube o el extremo de la red, sabiendo que funcionará de la misma manera.
Docker es una plataforma open source para diseñar, implementar y gestionar aplicaciones en contenedores que cumplió un rol fundamental en la evolución de la tecnología de contenedores a lo largo de los años.
¿Qué es una máquina virtual?
Las máquinas virtuales desempeñan un papel fundamental en el cloud computing, ya que permiten ejecutar sistemas operativos en instancias aisladas como si fueran computadoras físicas. Suelen alojarse varias máquinas virtuales en un único servidor, con un hipervisor que funciona como una capa de software ligera situada entre el host físico y las máquinas virtuales. Este hipervisor gestiona el acceso a los recursos de manera eficiente, lo cual permite que las máquinas virtuales funcionen como servidores distintos y, al mismo tiempo, ofrece mayor flexibilidad y agilidad.
La popularidad de las máquinas virtuales comenzó en la década de 2000 debido a las iniciativas de consolidación y ahorro de costos, pero su uso evolucionó a lo largo del tiempo. En la actualidad, las empresas han ampliado las implementaciones de máquinas virtuales para abarcar diversos casos prácticos, entre los que se incluyen la provisión de recursos para las aplicaciones según sea necesario y la optimización del acceso a recursos costosos, como las GPU.
También han sido la base de muchos de los primeros entornos de cloud computing, ya que facilitaron la virtualización de los recursos y permitieron la arquitectura multiempresa y el aislamiento, es decir, que varios clientes ejecutaran sistemas con los mismos recursos.
Las máquinas virtuales incorporan su propio sistema operativo, lo cual les permite desempeñar varias funciones que utilizan muchos recursos al mismo tiempo. Como cuentan con una mayor cantidad de recursos disponibles, pueden extraer, dividir, duplicar y simular sistemas operativos, equipos de escritorio, bases de datos, conexiones de red y servidores completos.
Diferencias entre la TI desarrollada en la nube y la TI tradicional
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 modernas de TI en la nube y las arquitecturas de TI tradicionales.
Las prácticas de TI nuevas
(el desarrollo en la nube, la CI/CD y DevOps) son factibles porque las cargas de trabajo se dividen en las unidades de servicio más pequeñas posibles, normalmente una función o un microservicio, y se ejecutan de forma aislada, donde se desarrollan, implementan, gestionan y amplían de manera independiente.
La mejor manera de empaquetar estas unidades pequeñas es con los contenedores, ya que permiten que varios equipos trabajen en determinadas partes de una aplicación o un servicio sin alterar ni poner en peligro el código empaquetado en otros contenedores.
Las arquitecturas de TI tradicionales
(monolíticas y heredadas) mantienen todos los elementos de una carga de trabajo conectados directamente, los cuales no pueden funcionar sin una arquitectura mayor. Dado que no es posible dividir estos elementos, deben empaquetarse como una unidad completa dentro de un entorno más grande, por lo general una máquina virtual.
Antes era común diseñar y ejecutar una aplicación completa dentro de una máquina virtual. Sin embargo, tener todo el código y las dependencias almacenados 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.
¿Cómo funcionan?
Virtualización
Un software denominado hipervisor se encarga de separar los recursos de sus máquinas físicas para que puedan particionarse y utilizarse exclusivamente en las máquinas virtuales. Cuando un usuario envía una orden a una máquina virtual que requiere recursos adicionales del entorno físico, el hipervisor transmite la solicitud a ese sistema y almacena los cambios en caché. Las máquinas virtuales parecen servidores físicos y funcionan como ellos, lo que puede multiplicar los inconvenientes de las dependencias de las aplicaciones y los grandes espacios del sistema operativo, los cuales casi nunca son necesarios para ejecutar un microservicio o una aplicación individual.
Contenedores
Todos los elementos de un contenedor se empaquetan y envían mediante una imagen, es decir, un archivo que incluye todas las bibliotecas y dependencias. Estos archivos son similares a los paquetes de instalación de software (por ejemplo, los RPM en Linux), pero solo necesitan un kernel y un tiempo de ejecución compatibles para que la aplicación se ejecute, independientemente del sistema operativo que se haya utilizado para crear el contenedor o del origen de las bibliotecas que contiene. Dado que los contenedores son tan pequeños, suele haber cientos de ellos sin conexión directa entre sí, motivo por el cual se utilizan plataformas de organización de contenedores para ponerlos a disposición de los usuarios y gestionarlos, como Red Hat OpenShift y Kubernetes.
¿Cuál debería utilizar?
Todo dependerá de si necesita una instancia pequeña de elementos que puedan trasladarse con facilidad (contenedores) o una asignación semipermanente de recursos de TI personalizados.
Además, hay que tener en cuenta otros factores, como la arquitectura de la aplicación, las prácticas de desarrollo, la seguridad y los requisitos normativos.
Debido a que los contenedores son pequeños y ligeros, pueden implementarse con facilidad en los sistemas con servidores dedicados (bare metal), así como en los entornos de nube pública, privada, híbrida y multicloud. Asimismo, es muy frecuente que se ejecuten en máquinas virtuales, ya que las empresas cuentan con una infraestructura desarrollada en torno a ellas. Todo esto demuestra la flexibilidad que ofrecen.
Los contenedores también son el entorno ideal para implementar las aplicaciones actuales desarrolladas en la nube. Estas consisten en conjuntos de microservicios diseñados para proporcionar un desarrollo uniforme y una experiencia de gestiónautomatizada en los entornos de nube pública, privada, híbrida y multicloud. Las aplicaciones desarrolladas en la nube agilizan el desarrollo de aplicaciones nuevas, la optimización de las actuales y la conexión entre todas ellas.
Si comparamos las máquinas virtuales con los contenedores, estos últimos son mejores para:
- Diseñar aplicaciones en la nube
- Empaquetar microservicios
- Incorporar aplicaciones a las prácticas de DevOps o CI/CD
- Migrar proyectos de TI adaptables a través un entorno informático diverso
Si comparamos los contenedores con las máquinas virtuales, estas últimas son mejores para:
- Alojar cargas de trabajo tradicionales, monolíticas y heredadas
- Aislar ciclos de desarrollo complejos
- Poner a disposición recursos de infraestructura (como redes, servidores y datos)
- Ejecutar un sistema operativo diferente dentro de otro (por ejemplo, ejecutar Unix en Linux)
Si tiene aplicaciones que se ejecutan en máquinas virtuales y en contenedores, Red Hat Service Interconnect le permite conectar las aplicaciones y los servicios en distintos entornos.
Diferencias entre los servidores dedicados (bare metal), las máquinas virtuales y los contenedores
Las máquinas virtuales y los contenedores se pueden implementar en diversos tipos de infraestructura, incluidos los servidores dedicados (bare metal).
¿Qué es un servidor dedicado (bare metal)?
Este término hace referencia a una computadora o un servidor que se ejecuta en un hardware físico, cuyo funcionamiento no depende del uso de hipervisores, máquinas virtuales ni contenedores. Se los conoce como servidores dedicados, ya que los elementos de hardware no se comparten con otros usuarios.
Son servidores muy rápidos y potentes, por lo que pueden procesar grandes volúmenes de datos con baja latencia. Con ellos, el usuario tiene pleno control sobre la infraestructura de su servidor, lo cual implica que puede elegir su propio sistema operativo y adaptar el hardware y el software a las necesidades específicas de sus cargas de trabajo.
Sin embargo, si bien este tipo de implementaciones resultan muy útiles en aquellos casos en los que el rendimiento y el acceso directo al hardware son fundamentales, es posible que no ofrezcan el mismo nivel de flexibilidad y gestión de los recursos que los contenedores o las máquinas virtuales.
¿Puedo alojar máquinas virtuales en servidores dedicados (bare metal)?
Sí. Los servidores dedicados (bare metal) pueden alojar máquinas virtuales si se agrega un hipervisor y un software de virtualización.
¿Puedo alojar contenedores en servidores dedicados (bare metal)?
Sí. Algunas plataformas (por ejemplo, Docker, Kubernetes y Podman) están diseñadas para que los usuarios puedan gestionar e implementar los contenedores según sea necesario en diversas infraestructuras, incluidos los servidores dedicados (bare metal).
Motivos para elegir Red Hat
Red Hat® OpenShift® es una única plataforma empresarial de aplicaciones en contenedores con opciones de implementación y uso que admiten todas las aplicaciones y los entornos. Las empresas pueden utilizarla para diseñar, implementar, ejecutar y gestionar aplicaciones rápidamente donde sea, de manera segura y según sea necesario.
Red Hat OpenShift Virtualization, una función de Red Hat OpenShift, permite que los equipos de TI ejecuten las máquinas virtuales junto con los contenedores en la misma plataforma de Kubernetes, lo cual simplifica la gestión y mejora el tiempo de producción.
Gracias a esto, las empresas se benefician de sus inversiones actuales en virtualización y, al mismo tiempo, aprovechan la sencillez y la velocidad de una plataforma de aplicaciones moderna. La integración de las máquinas virtuales a la plataforma de aplicaciones de OpenShift proporciona un entorno uniforme para el desarrollo y la implementación de las aplicaciones. Los desarrolladores pueden diseñarlas, probarlas e implementarlas más rápido, lo cual agiliza el tiempo de comercialización.