¿Qué es la contenerización?
Conozca la historia de la tecnología de contenerización, los beneficios y las ventajas de utilizar esta tecnología y qué relación tiene con la virtualización.
Fondo negro y azul
¿Qué es la contenerización?

La contenerización es el paquete de código de software con solo las bibliotecas y dependencias del sistema operativo (SO) necesarias para ejecutar el código para crear un único ejecutable ligero, denominado contenedor, que se ejecuta de forma consistente en cualquier infraestructura. Más portátiles y eficientes en recursos que las máquinas virtuales (VM), los contenedores se han convertido en las unidades de computación de facto de las aplicaciones modernas nativas de la nube.

La contenerización permite a los desarrolladores crear e implementar aplicaciones de forma más rápida y segura. Con los métodos tradicionales, el código se desarrolla en un entorno de computación específico que, cuando se transfiere a una nueva ubicación, a menudo resulta en fallos y errores. Por ejemplo, cuando un desarrollador transfiere código desde un equipo de desktop a una máquina virtual o desde un sistema operativo Linux a Windows. La contenerización elimina este problema al agrupar el código de aplicación junto con los archivos de configuración, las bibliotecas y las dependencias correspondientes que se necesitan para que se ejecute. Este paquete único de software o "contenedor" se abstrae lejos del sistema operativo del sistema principal y, por lo tanto, es independiente y portátil, capaz de ejecutarse en cualquier plataforma o nube sin problemas.

El concepto de contenerización y aislamiento de procesos surgió hace décadas, pero la aparición en 2013 del Docker Engine de código abierto, un estándar de la industria para contenedores con herramientas de desarrollo simples y un enfoque de empaquetado universal, aceleró la adopción de esta tecnología. Hoy en día, las organizaciones utilizan cada vez más la contenerización para crear nuevas aplicaciones y modernizar las aplicaciones existentes para la nube. En una encuesta de IBM (PDF, 1.4 MB), el 61 % de los usuarios de contenedores informaron haber usado contenedores en el 50 % o más de las nuevas aplicaciones que crearon durante los dos años anteriores. El 64 % de los adoptantes esperaba que el 50 % o más de sus aplicaciones existentes se pusieran en contenedores durante los próximos dos años.

A los contenedores a menudo se les denomina "ligeros", lo que significa que comparten el kernel del sistema operativo de la máquina y no requieren la sobrecarga de asociar un sistema operativo dentro de cada aplicación. Los contenedores son inherentemente más pequeños en capacidad que una VM y requieren menos tiempo de inicio, lo que permite que muchos más contenedores se ejecuten con la misma capacidad de computación que una sola máquina virtual. Esto aumenta la eficiencia del servidor y, a su vez, reduce los costos de servidor y licencias.

Quizás lo más importante es que la contenerización permite que las aplicaciones "se escriban una vez y se ejecuten en cualquier lugar". Esta portabilidad acelera el desarrollo, evita el bloqueo del proveedor de la nube y ofrece otros beneficios notables, como aislamiento de fallas, facilidad de gestión, seguridad simplificada y más (vea más abajo).

Contenerización de aplicaciones

Los contenedores encapsulan una aplicación como un único paquete ejecutable de software que empaqueta el código de aplicación junto con todos los archivos de configuración relacionados, las bibliotecas y las dependencias necesarias para que se ejecute. Las aplicaciones en contenedores están "aisladas" en el sentido de que no se empaquetan en una copia del sistema operativo. En su lugar, se instala un motor de tiempo de ejecución de código abierto (como el motor de tiempo de ejecución Docker) en el sistema operativo del host y se convierte en el conducto para que los contenedores compartan un sistema operativo con otros contenedores en el mismo sistema de computación.

Otras capas de contenedor, como las bibliotecas y los contenedores comunes, también se pueden compartir entre varios contenedores. Esto elimina la sobrecarga de ejecutar un sistema operativo dentro de cada aplicación y hace que los contenedores sean más pequeños en capacidad y más rápidos de poner en marcha, lo que aumenta la eficiencia del servidor. El aislamiento de las aplicaciones como contenedores también reduce la posibilidad de que el código malicioso presente en un contenedor afecte a otros contenedores o invada el sistema host.

