Contenedores

¿Qué es un contenedor de Linux?

Un contenedor de Linux® es un conjunto de uno o más procesos que están aislados del resto del sistema. Todos los archivos que se necesitan para ejecutarlos provienen de una imagen diferente, lo cual significa que los contenedores de Linux son móviles y homogéneos a medida que pasan de la etapa de desarrollo a la de prueba y, finalmente, a la de producción. Esto los hace mucho más rápidos que los canales de desarrollo que necesitan replicar entornos de prueba tradicionales.

What is a container

Imagínese que debe desarrollar una aplicación. Usted hace su trabajo en una computadora portátil y su entorno tiene una configuración específica. Probablemente las configuraciones de otros desarrolladores sean un poco diferentes. La aplicación que está desarrollando se basa en esa configuración y depende de archivos, bibliotecas y dependencias específicos. Pero su empresa tiene entornos de prueba y producción que están estandarizados con sus propias configuraciones y sus propios conjuntos de archivos compatibles. Usted quiere emular esos entornos de forma local tanto como sea posible, pero sin los gastos de recrear los entornos del servidor. ¿Cómo va a lograr que su aplicación funcione en estos entornos, apruebe el control de calidad y se implemente sin demasiadas dificultades, sin reescribirla y sin problemas que solucionar? La respuesta: contenedores.

El contenedor que incluye su aplicación tiene las bibliotecas, las dependencias y los archivos necesarios para que pueda llevarlo a la etapa de producción sin ninguno de los efectos adversos. En realidad, los contenidos de una imagen de contenedor pueden considerarse como una instalación de una distribución de Linux porque viene completa con paquetes RPM, archivos de configuración, etc. Sin embargo, la distribución de las imágenes de los contenedores es mucho más fácil que la instalación de nuevas copias de los sistemas operativos. Si se evita la crisis, todos felices.

Este es un ejemplo común, pero los contenedores de Linux se pueden aplicar a los problemas de muchas formas diferentes, en las que se requiere lo más avanzado en portabilidad, capacidad de configuración y aislamiento. El objetivo de los contenedores Linux es desarrollar más rápidamente las necesidades del negocio y satisfacerlas a medida que van surgiendo. Los contenedores satisfacen siempre la demanda, sin importar la infraestructura en que se encuentren (local, en la nube o en un híbrido de ambas). Sin embargo, la elección de la plataforma correcta para los contenedores es tan importante como los contenedores mismos.

¿Y no se trata simplemente de una virtualización?

No exactamente. Considérelo más como un complemento. A continuación encontrará una forma sencilla de pensar en ambos aspectos:

  • La virtualización permite que sus sistemas operativos (Windows o Linux) se ejecuten simultáneamente en un solo sistema de hardware.
  • Los contenedores comparten el mismo kernel del sistema operativo y aíslan los procesos de las aplicaciones del resto del sistema. Por ejemplo: los sistemas de Linux ARM ejecutan contenedores de Linux ARM, los sistemas de Linux x86 ejecutan contenedores de Linux x86, los sistemas de Windows x86 ejecutan contenedores de Windows x86. Los contenedores de Linux son muy portátiles, pero deben ser compatibles con el sistema subyacente.

virtualization vs containers

¿Pero esto qué significa? Para los principiantes, la virtualización utiliza un hipervisor para emular el hardware que permite que múltiples sistemas operativos funcionen en conjunto. Pero ese hipervisor no es tan ligero como los contenedores. Cuando se cuenta con recursos limitados con capacidades limitadas, se necesitan aplicaciones ligeras que puedan implementarse en conjunto. Los contenedores de Linux se ejecutan de forma nativa desde el sistema operativo y lo comparten con todos los demás contenedores, para que sus aplicaciones y servicios se mantengan ligeros y se ejecuten en paralelo con prontitud.

Los contenedores de Linux son otro paso en la evolución sobre la forma en que desarrollamos, implementamos y administramos las aplicaciones. Las imágenes de los contenedores de Linux proporcionan portabilidad y control de versiones, lo cual permite garantizar que lo que funciona en la computadora portátil del desarrollador también funciona en la producción. En comparación con las máquinas virtuales, un contenedor de Linux en ejecución utiliza menos recursos, tiene una interfaz estándar (inicio, interrupción, variables del entorno, etc.), mantiene el aislamiento de las aplicaciones y es más fácil de administrar como parte de una aplicación más grande (contenedores múltiples). Además, las aplicaciones en contenedores múltiples se pueden coordinar en las distintas nubes.


Una breve historia sobre contenedores

Evolution of containers download button

Los contenedores no se originaron en Linux, pero en el mundo del open source, las mejores ideas se toman prestadas, se modifican y se mejoran. Con los contenedores ocurre lo mismo.

La idea de lo que ahora llamamos "tecnología de los contenedores" apareció por primera vez en el año 2000, como FreeBSD jail, una tecnología que permite el particionamiento de un sistema FreeBSD en múltiples subsistemas o jails (jaulas en inglés). Las jaulas se desarrollaron como entornos seguros que un administrador de sistemas podía compartir con múltiples usuarios dentro o fuera de una organización. En una jaula, el objetivo era que los procesos se crearan en un entorno chroot modificado, en el que el acceso al sistema de archivos, a las redes y a los usuarios está virtualizado y no puede dejar de depender o comprometer a todo el sistema. Las jaulas tenían una implementación limitada, pero finalmente se descubrieron los métodos para salir de ese entorno.

