¡Participa de la Maratón Behind the Code, la competencia de programación más desafiante! Inscríbete aqui

Contenedores

¿Qué son los contenedores?

Los contenedores son unidades ejecutables de software en las que el código de la aplicación se empaqueta de forma común, junto con sus bibliotecas y dependencias, 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 se benefician de una forma de virtualización del sistema operativo en la que se aprovechan sus características (en el caso del kernel de Linux, concretamente las primitivas namespaces y cgroups) tanto para aislar procesos como para controlar la cantidad de CPU, memoria y disco a la que tienen acceso dichos procesos.

Los contenedores son pequeños, rápidos y portátiles porque, a diferencia de una máquina virtual, los contenedores no necesitan incluir un sistema operativo invitado en cada instancia y, por el contrario, pueden simplemente aprovechar las características y recursos del sistema operativo anfitrión.

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 comienzo de la era moderna de los contenedores con la introducción de Docker.

Contenedores frente a máquinas virtuales

Una forma de entender mejor un contenedor es comprender en qué se diferencia de una máquina virtual tradicional. En la virtualización tradicional, ya sea on-premises o en la nube, se aprovecha un hipervisor para virtualizar el hardware físico. Cada máquina virtual contiene un sistema operativo invitado, una copia virtual del hardware que necesita ejecutar dicho sistema operativo, así como una aplicación, 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, 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 ver un análisis más detallado de esta comparación, consulta “Contenedores frente a máquinas virtuales: ¿en qué se diferencian?

Beneficios de los contenedores

La principal ventaja de los contenedores, especialmente si se comparan con una máquina virtual, es que proporcionan un nivel de abstracción que permite que sean ligeros y portátiles.

  • Ligeros: 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 de los contenedores sean pequeños y consuman pocos recursos. Su tamaño más pequeño, especialmente en comparación con el de las máquinas virtuales, significa que pueden girar rápidamente y admitir mejor las aplicaciones nativas de la nube que escalan horizontalmente.
    * Portátiles e independientes de la plataforma: los contenedores llevan consigo todas sus dependencias, lo que significa que el software se puede escribir una vez y luego ejecutarse sin necesidad de volver a configurarlo en computadoras portátiles, nube y entornos de TI on-premises.
  • Admiten el desarrollo y la arquitectura modernos: gracias a la combinación de su portabilidad/coherencia de despliegue entre plataformas y su pequeño tamaño, los contenedores son ideales para el desarrollo moderno y los patrones de aplicación, como DevOps, serverless y microservicios, que se crean como despliegues regulares de código en pequeños intervalos.
  • Mejoran el uso: al igual que las máquinas virtuales que los precedieron, los contenedores permiten a los desarrolladores y operadores mejorar la utilización de la CPU y la memoria de las máquinas físicas. Pero los contenedores van más allá, ya que, al permitir arquitecturas de microservicios, los componentes de la aplicación se pueden desplegar y escalar de forma más granular, lo cual supone una alternativa interesante para evitar tener que escalar toda una aplicación monolítica cuando un único componente tiene problemas de carga.

En una encuesta reciente de IBM (PDF, 1,4 MB), los desarrolladores y ejecutivos de TI señalaron muchas otras ventajas del uso de contenedores.

Explora las ventajas de utilizar contenedores.

Las empresas que utilizan contenedores han reportado importantes beneficios desde 2014.

Descarga el informe completo, Contenedores en la empresa (PDF, 1,4 MB)

Casos de uso para los contenedores

Los contenedores son cada vez más importantes, especialmente en los entornos de nube. Muchas empresas incluso están considerando la posibilidad de que los contenedores sustituyan a las máquinas virtuales como plataforma informática de uso general para sus aplicaciones y cargas de trabajo. Pero dentro de ese ámbito tan amplio, existen 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 combinación para arquitecturas de microservicios en las que las aplicaciones se construyen a partir de muchos servicios más pequeños, acoplados de manera flexible y que se pueden desplegar 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 en que desarrollan, distribuyen y ejecutan software.
  • Nube híbrida y multinube: puesto que los contenedores pueden ejecutarse de forma coherente en cualquier lugar, en entornos portátiles, on-premises y en la nube, son una arquitectura subyacente ideal para entornos de nube híbrida y multinube en los que las organizaciones operan utilizando una combinación de varias nubes públicas y su propio centro de datos.
  • Modernización y migración de aplicaciones: uno de los enfoques más comunes para la modernización de las aplicaciones comienza por su contenedorización para que puedan migrarse a la nube.

