¿Qué son los contenedores?
Descubra la importancia de los contenedores en cloud computing, sus ventajas principales y el ecosistema emergente de tecnologías relacionadas con ellos, como Docker, Kubernetes, Istio y Knative
Suscríbase al boletín de IBM
Fondo negro y azul con figuras geométricas agrupadas
¿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 la nube.

Para ello, los contenedores aprovechan una forma de virtualización del sistema operativo (SO) donde las características del kernel de SO (por ejemplo, los espacios de nombres y los cgroups de Linux o los silos y los objetos de trabajo de Windows) se pueden utilizar para aislar procesos y controlar la cantidad de CPU, memoria y disco a los que pueden acceder esos procesos.

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

Para entender mejor lo que es un contenedor, veamos en qué se diferencia de una máquina virtual (VM) tradicional. En la virtualización tradicional, ya sea en local o en la nube, 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 frente a máquinas virtuales: ¿en qué se diferencian?"

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. Sus principales ventajas incluyen:

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 la nube 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, en entornos informáticos en local y en la nube.

Dan soporte a un desarrollo y una arquitectura modernos: gracias 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, DevOpssin 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 su arquitectura 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.

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 en la nube. Muchas organizaciones incluso están considerando los contenedores para sustituir a las máquinas virtuales como 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.
  • Multinube, nube híbrida: como los contenedores pueden ejecutarse de forma coherente en cualquier lugar, en entornos portátiles, locales y de nube, son una arquitectura subyacente ideal para escenarios de nube híbrida y varias nubes donde las organizaciones tienen que operar en una combinación de múltiples nubes públicas con su propio centro de datos.
  • Modernización y migración de aplicaciones: uno de los métodos más comunes de modernización de aplicaciones es contenerizar aplicaciones para prepararlas para la migración a la nube.
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.

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 la nube), la simplicidad del contenedor individual comenzó a chocar con la complejidad de gestionar cientos (incluso miles) de contenedores en un sistema distribuido.

Para resolver 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), 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.

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

El siguiente vídeo describe cómo funciona Kubernetes:

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 al descubrimiento, el tráfico, la supervisión, la seguridad, etc. 

Más información sobre Istio

Knative

Las arquitecturas sin servidor son también cada vez más populares, especialmente en la comunidad de sistemas nativos en la nube. Knative, por ejemplo, ofrece un valor sustancial con su capacidad de 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. 

El siguiente vídeo incluye una explicación más detallada de Knative:

Soluciones relacionadas
Red Hat® OpenShift® on IBM® Cloud

Red Hat OpenShift on IBM Cloud aprovecha OpenShift en entornos públicos e híbridos para incrementar la velocidad, la capacidad de respuesta del mercado, la escalabilidad y la fiabilidad.

Explore Red Hat OpenShift on IBM Cloud
IBM® Cloud Satellite

Con IBM Cloud Satellite, puede lanzar servicios en la nube coherentes en cualquier lugar: en local, en el borde y en entornos de nube pública.

Explore IBM Cloud Satellite
IBM Cloud Code Engine

Ejecute imágenes de contenedor, trabajos por lotes o código fuente como cargas trabajo sin servidor, sin necesidad de dimensionamiento, despliegue, conexión en red o escalado.

Explore IBM Cloud Code Engine
IBM Cloud Container Registry

IBM Cloud Container Registry ofrece un registro privado que le permite gestionar sus imágenes y supervisarlas para detectar problemas de seguridad.

Explore IBM Cloud Container Registry
Recursos Contenedores en la empresa

Una nueva investigación de IBM documenta la creciente adopción de contenedores y Kubernetes.

Combine las mejores características de la nube y la TI tradicional

La orquestación en contenedores es un componente clave de una estrategia de nube híbrida abierta que le permite crear y gestionar las cargas de trabajo desde cualquier lugar.

¿Qué es Docker?

Docker es una plataforma de código abierto para crear, desplegar y gestionar aplicaciones contenerizadas.

Dé el siguiente paso

Red Hat OpenShift on IBM Cloud facilita a los desarrolladores una forma rápida y segura de contenerizar y desplegar cargas de trabajo empresariales en clústeres de Kubernetes. Con él, puede liberarse de las tareas tediosas y repetitivas relacionadas con la gestión de la seguridad, la gestión de la conformidad, la gestión del despliegue y la gestión continua del ciclo de vida. Puesto que IBM se encarga de gestionar OpenShift Container Platform (OCP), tendrá más tiempo para centrarse en las tareas más importantes.

Explore Red Hat OpenShift on IBM Cloud