El concepto era convincente.

En 2001, la implementación de un entorno aislado se introdujo en Linux, a través del proyecto VServer de Jacques Gélinas. Como Gélinas señala, este fue un intento de ejecutar "varios servidores Linux de uso general [sic] en una sola caja con un alto grado de independencia y seguridad". Una vez que esta base se estableció para varios espacios de usuarios controlados en Linux, las piezas comenzaron a armar el rompecabezas de lo que hoy es un contenedor de Linux.

Los contenedores se hacen más prácticos

De forma muy rápida, cada vez se combinan más tecnologías para hacer que este enfoque aislado sea una realidad. Los grupos de control (cgroups) son una función kernel que controla y limita el uso de recursos para un proceso o grupo de procesos. Además, los cgroups utilizan systemd, un sistema de inicialización que configura el espacio de usuario y gestiona sus procesos, para proporcionar un mayor control de estos procesos aislados. Ambas tecnologías, que añaden más control a Linux, fueron el marco para determinar si los entornos tenían éxito al permanecer separados.

Los avances realizados con los espacios de los nombres del kernel proporcionaron el próximo paso para los contenedores. Con los espacios de los nombres del kernel, todo se podía virtualizar en el kernel de Linux, desde las identificaciones de los procesos hasta los nombres de la red. Los espacios de nombres de los usuarios son de los más nuevos, y "permiten asignaciones por espacio de nombres de usuario e identificaciones de grupo. En el contexto de los contenedores, esto significa que los usuarios y los grupos pueden tener privilegios para ciertas operaciones dentro del contenedor sin tener esos privilegios fuera del contenedor". El proyecto de contenedores de Linux (LXC) añadió algunas de las herramientas, plantillas, bibliotecas y enlaces entre lenguajes necesarios para estos avances, lo cual mejora la experiencia del usuario al usar contenedores. LXC simplificó a los usuarios el inicio de los contenedores con una interfaz de línea de comandos sencilla.

Entra Docker

En el 2008, Docker apareció en escena (mediante dotCloud) con su tecnología para contenedores del mismo nombre. La tecnología Docker añadió muchos conceptos y herramientas nuevos: una interfaz de línea de comandos sencilla para ejecutar y diseñar nuevas imágenes en capas, un daemon del servidor, una biblioteca de imágenes en contenedores prediseñadas y el concepto de un servidor de registros. Estas tecnologías combinadas permitieron que los usuarios diseñaran rápidamente nuevos contenedores en capas y los compartieran con otros sin ninguna dificultad.

Red Hat reconoció el poder de la colaboración en este nuevo ecosistema y utilizó la tecnología subyacente para OpenShift Container Platform. Para disipar los temores de dependencia de un único proveedor para dicha tecnología tan importante, Docker Inc. contribuyó con muchos de los componentes subyacentes en los proyectos de open source impulsados por la comunidad (runc es parte de la Open Containers Initiative y containerd se ha movido al CNCF).

Existen tres estándares importantes que aseguran la interacción de las tecnologías de los contenedores: las especificaciones Imagen, Distribución y Tiempo de ejecución de OCI. La combinación de tales especificaciones permite que los proyectos de la comunidad, los productos comerciales y los proveedores de nube diseñen tecnologías de contenedores con capacidad de interactuar (imagínese que necesitara incluir las imágenes diseñadas de forma personalizada en un servidor de registros del proveedor de la nube; lo primero que necesitaría es que dicho servidor funcionara). En la actualidad, Red Hat y Docker, entre otros, son miembros de la Open Container Initiative (OCI), para trabajar en pro de una estandarización abierta del sector de tecnologías de contenedor.


¿Qué se puede decir de la seguridad en los contenedores?

Los contenedores son muy conocidos, pero ¿qué tan seguros son? Existe una gran cantidad de factores que afectan la seguridad de los contenedores: se debe proteger el canal de los contenedores y la aplicación, el entorno y la infraestructura de implementación, y se necesita un plan de integración con las herramientas y políticas de seguridad empresarial. Necesita un plan. Nosotros podemos ayudarlo.


Nosotros podemos ayudarlo.

Red Hat goza de una larga trayectoria de trabajo en la comunidad de open source para hacer que las tecnologías, por ejemplo, los contenedores, sean seguras, estables y fiables. A eso nos dedicamos. Y luego brindamos soporte para esas tecnologías. Por eso estamos aquí para ayudarlo.

Con las tecnologías de Red Hat no necesita adivinar la forma correcta de diseñar contenedores. ¿Necesita que sus equipos de desarrollo participen en una plataforma diseñada para los contenedores? ¿Desea ejecutar la infraestructura para los contenedores en un sistema operativo de primera categoría, o quiere ofrecer soluciones de almacenamiento para la gran cantidad de datos que estos generan? Entonces las soluciones de Red Hat son ideales para usted.

Hay mucho más que hacer con los contenedores