Los contenedores son unidades ejecutables de software en las que el código de la aplicación se empaqueta junto con sus bibliotecas y dependencias, de manera común, para que el código pueda ejecutarse en cualquier lugar, ya sea en un escritorio, en TI tradicional o en la nube.
Los contenedores usan una forma de virtualización del sistema operativo (SO) en la que las características del kernel del SO (por ejemplo, espacios de nombres y cgroups de Linux, silos de Windows y objetos de trabajo) se pueden usar 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, los contenedores no necesitan incluir un SO invitado en cada instancia y, en su lugar, simplemente pueden usar las características y recursos del SO 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 de los contenedores con la introducción de Docker.
La modernización estratégica de aplicaciones es una clave para el éxito transformacional que puede aumentar los ingresos anuales y reducir los costos de mantenimiento y funcionamiento.
Regístrese para recibir la guía sobre DaaS
Una forma de comprender mejor un contenedor es entender cómo se diferencia de una máquina virtual (VM) tradicional. En la virtualizacióntradicional, ya sea on premises o en la nube, se utiliza un hipervisor para virtualizar el hardware físico. Cada VM contiene un SO invitado y una copia virtual del hardware que el SO necesita para funcionar, 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) de manera que cada contenedor individual contiene solo la aplicación y sus bibliotecas y dependencias. La ausencia del SO invitado es la razón por la que los contenedores son tan ligeros y, por lo tanto, rápidos y portátiles.
Para obtener más información sobre esta comparación, consulte "Containers vs. VMs: What's the difference?"
La principal ventaja 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 beneficios incluyen:
Ligero: los contenedores comparten el kernel del SO de la máquina, lo que elimina la necesidad de una instancia completa del SO por aplicación y hace que los archivos de contenedor sean pequeños y fáciles de utilizar. Su tamaño más pequeño, especialmente en comparación con las VM, significa que los contenedores pueden funcionar rápidamente y admitir mejor las aplicaciones nativas de la nube que se escalan horizontalmente.
Portátil e independiente 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 reconfigurarlo en computadoras portátiles, en la nube y en entornos informáticos on premises.
Compatible con el desarrollo y la arquitectura modernos: debido a una combinación de su portabilidad/coherencia de despliegue a través de plataformas y su pequeño tamaño, los contenedores son un ajuste ideal para el desarrollo moderno y los patrones de aplicación, como DevOps, sin servidor y microservicios, quese crean mediante el uso de despliegues de código regulares en pequeños incrementos.
Mejora la utilización: al igual que las VM anteriores a ellas, 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, dado que también permiten la arquitectura de microservicios, los componentes de la aplicación pueden desplegarse y escalarse de forma más granular. Se trata de una opción atractiva en comparación con tener que escalar toda una aplicación monolítica porque un único componente tiene problemas con su carga.
En una encuesta reciente de IBM, los desarrolladores y ejecutivos de TI informaron muchos otros beneficios de usar contenedores.
Descargar el informe completo: Containers in the enterprise
Los contenedores son cada vez más prominentes, especialmente en entornos de nube. Muchas organizaciones incluso están considerando los contenedores como un reemplazo de las VM como plataforma informática de propósito general para sus aplicaciones y cargas de trabajo. Pero dentro de ese amplio alcance, existen casos de uso clave donde los contenedores son especialmente relevantes.
El software debe diseñarse y empaquetarse de manera diferente para aprovechar los contenedores, un proceso comúnmente conocido como contenerización.
Al contenerizar una aplicación, el proceso 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 luego se puede ejecutar en una plataforma de contenedor.
Orquestación de contenedores con Kubernetes
A medida que las empresas comenzaron a adoptar los contenedores, a menudo como parte de arquitecturas modernas nativas de la nube, la simplicidad del contenedor individual comenzó a colisionar con la complejidad de gestionar cientos (o incluso miles) de contenedores en un sistema distribuido.
Para abordar este desafío, la orquestación de contenedores surgió como una forma de gestionar grandes volúmenes de contenedores a lo largo de su ciclo de vida, incluyendo:
Si bien se crearon muchas plataformas de orquestación de contenedores (como Apache Mesos, Nomad y Docker Swarm), Kubernetes, un proyecto de código abierto presentado por Google en 2014, se convirtió rápidamente en la plataforma de orquestación de contenedores más popular, y es en la que la mayoría de la industria ha basado su estandarización.
Kubernetes permite a los desarrolladores y operadores declarar un estado deseado de su entorno de contenedor general a través de archivos YAML y, a continuación, Kubernetes realiza todo el trabajo de procesamiento de establecer y mantener ese estado, con actividades que incluyen el despliegue de un número específico de instancias de una aplicación o carga de trabajo determinada, el reinicio de esa aplicación si se produce un error, el equilibrio de carga, el escalado automático, despliegues sin tiempo de inactividad y mucho más.
En la actualidad, Kubernetes está gestionado por la Cloud Native Computing Foundation (CNCF), un grupo industrial independiente de los proveedores que opera bajo los auspicios de la Fundación Linux.
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 acomodar y expandir los casos de uso de producción continúa creciendo. Además de Kubernetes, dos de los proyectos más populares en el ecosistema de contenedores son Istio y Knative.
istio
A medida que los desarrolladores utilizan 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 las formas en que un gran número de pequeños servicios, a menudo denominados "malla de servicios", se conectan y relacionan entre sí. Istio se creó para facilitar a los desarrolladores la gestión de los desafíos asociados con el descubrimiento, el tráfico, el monitoreo, la seguridad y más.
knative
Las arquitecturas sin servidor también siguen ganando popularidad, especialmente dentro de la comunidad nativa de la nube. Knative, por ejemplo, ofrece un valor sustancial en su capacidad para desplegar servicios en contenedores 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 le solicite. Este modelo puede ahorrar grandes cantidades de potencia informática cuando se aplica a decenas de miles de contenedores.
Red Hat OpenShift OpenShift on IBM Cloud utiliza OpenShift en entornos públicos e híbridos para lograr velocidad, capacidad de respuesta del mercado, escalabilidad y confiabilidad.
Ya sea despliegue, creación de nuevas aplicaciones nativas de la nube, refactorización o cambio de plataforma de aplicaciones existentes, CP4Apps lo respalda.
Con IBM Cloud Satellite, puede lanzar servicios de nube consistentes en cualquier lugar, en el perímetro y en entornos de nube pública.
Ejecute imágenes de contenedores, trabajos por lotes o código fuente como cargas de trabajo sin servidor, sin necesidad de dimensionar, desplegar, establecer redes o escalar.
IBM® Cloud Container Registry le ofrece un registro privado que le permite gestionar sus imágenes y supervisarlas en busca de problemas de seguridad.
Determine automáticamente las acciones de asignación de recursos adecuadas, y cuándo realizarlas, para ayudar a garantizar que sus entornos Kubernetes y las aplicaciones de misión crítica obtengan exactamente lo que necesitan para cumplir sus SLO.
Una nueva investigación de IBM documenta el creciente impulso de la adopción de contenedores y Kubernetes.
La orquestación de contenedores es un componente clave de una estrategia de nube híbrida abierta que le permite crear y administrar cargas de trabajo desde cualquier lugar.
Docker es una plataforma de código abierto para crear, desplegar y gestionar aplicaciones en contenedores.