La abstracción del sistema operativo host hace que las aplicaciones en contenedores sean portátiles y puedan ejecutarse de forma uniforme y coherente consistente en cualquier plataforma o nube. Los contenedores se pueden transportar fácilmente desde un desktop a una máquina virtual (VM) o desde un sistema operativo Linux a Windows, y se ejecutarán de forma consistente en infraestructuras virtualizadas o en servidores tradicionales "bare metal", ya sea localmente o en la nube. Esto garantiza que los desarrolladores de software puedan seguir utilizando las herramientas y los procesos con los que están más cómodos.

Uno puede ver por qué las empresas están adoptando rápidamente la contenerización como un enfoque superior para el desarrollo y la gestión de aplicaciones. La contenerización permite a los desarrolladores crear e implementar aplicaciones de forma más rápida y segura, ya sea que la aplicación sea un monolito tradicional (una aplicación de software de un solo nivel) o una aplicación modular basada en una arquitectura de  microservicios. Las nuevas aplicaciones basadas en la nube se pueden construir desde la base como microservicios en contenedores, rompiendo una compleja aplicación en una serie de servicios más pequeños especializados y manejables. Las aplicaciones existentes se pueden volver a empaquetar en contenedores (o microservicios en contenedores) que utilizan recursos de computación de forma más eficiente.

Beneficios de la contenerización, en detalle

La contenerización ofrece importantes beneficios a los desarrolladores y equipos de desarrollo. Entre ellos están los siguientes:

Portabilidad: un contenedor crea un paquete ejecutable de software que se abstrae (no vinculado o dependiente) del sistema operativo host y, por lo tanto, es portátil y puede ejecutarse de forma uniforme y consistente en cualquier plataforma o nube. 

Agilidad: el Docker Engine de código abierto para ejecutar contenedores ha iniciado el estándar de la industria para contenedores con herramientas de desarrollo simples y un enfoque de empaquetado universal que funciona en los sistemas operativos Linux y Windows. El ecosistema de contenedores se ha desplazado a los motores gestionados por Open Container Initiative (OCI). Los desarrolladores de software pueden seguir utilizando herramientas y procesos ágiles o DevOps para un rápido desarrollo y mejora de aplicaciones.

Velocidad: a los contenedores a menudo se les denomina "ligeros", lo que significa que comparten el kernel del sistema operativo (SO) de la máquina y que no dejan de responder con esta sobrecarga adicional. Esto no solo aumenta la eficiencia del servidor, sino que también reduce los costos de servidor y de licencias, al tiempo que se aceleran los tiempos de inicio, ya que no hay ningún sistema operativo para arrancar.

Aislamiento de fallas: cada aplicación en contenedor está aislada y opera independientemente de otras. El fallo de un contenedor no afecta al funcionamiento continuado de otros contenedores. Los equipos de desarrollo pueden identificar y corregir cualquier problema técnico dentro de un contenedor sin ningún tiempo de inactividad en otros contenedores. Además, el motor del contenedor puede aprovechar cualquier técnica de aislamiento de seguridad del sistema operativo, como el control de acceso de SELinux, para aislar fallos dentro de los contenedores.

Eficiencia: el software que se ejecuta en entornos en contenedores comparte el kernel del sistema operativo de la máquina y las capas de aplicación dentro de un contenedor se pueden compartir entre los distintos contenedores. Por lo tanto, los contenedores son inherentemente más pequeños en capacidad que una VM y requieren menos tiempo de inicio, lo que permite que muchos más contenedores se ejecuten con la misma capacidad de computación como una sola máquina virtual. Esto aumenta la eficiencia del servidor, reduciendo los costos de servidor y de licencias.

