Publicado: 9 de mayo de 2024
Colaboradores: Stephanie Susnjara, Ian Smalley
Los contenedores son unidades ejecutables de software que empaquetan el código de la aplicación junto con sus bibliotecas y dependencias. Permiten que el código se ejecute en cualquier entorno informático, ya sea de sobremesa, TI tradicional o infraestructura en la nube.
Los contenedores se benefician de una forma de virtualización del sistema operativo (SO) en la que se pueden utilizar características del núcleo del SO (por ejemplo, los espacios de nombres y cgroups de Linux, los silos y objetos de trabajo de Windows) para aislar procesos y controlar la cantidad de CPU, memoria y disco a la que pueden acceder dichos procesos.
Más portátil y eficiente de recursos que las máquinas virtuales (VM), los contenedores se han convertido en las unidades de computación de facto modernas de las aplicaciones modernas. Además, los contenedores son fundamentales para la infraestructura de TI subyacente que impulsa los entornos híbridos multinube: la combinación de instalaciones locales, nube privada, nube pública y más de un servicio en la nube de más de un proveedor de nubes.
Según un informe de Business Research Insights1, el mercado mundial de tecnología de contenedores se valoró en 496,4 millones de dólares en 2021 y se espera que alcance los 3123,42 millones de dólares en 2031, con una tasa de crecimiento anual compuesta (CAGR) del 19,8 %.
La modernización estratégica de las aplicaciones es una de las claves del éxito de la transformación capaz de aumentar los ingresos anuales y reducir los costes de mantenimiento y funcionamiento.
Suscríbase al boletín de IBM
Una forma de comprender mejor un contenedor es examinar en qué se diferencia de una máquina virtual (VM) tradicional, que es una representación virtual o emulación de un ordenador físico. Una máquina virtual suele denominarse invitado, mientras que la máquina física en la que se ejecuta se llama host.
La tecnología de virtualización hace posible las VM. Un hipervisor, una pequeña capa de software, asigna recursos informáticos físicos (por ejemplo, procesadores, memoria, almacenamiento) a cada VM. Mantiene cada máquina virtual separada de las demás para que no interfieran entre sí. A continuación, cada VM contiene un sistema operativo invitado y una copia virtual del hardware que el sistema operativo necesita para ejecutarse, junto con una aplicación y sus bibliotecas y dependencias asociadas. VMware fue uno de los primeros en desarrollar y comercializar la tecnología de virtualización basada en hipervisores.
En lugar de virtualizar el hardware subyacente, la tecnología de contenedores virtualiza el sistema operativo (normalmente Linux) para que cada contenedor contenga solo la aplicación y sus bibliotecas, archivos de configuración y dependencias. Precisamente por la ausencia del sistema operativo invitado, los contenedores son tan ligeros y, por tanto, más rápidos y portátiles que las VM.
Los contenedores y las máquinas virtuales no se excluyen mutuamente. Por ejemplo, una organización podría aprovechar ambas tecnologías ejecutando contenedores en máquinas virtuales para aumentar el aislamiento y la seguridad y aprovechar las herramientas ya instaladas para la automatización, las copias de seguridad y la monitorización.
Para obtener una visión más profunda de esta comparación, consulte "Contenedores versus máquinas virtuales: ¿cuál es la diferencia?" y mire el vídeo:
La principal ventaja de los contenedores, especialmente en comparación con una máquina virtual, es que proporcionan un nivel de abstracción que los hace ligeros y portátiles. Entre sus principales beneficios se incluyen estos:
Los contenedores comparten el núcleo 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. El reducido tamaño de un contenedor, especialmente en comparación con una máquina virtual, significa que puede iniciarse rápidamente y soportar mejor aplicaciones nativa en la nube que escalan horizontalmente.
Los contenedores llevan consigo todas sus dependencias, lo que significa que el software puede escribirse una vez y luego ejecutarse sin necesidad de reconfigurarlo en distintos entornos informáticos (por ejemplo, portátiles, nube y en las instalaciones).
Gracias a su portabilidad y coherencia de despliegue en distintas plataformas y a su reducido tamaño, los contenedores son ideales para el desarrollo moderno y los patrones de aplicación, como DevOps, serverless y microservicios, que se construyen gracias a implementaciones incrementales y regulares de pequeñas porciones de código.
Al igual que las máquinas virtuales, los contenedores permiten a los desarrolladores y operadores mejorar el uso de la CPU y la memoria de las máquinas físicas. Los contenedores van incluso más allá porque permiten una arquitectura de microservicios para que los componentes de la aplicación puedan implementarse y escalarse de forma más granular.Es una alternativa atractiva a la ampliación de toda una aplicación monolítica, ya que un solo componente tiene problemas con su carga.
Los contenedores dependen menos de los recursos del sistema, lo que los hace más rápidos de administrar e implementar que las máquinas virtuales. Esta función ayuda a ahorrar dinero y tiempo en la implementación de aplicaciones y optimiza el tiempo de comercialización.
En una encuesta de IBM, los desarrolladores y ejecutivos de TI informaron de muchos otros beneficios de los contenedores. Consulte el informe completo: Containers in the enterprise.
Los contenedores dependen de la contenerización, el empaquetado del código de software con solo el sistema operativo (SO) y sus variables de entorno relevantes, archivos de configuración, bibliotecas y dependencias de software.
El resultado es una imagen de contenedor que se ejecuta en una plataforma de contenedor. Una imagen de contenedor representa datos binarios que encapsulan una aplicación y todas sus dependencias de software.
La contenerización permite que las aplicaciones se "escriban una vez y se ejecuten en cualquier lugar", lo que proporciona portabilidad, acelera el proceso de desarrollo, evita la dependencia de un proveedor de la nube, etc.
La contenerización y el aislamiento de procesos existen desde hace décadas2. Un momento histórico en el desarrollo de contenedores se produjo en 1979 con el desarrollo de chroot, parte de la versión 7 del sistema operativo Unix. Chroot introdujo el concepto de aislamiento de procesos al restringir el acceso a los archivos de una aplicación a un directorio específico (la raíz) y sus hijos (o subprocesos).
Otro hito importante ocurrió en 2008, cuando se implementaron contenedores de Linux (LXC) en el kernel de Linux, lo que permitió completamente la virtualización para una sola instancia de Linux. A lo largo de los años, tecnologías como las cárceles de FreeBSD y las particiones de carga de trabajo de AIX han ofrecido una virtualización similar a nivel de sistema operativo.
Aunque LXC sigue siendo un motor de tiempo de ejecución muy conocido y forma parte del proyecto3, independiente de la distribución y el proveedor de Linux, existen tecnologías del núcleo de Linux más recientes. Ubuntu, un moderno sistema operativo Linux de código abierto, también ofrece esta posibilidad.
Vea el vídeo para profundizar en la contenerización:
La mayoría de los desarrolladores buscan 2013 como el comienzo de la era moderna de los contenedores con la introducción de Docker. Una plataforma de software de contenerización de código abierto que funciona como plataforma como servicio (PaaS), Docker permite a los desarrolladores crear, implementar, ejecutar, actualizar y gestionar contenedores.
Docker utiliza el kernel de Linux (el componente base del sistema operativo) y las características del kernel (como Cgroups y espacios de nombres) para separar los procesos y que puedan ejecutarse de forma independiente. Docker esencialmente toma una aplicación y sus dependencias y las convierte en un contenedor virtual que puede ejecutarse en cualquier sistema informático que ejecute Windows, macOS o Linux.
Docker se basa en una arquitectura cliente-servidor, con Docker Engine como tecnología subyacente. Docker proporciona un modelo de implementación basado en imágenes, lo que simplifica el uso compartido de aplicaciones en entornos informáticos.
Para aclarar cualquier confusión, el nombre de la plataforma de contenedores Docker también se refiere a Docker, Inc.4, que desarrolla herramientas de productividad creadas en torno a su plataforma de contenerización de código abierto y al ecosistema y comunidad de código abierto Docker5.
En 2015, Docker y otros líderes del sector de los contenedores crearon The Open Container Initiative6 , que forma parte de la Fundación Linux, una estructura de gobierno abierta con el propósito expreso de crear estándares industriales abiertos en torno a los formatos de contenedores y los entornos de ejecución.
Docker es la herramienta de contenerización más utilizada, con una cuota de mercado del 82,84 %7.
Operar cientos de miles de contenedores en un sistema puede volverse inmanejable y requiere una solución de administración de orquestación.
Ahí es donde entra en juego la orquestación de contenedores, lo que permite a las empresas gestionar grandes volúmenes a lo largo de su estilo de vida, proporcionando:
Aunque existen otras plataformas de orquestación de contenedores (por ejemplo, Apache Mesos, Nomad, Docker Swarm), Kubernetes se ha convertido en el estándar de la industria.
La arquitectura de Kubernetes consiste en clústeres en ejecución que permiten que los contenedores se ejecuten en varias máquinas y entornos. Cada clúster suele estar formado por nodos de trabajo, que ejecutan las aplicaciones en contenedores, y nodos del plan de control, que controlan el clúster. El plano de control actúa como orquestador del clúster de Kubernetes. Incluye varios componentes: el servidor de API (gestiona todas las interacciones con Kubernetes), el gestor de control (gestiona todos los procesos de control), el gestor de controladores de nube (la interfaz con la API del proveedor de nube), etc. Los nodos de trabajo ejecutan contenedores mediante entornos de ejecución de contenedores como Docker. Los pods, las unidades desplegables más pequeñas de un clúster, contienen uno o más contenedores de aplicaciones y comparten recursos, como almacenamiento e información de red.
Kubernetes permite a los desarrolladores y operadores declarar el estado deseado de su entorno de contenedor general a través de archivos YAML. Después, Kubernetes realiza todo el trabajo de procesamiento para establecer y mantener ese estado, con actividades que incluyen la implementación de un número específico de instancias de una aplicación o carga de trabajo determinada, el reinicio de esa aplicación si falla, el equilibrio de carga, el escalado automático, las implementaciones sin tiempo de inactividad y más. La orquestación de contenedores con Kubernetes también es crucial para la integración y la entrega continuas (CI/CD) o la canalización de DevOps, lo que sería imposible sin automatización.
En 2015, Google donó Kubernetes a la Cloud Native Computing Foundation (CNCF)8, el centro de computación nativa en la nube de código abierto y neutral para proveedores operado bajo los auspicios de la Linux Foundation. Desde entonces, Kubernetes se ha convertido en la herramienta de orquestación de contenedores más utilizada para ejecutar cargas de trabajo basadas en contenedores en todo el mundo. En un informe del CNCF9, Kubernetes es el segundo proyecto de código abierto más grande del mundo (después de Linux) y la principal herramienta de orquestación de contenedores para el 71 % de las empresas Fortune 100.
Los contenedores como servicio (CaaS) son un servicio de cloud computing que permite a los desarrolladores gestionar e implementar aplicaciones en contenedores, dando a las empresas de todos los tamaños acceso a soluciones en nube portátiles y fácilmente escalables.
CaaS proporciona una plataforma basada en la nube en la que los usuarios pueden agilizar la virtualización basada en contenedores y los procesos de gestión de contenedores. Los proveedores de CaaS ofrecen una gran variedad de funciones, que incluyen (pero no se limitan a) tiempos de ejecución de contenedores, capas de orquestación y administración de almacenamiento persistente.
Al igual que la infraestructura como servicio (IaaS), la plataforma como servicio (PaaS) y el software como servicio (SaaS), CaaS está disponible de proveedores de servicios en la nube (por ejemplo, AWS, Google Cloud Services, IBM Cloud, Microsoft Azure) a través de un modelo de pago como precio, que solo permite utilizar los usuarios.
Las organizaciones usan contenedores para admitir lo siguiente:
Los contenedores son pequeños y ligeros, lo que los convierte en un buen complemento para las arquitecturas de microservicios, en las que las aplicaciones se construyen a partir de muchos servicios poco acoplados e implementables de forma independiente.
La combinación de microservicios como arquitectura y contenedores como plataforma es una base común para muchos equipos de desarrollo y operaciones que adoptan metodologías DevOps. Por ejemplo, los contenedores admiten canalizaciones de DevOps, incluida la implementación de integración e implementación continuas (CI/CD).
Dado que los contenedores pueden ejecutarse de forma consistente en cualquier lugar, en ordenadores portátiles, en las instalaciones y en entornos de 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.
Uno de los enfoques más comunes para la modernización de aplicaciones es la creación de aplicaciones en contenedores para preparar la migración a la nube.
La contenerización (es decir, las imágenes Docker organizadas con Kubernetes) permite rápidamente a los canales de DevOps implementar aplicaciones de inteligencia artificial (IA) y machine learning (ML) en entornos de cloud computing.
Los contenedores también ofrecen una forma eficiente de implementar y administrar los modelos de lenguaje de gran tamaño (LLM) asociados con la IA generativa, lo que proporciona portabilidad y escalabilidad cuando se usa con herramientas de orquestación. Además, los cambios realizados en el LLM se pueden empaquetar rápidamente en una nueva imagen de contenedor, lo que agiliza el desarrollo y las pruebas.
Más allá de Kubernetes, dos de los proyectos más populares en el ecosistema de los contenedores son ISTIO y KNative.
A medida que los desarrolladores utilizan contenedores para construir y ejecutar arquitecturas de microservicios, las inquietudes en torno a su gestión van más allá de las consideraciones sobre el ciclo de vida de los contenedores individuales. La forma en que grandes cantidades de pequeños servicios, a menudo denominados "malla de servicios", se conectan y relacionan entre sí, ha pasado a ser un asunto importante. Istio facilita a los desarrolladores la gestión entre otras cosas entre de los retos asociados a la detección, el tráfico, la monitorización y la seguridad.
Knative (pronunciada "kay-native") es una plataforma de código abierto que proporciona una fácil incorporación a la informática sin servidor, el modelo de desarrollo y ejecución de aplicaciones en la nube que permite a los desarrolladores crear y ejecutar código de aplicaciones sin aprovisionamiento ni gestión de servidores o infraestructura de backend.
En lugar de implementar una instancia continua de código que permanece inactiva a la espera de solicitudes, el código sin servidor se implementa cuando es necesario, ampliándolo o reduciéndolo según fluctúe la demanda, y luego se retira cuando no se utiliza. La tecnología sin servidor evita el desperdicio de capacidad informática y energía, y reduce los costes, ya que solo paga por ejecutar el código cuando se está ejecutando.
Dado que los contenedores desempeñan un papel importante en el desarrollo y la implementación de software en entornos de nube híbrida, las organizaciones deben asegurarse de que sus cargas de trabajo en contenedores permanezcan a salvo de amenazas de seguridad externas e internas.
Los contenedores se pueden implementar en cualquier lugar, lo que crea nuevas superficies de ataque que rodean el entorno basado en contenedores. Las áreas de seguridad vulnerables incluyen imágenes de contenedores, registros de imágenes, tiempos de ejecución de contenedores, plataformas de orquestación de contenedores y sistemas operativos host.
Para empezar, las empresas deben integrar la seguridad de los contenedores en sus políticas de seguridad y en su estrategia general. Dichas estrategias deben incluir las mejores prácticas de seguridad junto con herramientas de software de seguridad basadas en la nube. Este enfoque holístico debe diseñarse para proteger las aplicaciones en contenedores y su infraestructura subyacente a lo largo de todo el ciclo de vida del contenedor.
Las mejores prácticas de seguridad incluyen una estrategia zero trust que asume que la seguridad de una red compleja siempre está en riesgo de amenazas externas e internas. Además, los contenedores requieren un enfoque DevSecOps. DevSecOps es una práctica de desarrollo de aplicaciones que automatiza la integración de las prácticas de seguridad en cada fase del ciclo de vida de desarrollo del software, desde el diseño inicial hasta la integración, las pruebas, la entrega y la implementación.
Las organizaciones también deben aprovechar las herramientas de seguridad de contenedores adecuadas para mitigar los riesgos. Las soluciones de seguridad automatizadas incluyen la gestión de la configuración, el control de acceso, el análisis en busca de malware o ciberataques, la segmentación de la red, la monitorización y mucho más.
Además, hay herramientas de software disponibles para garantizar que las cargas de trabajo en contenedores se adhieran a los estándares regulatorios y de cumplimiento como RGPD, HIPAA, etcétera.
Red Hat OpenShift on IBM Cloud utiliza Red Hat OpenShift en entornos públicos e híbridos para obtener velocidad, capacidad de respuesta al mercado, escalabilidad y fiabilidad.
Ya se trate de la implementación, la creación de nuevas aplicaciones nativas de la nube, la refactorización o la replanificación de aplicaciones existentes, Cloud Pak for Applications (CP4Apps) lo tiene todo cubierto.
Con IBM Cloud Satellite, puede crear servicios coherentes en la nube en cualquier lugar, en entornos locales, en el límite y en la 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, implementar, conectar en red 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 correctas de asignación de recursos, y cuándo realizarlas, para asegurarse de que sus entornos Kubernetes y aplicaciones de misión crítica obtienen exactamente lo que necesitan para cumplir sus objetivos estratégicos.
Fusion Software puede ejecutarse Red Hat OpenShift: en la nube pública, en las instalaciones, bare metal y máquinas virtuales. Fusion proporciona una forma sencilla de implementar aplicaciones de Red Hat OpenShift e IBM watsonx.
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 permite crear y gestionar cargas de trabajo desde cualquier lugar.
Docker es una plataforma de código abierto para crear, implementar y gestionar aplicaciones en contenedores.
La contenerización desempeña un papel crucial en el desarrollo de aplicaciones modernas. En este vídeo, Chris Rosen explica cuatro casos de uso para el desarrollo de software y las operaciones de TI que le ayudan a maximizar el rendimiento y el tiempo de actividad, minimizar los costes, mantenerse ágil y cumplir con las normas.
Kubernetes, también conocida como k8s o kube, es una plataforma de orquestación de contenedores de código abierto diseñada para programar y automatizar la implementación, la gestión y el escalado de aplicaciones en contenedores.
El equilibrio de carga es el proceso de distribuir el tráfico de red de manera eficiente entre varios servidores para optimizar la disponibilidad de las aplicaciones y garantizar una experiencia positiva para el usuario final.
Todos los vínculos residen fuera de ibm.com
1 Container Technology Market Size, Share, Growth, And Industry Analysis, By Type (Docker, Rkt, CRI-O, & Others), By Application (Monitoring, Data Management, Security, & Others), Regional Insights, and Forecast From 2024 To 2031. Business Research Insights. Febrero de 2024.
2 A Brief History of Containers: From the 1970s Till Now. Aqua. 10 de enero de 2020.
3 https://linuxcontainers.org/
4 Acerca de Docker. Docker.
5 Proyectos de código abierto. Docker.
7 Las 5 principales tecnologías de contenerización en 2024. 6Sense.
8 Cloud Native Computing Foundation
9 Kubernetes Project Journey Report. CNCF. 8 de junio de 2023.