Contenedores

¿Qué es un contenedor de Linux?

Un contenedor de Linux® es un conjunto de uno o más procesos que se encuentran 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 procesos de desarrollo, los cuales necesitan replicar los entornos de prueba tradicionales. Debido a su popularidad y facilidad de uso, los contenedores también son una parte importante de la seguridad de TI.

What is a container

Imagínese que quiere desarrollar una aplicación. Usted trabaja en una computadora portátil y su entorno tiene una configuración específica. Otros desarrolladores pueden tener configuraciones un poco diferentes. La aplicación que está desarrollando se basa en esa configuración y depende de archivos, bibliotecas y dependencias específicos. Mientras tanto, su empresa tiene entornos de desarrollo y producción que están estandarizados con sus propias configuraciones y sus propios conjuntos de archivos compatibles. Quiere emular esos entornos tanto lo más posible de forma local, pero sin la sobrecarga de tener que recrear los entornos del servidor. Entonces, ¿cómo logra hacer que su aplicación funcione en estos entornos, que apruebe el control de calidad y que se implemente sin demasiadas dificultades, sin tener que reescribirla y que solucionar los problemas? La respuesta: con los contenedores.

El contenedor que incluye su aplicación tiene las bibliotecas, las dependencias y los archivos necesarios para que pueda moverlo a la etapa de producción sin ninguno de los efectos adversos desagradables. En realidad, el contenido de una imagen de contenedor puede considerarse como una instalación de una distribución de Linux, ya que incluye 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 son 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 de Linux es desarrollar con mayor rapidez y satisfacer las necesidades del negocio a medida que surjan. En algunos casos, como con la transmisión de datos en tiempo real gracias a Apache Kafka, los contenedores son fundamentales porque son la única forma de proporcionar la escalabilidad que necesita una aplicación. Los contenedores siempre satisfacen la demanda, independientemente de la infraestructura en la que se encuentren, ya sea en entornos locales, en la nube o en una combinación de ambos. Sin embargo, la elección de la plataforma adecuada de contenedores es tan importante como los contenedores en sí.

La seguridad de los contenedores tiene varias capas para proteger todas las etapas del proceso del contenedor.

¿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 Linux ARM ejecutan contenedores de Linux ARM, los sistemas Linux x86 ejecutan contenedores de Linux x86, los sistemas 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

¿Qué significa esto? Para los principiantes, la virtualización utiliza un hipervisor para emular el hardware que permite que múltiples sistemas operativos se ejecuten en paralelo. Pero ese hipervisor no es tan ligero como los contenedores. Cuando se cuenta con recursos limitados con capacidades limitadas, se necesitan aplicaciones ligeras que se puedan implementar densamente. 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 rápidamente en paralelo.

Los contenedores de Linux son otro salto evolutivo en la forma en que desarrollamos, implementamos y administramos las aplicaciones. Las imágenes de contenedores de Linux proporcionan portabilidad y control de versiones, lo que permite garantizar que lo que funciona en la computadora portátil del desarrollador también funcione en la etapa de producción. En comparación con las máquinas virtuales, un contenedor de Linux en ejecución requiere menos uso de los 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 (varios contenedores). Además, las aplicaciones con múltiples contenedores se pueden organizar en las distintas nubes.


Una breve historia sobre contenedores

Evolution of containers download button

Si bien los contenedores no se originaron en Linux, en el mundo 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 contenedores" surgió por primera vez en el año 2000 como FreeBSD jail, una tecnología que permite la partición de un sistema FreeBSD en múltiples subsistemas o "jaulas" (jails). Las jaulas se desarrollaron como entornos seguros que un administrador del sistema podía compartir con múltiples usuarios dentro o fuera de una empresa. 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 pudieran dejar de depender de todo el sistema ni comprometerlo. Las jaulas tenían una implementación limitada, pero finalmente se descubrieron 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 lo expresó Gélinas, este fue un intento por 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 múltiples 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 del kernel que controla y limita el uso de los 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 mayor control de estos procesos aislados. Ambas tecnologías, que agregan más control a Linux, también fueron el marco para que los entornos pudieran tener éxito al permanecer separados.

Los avances realizados en torno a los espacios de nombres del kernel revelaron el próximo paso para los contenedores. Con los espacios de nombres del kernel, todo se podrí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 de él". El proyecto de contenedores de Linux (LXC) agregó entonces algunas de las herramientas, plantillas, bibliotecas y enlaces entre lenguajes muy necesarios para estos avances, lo que mejoró la experiencia del usuario al usar los contenedores. El LXC simplificó para los usuarios el inicio de los contenedores con una interfaz de línea de comandos sencilla.

Aparición de Docker

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

Red Hat reconoció el poder de la colaboración dentro de este ecosistema nuevo y utilizó la tecnología subyacente para OpenShift Container Platform. Para disipar los temores de que un solo proveedor controle una tecnología tan importante, Docker Inc. aportó muchos de los componentes subyacentes a los proyectos open source dirigidos por la comunidad (runc es parte de la Open Containers Initiative y containerd se ha trasladado a CNCF).

Hay tres estándares importantes que garantizan la interoperabilidad de las tecnologías de contenedores: las especificaciones de la OCI en cuanto a Imagen, Distribución y Tiempo de ejecución. 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 interoperables (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 funcione). 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 contenedores.


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

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


Nosotros podemos ayudarlo.

Red Hat goza de una larga trayectoria de trabajo en la comunidad open source para permitir que las tecnologías, como los contenedores, sean seguras, estables y confiables. A esto nos dedicamos. Y luego brindamos soporte para esas tecnologías. Por eso, estamos para ayudarlo si lo necesita.

Las tecnologías de Red Hat eliminan las conjeturas en cuanto a la forma correcta de hacer 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.

Todavía queda mucho más por hacer con los contenedores