Facilidad de gestión: una plataforma de orquestación de contenedores automatiza la instalación, el escalamiento y la gestión de cargas de trabajo y servicios en contenedores. Las plataformas de orquestación de contenedores pueden facilitar tareas de gestión tales como escalar aplicaciones contenerizadas, desplegar nuevas versiones de aplicaciones, proporcionar supervisión, registro y depuración, entre otras funciones. Kubernetes, tal vez el sistema de orquestación de contenedores más popular disponible, es una tecnología de código abierto (originalmente de código abierto de Google, basada en su proyecto interno llamado Borg) que automatiza las funciones de contenedor de Linux en su origen. Kubernetes trabaja con muchos motores de contenedor, como Docker, pero también funciona con cualquier sistema de contenedor que se ajuste a los estándares de Open Container Initiative (OCI) para formatos de imagen de contenedor y tiempos de ejecución.

Seguridad: el aislamiento de las aplicaciones como contenedores impide de forma inherente que la invasión de código malicioso afecte a otros contenedores o al sistema host. Además, se pueden definir permisos de seguridad para bloquear automáticamente que los componentes no deseados entren en contenedores o limitar las comunicaciones con recursos innecesarios.

Tipos de contenerización

El rápido crecimiento en el interés y el uso de soluciones basadas en contenedores ha llevado a la necesidad de estándares en torno a la tecnología de contenedores y al enfoque del código de software de empaquetado. Open Container Initiative (OCI), establecida en junio de 2015 por Docker y otros líderes de la industria, promueve especificaciones y estándares abiertos, mínimos y comunes en torno a la tecnología de contenedores. Debido a esto, OCI está ayudando a ampliar las opciones para los motores de código abierto. Los usuarios no estarán bloqueados en la tecnología de un proveedor en particular, sino que podrán aprovechar las tecnologías certificadas por OCI que les permiten crear aplicaciones en contenedores utilizando un conjunto diverso de herramientas de DevOps y ejecutarlas de forma coherente en las infraestructuras de su elección.

Hoy en día, Docker es una de las más conocidas y altamente utilizadas tecnologías de motores de contenedores, pero no es la única opción disponible. El ecosistema está estandarizando en contenedores y otras alternativas como CoreOS rkt, Mesos Containerizer, LXC Linux Containers, OpenVZ y crio-d. Las características y los valores predeterminados pueden diferir, pero adoptar y aprovechar las especificaciones de OCI según estas evolucionan garantizará que las soluciones sean independientes del proveedor, certificadas para ejecutarse en varios sistemas operativos y utilizables en múltiples entornos.

Microservicios y contenerización

Las empresas de software grandes y pequeñas están adoptando los microservicios como un enfoque superior al desarrollo y gestión de aplicaciones, en comparación con el modelo monolítico anterior que combina una aplicación de software con la interfaz de usuario asociada y la base de datos subyacente en una sola unidad en una única plataforma de servidor. Con los microservicios, una aplicación compleja se divide en una serie de servicios más pequeños y especializados, cada uno con su propia base de datos y su propia lógica empresarial. Los microservicios se comunican entre sí por medio de interfaces comunes (como las API) y las interfaces REST (como HTTP). Mediante el uso de microservicios, los equipos de desarrollo pueden centrarse en la actualización de áreas específicas de una aplicación sin impactarla en su conjunto, lo que resulta en un desarrollo, pruebas, e implementación más rápidos.

Los conceptos detrás de los microservicios y la contenerización son similares, ya que ambos son prácticas de desarrollo de software que esencialmente transforman aplicaciones en recopilaciones de servicios o componentes más pequeños que son portátiles, escalables, eficientes y fáciles de gestionar.

Por otra parte, los microservicios y la contenerización funcionan bien cuando se usan juntos. Los contenedores proporcionan una encapsulación ligera de cualquier aplicación, ya sea un monolito tradicional o un microservicio modular. Un microservicio, desarrollado dentro de un contenedor, obtiene todos los beneficios inherentes de la portabilidad de contenedores en términos del proceso de desarrollo y la compatibilidad del proveedor (sin bloqueo de proveedor), así como la agilidad del desarrollador, el aislamiento de fallos, la eficacia del servidor, la automatización de la instalación, el escalado y la gestión, las capas de seguridad, entre otras.

