¿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 empaquetado de código de software con solo las bibliotecas de sistema operativo (SO) y las dependencias necesarias para ejecutar el código para crear un único ejecutable ligero, denominado contenedor, que se ejecuta de manera coherente en cualquier infraestructura. Más portátil y eficiente en recursos que las máquinas virtuales (VM), los contenedores se han convertido en las unidades de cálculo de facto de las aplicaciones nativas en la nube modernas.

La contenerización permite a los desarrolladores crear y desplegar aplicaciones de forma más rápida y segura. Con los métodos tradicionales, el código se desarrolla en un entorno informático específico que, cuando se transfiere a una nueva ubicación, a menudo provoca errores. Por ejemplo, cuando un desarrollador transfiere código desde un sistema de escritorio a una máquina virtual o desde un sistema operativo Linux a Windows. La contenerización elimina este problema ya que agrupa el código de aplicación con los archivos de configuración, las bibliotecas y las dependencias correspondientes que se necesitan para su ejecución. Este paquete único de software o "contenedor" se abstrae del sistema operativo del host, y por lo tanto, es independiente y portátil, capaz de ejecutarse en cualquier plataforma o nube, sin ningún problema.

El concepto de contenerización y aislamiento de procesos surgió hace décadas, pero la aparición de Docker Engine de código abierto en 2013, un estándar del sector para contenedores con herramientas de desarrollador simples y un método 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 adoptantes de contenedores reconoció 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 esperaban que el 50 % o más de sus aplicaciones existentes se migrara a contenedores durante los próximos dos años.

