Contenedores

menu icon

Contenedores

Esta guía analiza la importancia de los contenedores en la computación en la nube, destaca los beneficios principales y recorre el ecosistema emergente de tecnologías relacionadas a través de Docker, Kubernetes, Istio y Knative.

¿Qué son los contenedores?

Los contenedores son unidades ejecutables de software en los que el código de aplicación se empaqueta, junto con sus bibliotecas y dependencias, de forma común para que pueda ejecutarse en cualquier lugar, ya sea en el desktop, en la TI tradicional o en la nube.

Para ello, los contenedores utilizan una forma de virtualización del sistema operativo (SO) en la que las características del SO (específicamente los espacios de nombres y las primitivas de cgroups en el caso del kernel de Linux) se aprovechan al máximo para aislar procesos y controlar la cantidad de CPU, memoria y disco a los que dichos procesos tienen acceso.

Los contenedores son pequeños, rápidos y portátiles porque, a diferencia de una máquina virtual, los contenedores no necesitan incluir un SO invitado en todos los casos y, en su lugar, pueden simplemente hacer uso de las características y recursos del sistema operativo host.

Los contenedores aparecieron por primera vez hace décadas con versiones como FreeBSD Jails y AIX Workload Partitions, pero la mayoría de los desarrolladores modernos recuerdan el año 2013 como el inicio de la era moderna del contenedor con la introducción de Docker.

Contenedores vs. máquinas virtuales (VM)

Una forma de entender mejor un contenedor es comprender cómo difiere de una máquina virtual (VM) tradicional. En la virtualización tradicional, ya sea local o en la nube, se aprovecha un hipervisor para virtualizar el hardware físico. Cada VM contiene un SO huésped, una copia virtual del hardware que el sistema operativo necesita para ejecutarse, junto con una aplicación y sus bibliotecas y dependencias asociadas.

En lugar de virtualizar el hardware subyacente, los contenedores virtualizan el sistema operativo (normalmente Linux) para que cada contenedor individual contenga solo la aplicación y sus bibliotecas y dependencias. La ausencia del sistema operativo huésped es el motivo por el que los contenedores son tan ligeros y, por lo tanto, rápidos y portátiles.

Para profundizar en esta comparación, verifique "Contenedores vs. máquinas virtuales (VM): ¿Cuál es la diferencia?"

Beneficios de los contenedores

La ventaja principal de los contenedores, especialmente en comparación con una VM, es que proporcionan un nivel de abstracción que los hace ligeros y portátiles.

  • Ligero: los contenedores comparten el kernel del sistema operativo de la máquina, lo que elimina la necesidad de una instancia completa del sistema operativo por aplicación y hace que los archivos contenedores sean pequeños y fáciles de usar. Su tamaño más pequeño, especialmente en comparación con las máquinas virtuales, significa que pueden adaptarse rápidamente y soportar mejor las aplicaciones nativas de la nube que escalan horizontalmente.
  • Portátil e independiente de la plataforma: los contenedores llevan todas sus dependencias con ellos, lo que significa que el software puede escribirse una vez y, después, ejecutarse sin la necesidad de volver a configurarse a través de los portátiles, la nube y entornos informáticos de instalaciones propias.
  • Soporta el desarrollo y la arquitectura modernos: debido a una combinación de su portabilidad/consistencia de implementación entre plataformas y su tamaño pequeño, los contenedores son ideales para el desarrollo moderno y los estándares de aplicaciones, como DevOps, sin servidor y microservicios, que se crean con implementaciones de código regular en pequeños incrementos.
  • Mejora la utilización: al igual que las máquinas virtuales, los contenedores permiten a los desarrolladores y operadores mejorar la utilización de la CPU y de la memoria de las máquinas físicas. Uno de los principales beneficios de los contenedores es que, dado que también permiten arquitecturas de microservicio, los componentes de la aplicación se pueden implementar y escalar de manera más granular, una alternativa interesante a tener que escalar una aplicación monolítica completa porque un solo componente tiene dificultades para procesar la carga.

En una encuesta reciente de IBM (PDF, 1.4 MB), desarrolladores y ejecutivos de TI informaron de muchas otras ventajas del uso de contenedores. Explórelas utilizando la herramienta interactiva siguiente:

Descargue el informe completo, Contenedores en la empresa (PDF, 1.4 MB)

Casos de uso de contenedores

Los contenedores son cada vez más importantes, especialmente en entornos de nube. Muchas organizaciones están incluso considerando que los contenedores reemplacen a las máquinas virtuales como plataforma informática de uso general para sus aplicaciones y cargas de trabajo. Pero dentro de ese amplio ámbito, hay casos de uso clave en los que los contenedores son especialmente relevantes.

  • Microservicios: Los contenedores son pequeños y ligeros, lo que los convierte en una buena opción para las arquitecturas de microservicios en las que las aplicaciones se construyen a partir de muchos servicios más pequeños, acoplados de forma flexible e implementables de forma independiente.
  • DevOps: La combinación de microservicios como arquitectura y contenedores como plataforma es una base común para muchos equipos que adoptan DevOps como la forma de crear, enviar y ejecutar un software.
  • Nube híbrida y multinube: Debido a que los contenedores pueden ejecutarse de forma consistente en cualquier lugar, en entornos portátiles, locales y en la nube, son una arquitectura subyacente ideal para escenarios de nube híbrida y multinube, en los que las organizaciones operan a través de una mezcla de múltiples nubes públicas en combinación con su propio centro de datos.
  • Modernización y migración de aplicaciones: Uno de los enfoques más comunes para la modernización de aplicaciones se inicia al contenerizarlas para que puedan migrar a la nube.