Las comunicaciones de hoy se están moviendo rápidamente a la nube donde los usuarios pueden desarrollar aplicaciones de forma rápida y eficiente. Las aplicaciones y los datos basados en la nube son accesibles desde cualquier dispositivo conectado a Internet, lo que permite a los miembros del equipo trabajar de forma remota y en cualquier lugar. Los proveedores de servicios en la nube (CSP) gestionan la infraestructura subyacente, lo que ahorra a las organizaciones el costo de los servidores y otros equipos y también proporciona copias de seguridad de red automatizadas para una confiabilidad adicional. Las infraestructuras en la nube se escalan según la demanda y pueden ajustar dinámicamente los recursos informáticos, la capacidad y la infraestructura a medida que cambian los requisitos de carga. Además, los CSPs actualizan regularmente las ofertas, dando a los usuarios un acceso continuo a la última tecnología innovadora.

Contenedores, microservicios y computación en la nube están trabajando juntos para llevar el desarrollo de aplicaciones y la entrega a nuevos niveles que no serían posibles con metodologías y entornos tradicionales. Estos enfoques de última generación añaden agilidad, eficiencia, fiabilidad y seguridad al ciclo de vida del desarrollo de software, todo lo cual conduce a una entrega más rápida de aplicaciones y mejoras a los usuarios finales y al mercado.

Seguridad

Las aplicaciones en contenedores inherentemente tienen un nivel de seguridad, ya que pueden ejecutarse como procesos aislados y pueden funcionar independientemente de otros contenedores. Un aislamiento completo podría impedir que cualquier código malicioso afectara a otros contenedores o invadiera el sistema host. Sin embargo, las capas de aplicación dentro de un contenedor a menudo se comparten entre contenedores. En términos de eficiencia de recursos, esto es un plus, pero también abre la puerta a la interferencia y las brechas de seguridad en los contenedores. Lo mismo puede decirse del sistema operativo compartido, ya que varios contenedores pueden asociarse con el mismo sistema operativo de host. Las amenazas de seguridad para el sistema operativo común pueden afectar a todos los contenedores asociados y, por el contrario, una violación de contenedor puede invadir potencialmente el sistema operativo del sistema host.

Pero ¿qué pasa con la imagen del contenedor en sí? ¿Cómo pueden las aplicaciones y los componentes de código abierto empaquetados dentro de un contenedor mejorar la seguridad? Los proveedores de tecnología de contenedores, como Docker, siguen abordando activamente los retos de seguridad de los contenedores. La contenerización ha tomado un enfoque "seguro por defecto", con la premisa de que la seguridad debe ser inherente a la plataforma y no a una solución desplegada y configurada por separado. Con este fin, el motor de contenedor da soporte a todas las propiedades de aislamiento predeterminadas inherentes al sistema operativo subyacente. Los permisos de seguridad se pueden definir para bloquear automáticamente el ingreso de componentes no deseados a los contenedores o para limitar las comunicaciones con recursos innecesarios.

Por ejemplo, Linux Namespaces ayuda a proporcionar una vista aislada del sistema a cada contenedor. Esto incluye redes, puntos de montaje, ID de proceso, ID de usuario, comunicación entre procesos y configuraciones de nombre de host. Namespaces se puede utilizar para limitar el acceso a cualquiera de estos recursos por medio de procesos dentro de cada contenedor. Normalmente, los subsistemas que no tienen soporte para Namespace no son accesibles desde un contenedor. Los administradores pueden crear y gestionar fácilmente estas "restricciones de aislamiento" en cada aplicación en contenedores por medio de una interfaz de usuario simple.

Los investigadores están trabajando para fortalecer aún más la seguridad de los contenedores de Linux. Hay una amplia variedad de soluciones de seguridad disponibles para automatizar la detección y respuesta de amenazas en una empresa, para supervisar y aplicar el cumplimiento de las normas de la industria y las políticas de seguridad, para garantizar el flujo seguro de datos en las aplicaciones y puntos finales, y mucho más.

Conozca una estrategia para escalar la seguridad de los contenedores en organizaciones de cualquier tamaño.

Virtualización frente a contenerización