Contenedorización

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

El proceso de contenedorización de una aplicación incluye su empaquetado con las correspondientes variables de entorno, archivos de configuración, bibliotecas y dependencias de software. El resultado es una imagen de contenedor que se puede ejecutar en una plataforma de contenedores. Para obtener más información, echa un vistazo al video “Explicación sobre la contenedorización” (08:08):


Orquestación de contenedores con Kubernetes

A medida que las empresas empezaron a adoptar contenedores, generalmente como parte de arquitecturas modernas nativas de la nube, la simplicidad del contenedor individual comenzó a chocar con la complejidad de administrar cientos, e incluso miles, de contenedores en un sistema distribuido.

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

  • Aprovisionamiento
  • Redundancia
  • Supervisión del estado
  • Asignación de recursos
  • Escalabilidad y equilibrio de carga
  • Traslado de un anfitrión físico a otro

Aunque 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 open source presentado por Google en 2014, se convirtió rápidamente en la plataforma de orquestación de contenedores más popular, y es la que se ha estandarizado en la mayor parte del sector.

Kubernetes permite a los desarrolladores y operadores declarar un estado deseado de su entorno general de contenedores a través de archivos YAML y, a continuación, realiza el trabajo arduo de establecer y mantener ese estado, con actividades que incluyen el despliegue de un número determinado de instancias de una aplicación o carga de trabajo determinada, el reinicio de la aplicación en caso de falla, el equilibrio de carga, la escalabilidad automática y los despliegues sin tiempo de inactividad, entre otros.

Para aprender más sobre Kubernetes, Sai Vennam ofrece una descripción general de Kubernetes en el siguiente video (10:58):


En la actualidad, Kubernetes está gestionado por Cloud Native Computing Foundation (CNCF), que es un grupo del sector independiente de los proveedores y que está bajo los auspicios de la fundación Linux Foundation.

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

A medida que los contenedores siguen cobrando impulso como forma popular de empaquetar y ejecutar aplicaciones, el ecosistema de herramientas y proyectos diseñados para endurecer y ampliar los casos de uso en producción sigue creciendo. Más allá de Kubernetes, dos de los proyectos más populares del ecosistema de contenedores son Istio y Knative.

Istio

Mientras los desarrolladores aprovechan los contenedores para desarrollar 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 un gran número de pequeños servicios, a menudo denominados “red 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 y mucho más. Para aprender más sobre Istio, consulta “¿Qué es Istio?” y ve el siguiente video explicativo (05:12):


Knative

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

En lugar de ejecutarse todo el tiempo y de responder cuando es necesario (como hace un servidor), una función serverless puede “escalar a cero”, lo que significa que no se ejecuta en absoluto a menos que reciba una petición. Este modelo puede ahorrar grandes cantidades de potencia computacional cuando se aplica a decenas de miles de contenedores.

Para aprender más sobre Knative, ve el video “¿Qué es Knative?” (07:58):


Contenedores e IBM Cloud

Los servicios de contenedores de IBM Cloud se basan en tecnologías open source para facilitar y acelerar tu proceso de cambio hacia la nube. Crea aplicaciones en contenedores utilizando herramientas de integración y entrega continua (CI/CD), orquesta contenedores mediante el uso de servicios gestionados de Red Hat OpenShift o Kubernetes y moderniza las aplicaciones existentes con el middleware de IBM en contenedores y los componentes open source de IBM Cloud Paks.

Aprende más sobre los contenedores en IBM Cloud.

Regístrate para obtener un ID de IBM y crea tu cuenta de IBM Cloud.