Los contenedores a menudo se denominan "ligeros", lo que significa que comparten el kernel del sistema operativo de la máquina y no requieren la sobrecarga que supone asociar un sistema operativo dentro de cada aplicación. Los contenedores son inherentemente más pequeños en capacidad que una máquina virtual y requieren menos tiempo de inicio, lo que permite ejecutar muchos más contenedores en la misma capacidad de cálculo que una sola máquina virtual. Esto genera una mayor eficiencia del servidor y, a su vez, reduce los costes de servidor y licencia.

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 la dependencia de un proveedor en la nube y ofrece otros beneficios notables como aislamiento de fallos, facilidad de gestión o seguridad simplificada, entre otros (véase a continuación).

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 con todos los archivos de configuración relacionados, las bibliotecas y las dependencias correspondientes que se necesitan para su ejecución. Las aplicaciones contenerizadas están "aisladas", de modo que no se empaquetan en una copia del sistema operativo. En su lugar, se instala un motor de ejecución de código abierto (como el motor de ejecución de 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 informático.

Otras capas de contenedor, como las bibliotecas y las agrupaciones comunes, también se pueden compartir entre varios contenedores. Esto elimina la sobrecarga que supone 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 para iniciarse, 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 del host dota de portabilidad a las aplicaciones y permite que se ejecuten de forma uniforme y coherente en cualquier plataforma o nube. Los contenedores se pueden transportar fácilmente desde un ordenador de sobremesa a una máquina virtual (VM) o desde un sistema operativo Linux a Windows, y se ejecutarán de forma coherente en infraestructuras virtualizadas o en servidores tradicionales "bare metal", ya sea en local o en la nube. Esto garantiza que los desarrolladores de software puedan seguir utilizando las herramientas y los procesos con los que se sienten más cómodos.

Se puede ver por qué las empresas están adoptando rápidamente la contenerización como un método más efectivo para el desarrollo y la gestión de aplicaciones. La contenerización permite a los desarrolladores crear y desplegar aplicaciones de forma más rápida y segura, tanto si es una aplicación monolítica tradicional (una aplicación de software de un solo nivel) o un microservicio modular. Las nuevas aplicaciones basadas en nube se pueden crear desde cero como microservicios contenerizados, desglosando una aplicación compleja en una serie de servicios más pequeños especializados y gestionables. Las aplicaciones existentes se pueden volver a empaquetar en contenedores (o microservicios contenerizados) que utilizan recursos de cálculo de forma más eficiente.

Ventajas de la contenerización, al detalle

La contenerización ofrece importantes ventajas a los desarrolladores y los equipos de desarrollo. Entre las más destacadas se incluyen:

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

Agilidad: el Docker Engine de código abierto para ejecutar contenedores inició el estándar del sector para contenedores con herramientas de desarrollador simples y un método de empaquetado universal que funciona en sistemas operativos Linux y Windows. El ecosistema de contenedores se ha reorientado a los motores gestionados por Open Container Initiative (OCI). Los desarrolladores de software pueden seguir utilizando herramientas y procesos ágiles o DevOps para acelerar el desarrollo y mejorar las aplicaciones.

Velocidad: los contenedores a menudo se denominan "ligeros", lo que significa que comparten el kernel del sistema operativo (SO) de la máquina sin sufrir esta sobrecarga adicional. Esto no solo aumenta la eficiencia del servidor, sino que también reduce los costes de servidor y licencia y acelera los tiempos de inicio, ya que no es necesario arrancar ningún sistema operativo.

Aislamiento de errores: cada aplicación en contenedor está aislada y opera de forma independiente de las otras. El fallo de un contenedor no afecta a la continuidad de las operaciones 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 de contenedores puede aprovechar cualquier técnica de aislamiento de seguridad del sistema operativo, como el control de acceso de SELinux, para aislar errores dentro de los contenedores.

Eficiencia: el software que se ejecuta en entornos contenerizados 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. De esta manera, los contenedores son inherentemente más pequeños en capacidad que una máquina virtual y requieren menos tiempo de inicio, lo que permite ejecutar muchos más contenedores en la misma capacidad de cálculo que una sola máquina virtual. Esto genera una mayor eficiencia del servidor, reduciendo los costes de servidor y licencia.

Gestión sencilla: una plataforma de orquestación de contenedores automatiza la instalación, el escalado y la gestión de cargas de trabajo y servicios contenerizados. Las plataformas de orquestación de contenedores facilitan algunas tareas de gestión como escalar aplicaciones contenerizadas, desplegar nuevas versiones de aplicaciones y proporcionar supervisión, registro y depuración, entre otras funciones. Kubernetes, tal vez el sistema de orquestación de contenedores más popular, es una tecnología de código abierto (creada originalmente por Google, basada en su proyecto interno llamado Borg) que automatiza las funciones de contenedor de Linux en su origen. Kubernetes funciona con muchos motores de contenedor, como Docker, pero también funciona con cualquier sistema de contenedores 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 los componentes no deseados y que no entren en los contenedores ni limiten 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 puesto de manifiesto la necesidad de contar con estándares en torno a la tecnología de contenedores y un enfoque para empaquetar código de software. Open Container Initiative (OCI), establecida en junio de 2015 por Docker y otros líderes del sector, promueve especificaciones y estándares abiertos, mínimos y comunes en torno a la tecnología de contenedores. Gracias a ello, OCI está ayudando a ampliar las opciones para los motores de código abierto. Los usuarios no se quedarán atrapados en la tecnología de un proveedor específico, sino que podrán aprovechar las tecnologías certificadas por OCI para crear aplicaciones contenerizadas utilizando un conjunto variado de herramientas de DevOps y ejecutarlas de forma coherente en las infraestructuras que prefieran.

Actualmente, Docker es una de las tecnologías de motores de contenedores más conocidas y altamente utilizadas, pero no es la única opción disponible. El ecosistema está estandarizando 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 a medida que 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

Empresas de software grandes y pequeñas están adoptando los microservicios como un método más efectivo para el desarrollo y la 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í a través de interfaces comunes (como las API) e interfaces REST (como HTTP). Gracias al uso de microservicios, los equipos de desarrollo pueden centrarse en actualizar áreas específicas de una aplicación sin que repercuta en la aplicación en conjunto, acelerando así el desarrollo, las pruebas y el despliegue.

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

Es más, los microservicios y la contenerización funcionan bien cuando se utilizan conjuntamente. 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 todas las ventajas inherentes de los contenedores: la portabilidad en términos del proceso de desarrollo y la compatibilidad de proveedores (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, y las capas de seguridad, entre otras.

Las comunicaciones actuales se están migrando 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 sobre la marcha. Los proveedores de servicios en la nube (CSP, por sus siglas en inglés) gestionan la infraestructura subyacente, lo que permite a las organizaciones ahorrar el coste de los servidores y otros equipos y también proporciona copias de seguridad de red automatizadas para generar una fiabilidad adicional. Las infraestructuras de nube se escalan bajo demanda y pueden ajustar dinámicamente los recursos informáticos, la capacidad y la infraestructura, en función de los requisitos de carga. Además, los CSP actualizan con frecuencia sus ofertas, y dan a los usuarios acceso continuo a las últimas innovaciones tecnológicas.

Contenedores, microservicios y cloud computing trabajan conjuntamente para llevar el desarrollo y la entrega de aplicaciones a nuevos niveles, no alcanzables con metodologías y entornos tradicionales. Esta nueva generación de enfoques añade agilidad, eficiencia, fiabilidad y seguridad al ciclo de vida del desarrollo de software, lo que se traduce en una entrega de aplicaciones más rápida y en mejoras para los usuarios finales y el mercado.

Seguridad

Las aplicaciones contenerizadas presentan un nivel de seguridad inherente, ya que pueden ejecutarse como procesos aislados y pueden funcionar de forma independiente 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 punto a favor, pero también abre la puerta a la interferencia e infracciones de seguridad en los contenedores. Lo mismo podría decirse del sistema operativo compartido, ya que varios contenedores pueden asociarse al mismo sistema operativo de host. Las amenazas de seguridad al sistema operativo común pueden afectar a todos los contenedores asociados y, por otro lado, una infracción en un contenedor podría invadir el sistema operativo del host.

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

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

Los investigadores están trabajando para reforzar aún más la seguridad de los contenedores de Linux, y hay disponible una amplia gama de soluciones de seguridad para automatizar la detección de amenazas y la respuesta en una empresa, para supervisar y aplicar el cumplimiento de las normas del sector y las políticas de seguridad y para garantizar el flujo seguro de datos a través de aplicaciones y puntos finales, entre muchos otros propósitos.

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

Virtualización frente a contenerización

Los contenedores se suelen comparar con máquinas virtuales (VM) porque ambas tecnologías ofrecen una gran eficiencia de cálculo permitiendo que varios tipos de software (basados en Linux o Windows) se ejecuten en un único entorno. Sin embargo, la tecnología de contenedores está demostrando ventajas significativamente superiores a las de la virtualización y se está afianzando rápidamente como 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 relacionadas, incluida una copia del sistema operativo (SO), se empaquetan juntos como una máquina virtual. Al ejecutar varias máquinas virtuales en una sola máquina física, se puede obtener un ahorro significativo en los costes de capital, operativos y energéticos.

Para obtener más información sobre la virtualización, vea el vídeo "Virtualización en 2019" y consulte "Virtualización: Guía completa".

La contenerización, por otro lado, utiliza recursos de cálculo con una eficiencia superior. Un contenedor crea un único paquete ejecutable de software que empaqueta el código de aplicación con todos los archivos de configuración relacionados, las bibliotecas y las dependencias correspondientes que se necesitan para su ejecución. Sin embargo, a diferencia de las máquinas virtuales, los contenedores no se empaquetan en una copia del sistema operativo. En su lugar, el motor de ejecución del contenedor se instala en el sistema operativo del sistema host, convirtiéndose en el mecanismo por el que todos los contenedores del sistema informático comparten el mismo sistema operativo.

Como se ha indicado ya, los contenedores a menudo se denominan "ligeros": comparten el kernel del sistema operativo y no requieren la sobrecarga que supone asociar un sistema operativo dentro de cada aplicación (como es el caso de una máquina virtual). Otras capas de contenedor (contenedores y agrupaciones comunes) también se pueden compartir entre varios contenedores, lo que hace que los contenedores sean inherentemente más pequeños en capacidad que una máquina virtual y que se inicien más rápido. Se pueden ejecutar múltiples contenedores en la misma capacidad informática que una única máquina virtual, y generar así una mayor eficiencia del servidor y reducir aún más los costes de servidor y licencia.

Soluciones relacionadas
Red Hat OpenShift on IBM Cloud

Red Hat OpenShift on IBM Cloud aprovecha OpenShift en entornos públicos e híbridos para incrementar la velocidad, la capacidad de respuesta del mercado, la escalabilidad y la fiabilidad.

Explore Red Hat OpenShift on IBM Cloud
IBM Cloud Satellite

Con IBM Cloud Satellite, puede lanzar servicios en la nube coherentes en cualquier lugar: en local, en entornos edge y en entornos de nube pública.

Explore IBM Cloud Satellite
IBM Cloud Code Engine

Ejecute imágenes de contenedor, trabajos por lotes o código fuente como cargas trabajo sin servidor, sin necesidad de dimensionamiento, despliegue, conexión en red o escalado.

Explore IBM Cloud Code Engine
Recursos Contenedores en la empresa

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

¿Qué es Docker?

Docker es una plataforma de código abierto para crear, desplegar 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, débilmente acoplados y de despliegue independiente.

Dé el siguiente paso

Red Hat OpenShift on IBM Cloud facilita a los desarrolladores una forma rápida y segura de contenerizar y desplegar cargas de trabajo empresariales en clústeres de Kubernetes.Libérese de las tareas tediosas y repetitivas en relación con Deshágase de tareas tediosas y repetitivas relacionadas con la gestión de la seguridad, la gestión de la conformidad, la gestión del despliegue y la gestión continua del ciclo de vida.Puesto que IBM se encarga de gestionar OpenShift Container Platform (OCP), tendrá más tiempo para centrarse en las tareas más importantes.

Explore Red Hat OpenShift on IBM Cloud