Contenerización

El software debe diseñarse y empaquetarse de forma diferente para poder aprovechar los contenedores, un proceso comúnmente conocido como contenerización.

El proceso para contenerizar una aplicación incluye empaquetar una aplicación con sus variables de entorno relevantes, archivos de configuración, bibliotecas y dependencias de software. El resultado es una imagen de contenedor que puede ejecutarse en una plataforma de contenedor. Para obtener más información, vea el siguiente video "Containerization Explained" (08:09):

Orquestación de contenedores con Kubernetes

A medida que las empresas comenzaron a adoptar los contenedores, a menudo como parte de las arquitecturas modernas y nativas de la nube, la simplicidad del contenedor individual comenzó a chocar con la complejidad de la gestión de cientos (incluso miles) de contenedores en un sistema distribuido.

Para hacer frente a este desafío, la orquestación de contenedor surgió como una forma de gestionar grandes volúmenes de contenedores a lo largo de su ciclo de vida, incluyendo:

  • Aprovisionamiento
  • Redundancia
  • Supervisión de estado
  • Asignación de recursos
  • Escalamiento y equilibrio de carga
  • Migración entre hosts físicos

Mientras que muchas plataformas de orquestación de contenedores (como Apache Mesos, Nomad y Docker Swarm) se crearon para ayudar a abordar estos desafíos, Kubernetes, un proyecto de código abierto presentado por Google en el 2014, se convirtió rápidamente en la plataforma de orquestación de contenedores más popular, y la mayoría de las industrias la utilizan como estándar.

Kubernetes permite a los desarrolladores y operadores declarar un estado deseado de su entorno de contenedores global mediante archivos YAML. A continuación, Kubernetes hace todo el trabajo duro para establecer y mantener ese estado, con actividades que incluyen la implementación de un número especificado de instancias de una determinada aplicación o carga de trabajo, el reinicio de esa aplicación si falla, el equilibrio de carga, el escalamiento automático, implementaciones de tiempo de inactividad cero, etc.

Para descubrir más acerca de Kubernetes, Sai Vennam da una visión general de Kubernetes en el siguiente video (10:59):

 

Kubernetes ahora es operado por Cloud Native Computing Foundation (CNCF), que es un grupo industrial independiente del proveedor bajo la supervisión de Linux Foundation.

Istio, Knative y el ecosistema en expansión de contenedores

A medida que los contenedores continúan ganando impulso como una forma popular de empaquetar y ejecutar aplicaciones, el ecosistema de herramientas y proyectos diseñados para consolidar y expandir los casos de uso de la producción sigue creciendo. Además de Kubernetes, dos de los proyectos más populares del ecosistema de contenedores son Istio y Knative.

Istio

A medida que los desarrolladores aprovechan los contenedores para crear y ejecutar arquitecturas de microservicios, las preocupaciones de gestión van más allá de las consideraciones del ciclo de vida de los contenedores individuales y se centran en la forma en que grandes cantidades de servicios pequeños, a menudo denominados "malla de servicio", se conectan y relacionan entre sí. Istio se creó para facilitar a los desarrolladores la gestión de los retos asociados con el descubrimiento, el tráfico, la supervisión, la seguridad y mucho más. Para obtener más información acerca de Istio, lea "¿Qué es Istio?" y vea este video explicativo (05:06):

 

Knative

Las arquitecturas sin servidor también siguen creciendo en popularidad, especialmente dentro de la comunidad nativa de la nube. El gran valor de Knative es su capacidad para implementar servicios contenerizados como funciones sin servidor.

En lugar de ejecutarse todo el tiempo y responder cuando sea necesario (como lo hace un servidor), una función sin servidor puede "escalarse a cero", lo que significa que no se ejecuta en absoluto a menos que se solicite. Este modelo puede ahorrar grandes cantidades de capacidad de cómputo cuando se aplica a decenas de miles de contenedores.

Para obtener más información acerca de Knative, vea "¿Qué es Knative?"(07:58):

Contenedores e IBM Cloud

Los servicios de contenedor de IBM Cloud se basan en tecnologías de código abierto para facilitar y acelerar su ruta hacia la nube. Cree aplicaciones contenerizadas utilizando herramientas de integración continua y entrega continua (CI/CD). Orqueste contenedores utilizando servicios gestionados de Red Hat OpenShift o Kubernetes. Además, modernice las aplicaciones existentes con el middleware contenerizado de IBM y los componentes de código abierto en IBM Cloud Paks.

Obtenga más información acerca de contenedores en IBM Cloud.

Regístrese para obtener un IBMid y cree su cuenta de IBM Cloud.