Contenedores

menu icon

Contenedores

Esta guía analiza la importancia de los contenedores en el cloud computing, destaca los principales beneficios y recorre el ecosistema emergente de tecnologías relacionadas entre Docker, Kubernetes, Istio y Knative.

¿Qué son los contenedores?

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

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

Los contenedores son pequeños, rápidos y portátiles porque, a diferencia de una máquina virtual, no necesitan incluir un SO invitado en cada instancia y, en su lugar, pueden simplemente aprovechar las características y recursos del SO del 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 2013 como el inicio de la era moderna del contenedor con la introducción de Docker.

Contenedores frente a máquinas virtuales (VM)

Para entender mejor un contenedor, veamos en qué se diferencia de una máquina virtual tradicional (VM). En la virtualización tradicional, ya sea local o en el cloud, se utiliza un hipervisor para virtualizar el hardware físico. Cada máquina virtual contiene un sistema operativo invitado, 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 únicamente la aplicación y sus bibliotecas y dependencias. La ausencia del sistema operativo invitado es la razón por la cual los contenedores son tan ligeros y, por lo tanto, rápidos y portátiles.

Para profundizar en esta comparación, consulte "Contenedores o VM: ¿cuál es la diferencia?"

Ventajas 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.

  • Ligeros: los contenedores comparten el kernel del SO de la máquina, lo que elimina la necesidad de una instancia de SO completa por aplicación y permite que los archivos de contenedor sean pequeños y utilicen pocos recursos.Su tamaño más pequeño, especialmente en comparación con las máquinas virtuales, implica que pueden iniciarse rápidamente y dar un mejor soporte a las aplicaciones nativas en cloud que se escalan horizontalmente.
  • Portátiles e independientes de la plataforma: los contenedores llevan todas sus dependencias con ellos, lo que significa que el software puede escribirse una vez y, a continuación, ejecutarse sin necesidad de reconfigurarse en los portátiles, entornos locales o de cloud.
  • Dan soporte a un desarrollo y una arquitectura modernos: debido a la combinación de portabilidad y coherencia de despliegue entre plataformas y su pequeño tamaño, los contenedores son una solución ideal para el desarrollo moderno y los patrones de aplicación como, por ejemplo, DevOps, sin servidor y microservicios, que se crean como despliegues de código normales en pequeños incrementos.
  • Mejora la utilización: al igual que las máquinas virtuales antes que ellos, los contenedores permiten a los desarrolladores y operadores mejorar la utilización de la CPU y la memoria de las máquinas físicas. Donde los contenedores van aún más lejos es en que, gracias a sus arquitecturas de microservicios, los componentes de aplicación se pueden desplegar y escalar de forma más granulada, una alternativa atractiva a tener que escalar una aplicación monolítica completa porque un componente tenga problemas con la carga.

En una encuesta reciente de IBM (PDF, 1,4 MB), los desarrolladores y los ejecutivos de TI destacaron muchas otras ventajas de los 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 predominantes, especialmente en entornos de cloud. Muchas organizaciones incluso están considerando los contenedores para sustituir a las VM como la plataforma informática general para sus aplicaciones y cargas de trabajo. No obstante, en este ámbito general, hay casos de uso clave donde los contenedores son especialmente relevantes.

  • Microservicios: los contenedores son pequeños y ligeros, de forma que son ideales para arquitecturas de microservicios, donde las aplicaciones se construyen a partir de muchos servicios más pequeños, acoplados de forma flexible y desplegables de manera independiente.
  • DevOps: la combinación de microservicios como arquitectura y de contenedores como plataforma es la base común para muchos equipos que adoptan DevOps como método para crear, enviar y ejecutar software.
  • Híbrido, multicloud: como los contenedores pueden ejecutarse de forma coherente en cualquier lugar, en entornos portátiles, locales y de cloud, son una arquitectura subyacente ideal para escenarios de cloud híbrido y multicloud donde las organizaciones tienen que operar en una combinación de múltiples clouds públicos con su propio centro de datos.
  • Modernización y migración de aplicaciones: uno de los enfoques más comunes a la modernización de aplicaciones empieza por contenerizarlas para que puedan migrarse al cloud.

Contenerización

El software debe diseñarse y empaquetarse de forma diferente para poder aprovechar los contenedores, un proceso que se conoce normalmente como contenerización.

Cuando se conteneriza una aplicación, el proceso incluye el empaquetado de la aplicación con sus variables de entorno, archivos de configuración, bibliotecas y dependencias de software relevantes. El resultado es una imagen de contenedor que puede ejecutarse en una plataforma de contenedor. Para obtener más información, consulte este vídeo sobre la "Descripción de la contenerización" (08:09):

Orquestación de contenedores con Kubernetes

A medida que las empresas empezaron a adoptar el uso de contenedores (a menudo como parte de arquitecturas modernas y nativas en cloud), la simplicidad del contenedor individual comenzó a chocar con la complejidad de gestionar cientos (incluso miles) de contenedores en un sistema distribuido.

Para solucionar este reto, surgió la orquestación de contenedores como una forma de gestionar grandes volúmenes de contenedores en su ciclo de vida, lo que incluye:

  • Suministro
  • Redundancia
  • Supervisión de estado
  • Asignación de recursos
  • Escalado y equilibrio de carga
  • Movimiento entre hosts físicos

Aunque se crearon muchas plataformas de orquestación de contenedores (como Apache Mesos, Nomad y Docker Swarm) para ayudar a solucionar este reto, Kubernetes, un proyecto de código abierto introducido por Google en 2014, se convirtió rápidamente en la plataforma de orquestación de contenedores más popular, y es la que la mayoría de la industria ha estandarizado.

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 el despliegue 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 escalado automático, despliegues de tiempo de inactividad cero, etc.

Para obtener más información sobre Kubernetes, Sai Vennam ofrece una visión general de Kubernetes en el siguiente vídeo (10:59):

 

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

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

A medida que los contenedores continúan ganando fuerza como la forma más 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. Más allá de Kubernetes, dos de los proyectos más conocidos en el ecosistema de contenedores son Istio y Knative.

Istio

Como los desarrolladores utilizan los contenedores para construir y ejecutar arquitecturas de microservicios, los problemas de gestión van más allá de las consideraciones del ciclo de vida de los contenedores individuales e incluyen la forma en la que grandes cantidades de servicios pequeños (a menudo conocidos como una "malla de servicios") se conectan y se 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, etc. Para obtener más información sobre Istio, consulte "¿Qué es Istio?" y vea este vídeo de descripción de Istio (05:06):

 

Knative

Las arquitecturas sin servidor son también cada vez más populares, especialmente en la comunidad nativa en cloud. El gran valor de Knative es su capacidad para desplegar 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 invoque. Este modelo permite ahorrar grandes cantidades de potencia cuando se aplica a decenas de miles de contenedores.

Para obtener más información sobre Knative, vea este vídeo titulado "¿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 transición al cloud. Cree aplicaciones contenerizadas utilizando herramientas de integración continua y entrega continua (CI/CD). Orqueste contenedores utilizando servicios Red Hat OpenShift o Kubernetes gestionados. Asimismo, modernice las aplicaciones existentes con el middleware de IBM contenerizado y los componentes de código abierto en IBM Cloud Paks.

Más información sobre los contenedores en IBM Cloud.

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