Los contenedores a menudo se comparan con máquinas virtuales (VM) porque ambas tecnologías permiten eficiencias de computación significativas al permitir que varios tipos de software (basados en Linux o Windows) se ejecuten en un entorno único. Sin embargo, la tecnología de contenedores está demostrando beneficios significativos por encima de los de la virtualización y se está convirtiendo rápidamente en la tecnología preferida por los profesionales de TI.

La tecnología de virtualización permite que varios sistemas operativos y aplicaciones de software se ejecuten simultáneamente y compartan los recursos de un único sistema físico. Por ejemplo, una organización de TI puede ejecutar tanto Windows como Linux o varias versiones de un sistema operativo, junto con varias aplicaciones en el mismo servidor. Cada aplicación y sus archivos, bibliotecas y dependencias relacionados, incluida una copia del sistema operativo (SO), se empaquetan juntos como una VM. Con múltiples máquinas virtuales que se ejecutan en una sola máquina física, es posible lograr ahorros significativos en costos de capital, operativos y de energía.

Para obtener más información general sobre la virtualización, consulte el video "Virtualización en 2019" y "Virtualización: una guía completa".

La contenerización, por otro lado, utiliza recursos de computación aún más eficientemente. Un contenedor crea un único paquete ejecutable de software que empaqueta el código de aplicación junto con todos los archivos de configuración relacionados, las bibliotecas y las dependencias necesarias para que se ejecute. Sin embargo, a diferencia de las máquinas virtuales, los contenedores no se agrupan en una copia del sistema operativo. En su lugar, se instala el motor de tiempo de ejecución del contenedor en el sistema operativo del sistema host, convirtiéndose en el conducto por medio del cual todos los contenedores del sistema de computación comparten el mismo sistema operativo.

Como se indica, los contenedores a menudo se denominan "ligeros", pues comparten el kernel del sistema operativo y no requieren la sobrecarga de asociar un sistema operativo dentro de cada aplicación (como es el caso de una VM). Otras capas de contenedores (contenedores y bibliotecas comunes) también se pueden compartir entre varios contenedores, lo que hace que sean inherentemente más pequeños en capacidad que una VM y que se inicien más rápido. A continuación, se pueden ejecutar varios contenedores en la misma capacidad de computación como una única máquina virtual, lo que aumenta las eficiencias del servidor, reduciendo aún más los costos de servidor y licencias.

Soluciones relacionadas
Red Hat OpenShift on IBM Cloud

Red Hat OpenShift en IBM Cloud aprovecha OpenShift en entornos públicos e híbridos para obtener velocidad, capacidad de respuesta al mercado, escalabilidad y confiabilidad.

Explore Red Hat OpenShift on IBM Cloud
IBM Cloud Satellite

Con IBM Cloud Satellite puede implementar servicios en la nube consistentes en cualquier lugar: de forma local, en el borde y en los entornos de nube pública.

Explore IBM Cloud Satellite
IBM Cloud Code Engine

Ejecute imágenes de contenedores, trabajos por lotes o código fuente como cargas de trabajo sin servidor, sin necesidad de dimensionamiento, implementación, redes o escalado.

Explore IBM Cloud Code Engine
Recursos Contenedores en la empresa

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

¿Qué es Docker?

Docker es una plataforma de código abierto para crear, implementar y gestionar aplicaciones en contenedores.

¿Qué son los microservicios?

En una arquitectura de microservicios, cada aplicación se compone de muchos servicios más pequeños, poco acoplados y de implementación independiente.

Dé el siguiente paso

Red Hat OpenShift on IBM Cloud ofrece a los desarrolladores una forma rápida y segura de contenerizar e implementar cargas de trabajo empresariales en clústeres de Kubernetes.Descargue tareas tediosas y repetitivas relacionadas con gestión de seguridad, gestión de conformidad, gestión de implementación y gestión del ciclo de vida continuo.Debido a que IBM gestiona OpenShift Container Platform (OCP), tendrá más tiempo para dedicarse a sus tareas principales.

Explore Red Hat OpenShift on IBM Cloud