Saltar al contenido

¿Qué es un contenedor? Lo que las operaciones y los desarrollos informáticos necesitan saber…

Según mi media naranja, un recipiente es algo en lo que entra la comida cuando terminas, pero no has terminado todo. Todavía estoy luchando con el concepto, ya que el papel de aluminio siempre me pareció bien. Pero en el mundo de la informática, los contenedores son los nuevos brillantes.

Mi problema, sin embargo, es que todo el mundo parece tratar de explicar los contenedores comparándolos con la virtualización. O, incluso se refieren a los contenedores como un «tipo de virtualización». No estoy seguro de que sea una buena manera de entenderlos. Aunque ciertamente hay algunas cargas de trabajo que hemos hecho en el pasado con una máquina virtual, y que tal vez deberíamos hacer en el futuro en un contenedor, en realidad son dos bestias diferentes. Así que, solo para este post, no usemos la palabra virtualización en absoluto. En su lugar, empecemos por mirar a los actores en un entorno contenedor.

¿Qué es un contenedor? Lo que las operaciones y los desarrollos informáticos necesitan saber…
¿Qué es un contenedor? Lo que las operaciones y los desarrollos informáticos necesitan saber…

Entornos de contenedores: los principales actores

Sistema operativo del host

Empieza con el sistema operativo del anfitrión. En el pasado, esta era una distribución de Linux, porque los contenedores tal como los conocemos hoy en día, por lo general, derivan de una característica del núcleo de Linux. Hoy en día, la contenedorización más robusta en Linux a menudo viene de libdocker, creado por Docker, pero Linux ha sido el sistema operativo anfitrión de los contenedores. Microsoft se metió en la mezcla con Windows Server 2016, que cuenta con capacidades nativas de contenedores de Windows.

Ahora, en los malos tiempos, sólo se instalaban aplicaciones directamente en el sistema operativo del host. La aplicación normalmente tenía un número de dependencias y prerrequisitos – así que, en términos de Linux, puede que hayas tenido que instalar un puñado de paquetes de prerrequisitos primero. La aplicación también dejó caer un montón de sus propias cosas por todos lados. Esto creó un poco de molestia con el despliegue de la aplicación, de hecho, porque hacer que una aplicación funcione era a menudo un esfuerzo de prueba y error. De hecho, se crearon tecnologías completas de instalación y empaquetado para ayudar a agrupar mejor una aplicación y sus requisitos previos, específicamente para evitar esos problemas. Pero aún así se encontraron con problemas. Un paquete que espera ser instalado en CentOS 6.1 podría no instalarse tan bien en RHEL7, sólo por las diferencias.

También te encontraste con problemas con múltiples aplicaciones en un solo host, a veces. La aplicación A quiere el paquete 1, pero quiere la versión 2.3, que podría no ser capaz de convivir con la versión 2.2 que quiere la aplicación B.

Contenedores

Así que el siguiente actor en el sistema es el propio contenedor. Esto es – estoy simplificando un poco, pero tened paciencia – básicamente una carpeta que contiene todo lo que la aplicación necesita más allá del sistema operativo base. Y el sistema operativo base, en el mundo de los contenedores, se está convirtiendo rápidamente en una cosa cada vez más pequeña. Inicialmente, el sistema operativo base era una distribución completa de Linux, que empaquetaba un montón de cosas en la caja. Hoy en día, un sistema operativo contenedor puede ser algo muy ligero, como CoreOS, Photon de VMware o Nano Server de Microsoft. Así que en lugar de asumir un sistema operativo base bastante bien equipado, un contenedor asume un sistema operativo base bastante mínimo, y trae consigo lo que necesita.

La capa de contenedorización

Toda la magia ocurre en el tercer actor, que es el intermediario que realmente hace la contenedorización. Docker, si se quiere, o la capa de contenedores de Windows Server. Esta capa de intermediario esencialmente envuelve una manta alrededor del contenedor, haciendo que el contenedor, y la aplicación que contiene, crean que es lo único que se ejecuta en el sistema operativo anfitrión. La aplicación sólo ve sus archivos, sólo sus procesos y así sucesivamente. El nivel real de aislamiento depende un poco de las circunstancias, y no es tan total como el aislamiento entre, por ejemplo, máquinas virtuales, por lo que los contenedores no son perfectos para cada escenario de aplicación.

Este intermediario hace algunas cosas muy buenas. Por ejemplo, y no muy diferente a la App-V de Microsoft, la capa de contenedorización puede interceptar las solicitudes de lectura y escritura de las aplicaciones, de modo que mientras una aplicación puede pensar que está escribiendo en una carpeta a nivel de sistema, y más tarde leyendo datos de esa ubicación, en realidad está leyendo y escribiendo datos en su propia carpeta, manteniendo el «contenedor» alrededor de la aplicación.

Contenedores: Cómo encaja la virtualización

Entonces, ¿dónde entra en juego la virtualización? Bueno, con los contenedores, se obtiene algo del mismo aislamiento entre aplicaciones en el mismo host, como he indicado. Pero no tienes que tener un host que pretende ser varias piezas de hardware diferentes, así que tiendes a tener más aplicaciones por host, lo que significa una mejor densidad en el centro de datos. También puedes mezclar y combinar, ejecutando una máquina virtual, por ejemplo, como un host contenedor que a su vez ejecuta múltiples contenedores de aplicaciones. Docker ofrece soluciones de clustering para su pila, dándole una capacidad similar a la de las máquinas virtuales para mover contenedores a través de los hosts, sin el uso de las máquinas virtuales tradicionales.

Los contenedores son otra herramienta del arsenal. Son especialmente adecuados para aplicaciones de tamaño reducido, como las aplicaciones web, y por eso ahora mismo los ves funcionando mucho en esos contextos. A medida que los desarrolladores aprendan a escribir aplicaciones que estén mejor «contenedorizadas», es probable que las veamos utilizadas en más situaciones. Los contenedores ofrecen ventajas: hacer girar uno nuevo es notablemente más rápido que hacer girar una nueva máquina virtual, su sistema operativo invitado y sus aplicaciones, por lo que en un ciclo rápido de prueba-de-prueba-dev, los contenedores pueden significar menos espera. Pero los contenedores no son el final, sino que, como he señalado, tienen un concepto diferente de aislamiento (y los contenedores Hyper-V de Microsoft confunden el panorama al ofrecer un tercer modelo de aislamiento), por lo que en algunos escenarios sensibles a la seguridad, los contenedores podrían no funcionar.

En general, los contenedores son un campo apasionante y de rápida evolución, lo que significa que todo lo que se sabe de ellos hoy en día podría ser diferente dentro de un año. Así que es importante mantenerse al día.

Mira este curso: Docker & Containers: El panorama general