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 de las aplicaciones nativas de la nube modernas. Además, los contenedores son críticos 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 %.
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 al ejecutar 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 característica 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 proveedores de la nube y mucho más.
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 kernel de Linux más recientes. Ubuntu, un moderno sistema operativo Linux de código abierto, también ofrece esta capacidad.
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 más grande de código abierto 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 administrar e implementar aplicaciones en contenedores. Ofrece a empresas de todos los tamaños acceso a soluciones en la nube portátiles y 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) bajo un modelo de pago por uso, que permite a los usuarios pagar solo por los servicios que utilizan.
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 de los retos asociados a la detección, el tráfico, la monitorización, la seguridad y más.
Knative (pronunciado ‘kay-native’) es una plataforma de código abierto que proporciona una fácil vía de acceso a la computación sin servidor, el modelo de desarrollo y ejecución de aplicaciones de cloud computing que permite a los desarrolladores crear y ejecutar código de aplicaciones sin aprovisionar ni administrar 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 la demanda fluctúe, y luego se retira cuando no se está utilizando. 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 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 es una plataforma de contenedores OpenShift (OCP) totalmente gestionada.
Las soluciones de contenedores ejecutan y amplían cargas de trabajo en contenedores con seguridad, innovación de código abierto e implementación rápida.
Desbloquee nuevas capacidades e impulse la agilidad empresarial con los servicios de consultoría de nube de IBM. Descubra cómo cocrear soluciones, acelerar la transformación digital y optimizar el rendimiento mediante estrategias de nube híbrida y colaboraciones con expertos.
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 About Docker. Docker.
4 Open Source Projects. Docker.
7 Top 5 containerization technologies in 2024. 6sense.
8 Cloud Native Computing Foundation
9 Kubernetes Project Journey Report. CNCF. 8 de junio de 2023.