Me declaro fanático de los contenedores, así que para dar inicio a toda esta serie de publicaciones, quiero hablar de un tema que me gusta mucho, y si bien estoy en constante aprendizaje, me gustaría hablar de lo (poco) que sé, hasta el momento, acerca de este campo y de todas las pasiones que esta explosión de tecnología ha levantado, y si esto sirve de impulso para que alguien más se adentre en esta aventura tecnológica me sentiré honrado.
Primero que todo ¿qué diantres son los contenedores?
TL;DR;
Según la Wikipedia.
Es una tecnología de virtualización en el nivel de sistema operativo (SO) para Linux. Permite que un servidor físico ejecute múltiples instancias de sistemas operativos aislados, conocidos como Servidores Privados Virtuales (SPV o VPS en inglés) o Entornos Virtuales (EV).
Un poco de historia, realmente poco…
Sepan que hace unos años atrás, allá por el 2008 apróximadamente, se unieron unas cuantas empresas y se daba inicio a un proyecto que daría paso a lo que en unos años más tarde se convertiría en unas de las tecnologías que más impacto tendrían en el mundo de las TI, los Contenedores Linux (Linux containers, por su nombre en inglés, para los bilingües).
Esto es hablando de los Contenedores Linux propiamente dichos, ya que, lo cierto es que esta tecnología ha estado presente entre nosotros por varios años gracias a FreeBSD y Solaris, que introdujeron Jails y Containers respectivamente, a lo que tiempo después Linux también se sumó al tren tecnológico.
¿Qué súper poderes tienen los contenedores?
En síntesis, los contenedores nos permiten la virtualización de una manera muy distinta a la que estábamos o, para los que aún no quieren ser cool — jajaja -, estamos acostumbrados. ¿Y cómo funciona la virtualización convencional? en cortas palabras, se simula el hardware para la máquina virtual y se instala todo un sistema operativo sobre el ya existente, esto quiere decir kernel, librerías, binarios y runtimes adicionales, ¿lo malo de esto? nuestras máquinas virtuales terminan ejecutando procesos que no queremos y esto a su vez se traduce en recursos mal usados, ¿se puede controlar todo este mal uso de recursos? por supuesto, pero en muchos casos significa invertir mucho tiempo configurando las máquinas a nuestro gusto y/o necesidades, tedioso ¿cierto?.
¿Y si todo esto se pudiera mejorar? bueno, es posible contar en nuestras máquinas con lo justo y necesario para que lo que queramos ejecutar en ellas no se vea afectado por procesos no deseados, es allí donde intervienen los contenedores; estos al ser una virtualización a nivel de sistema operativo, que de ahora en adelante llamaremos contenerización, requieren de unos módulos del kernel que permiten esta magia, además que estos módulos utilizan el kernel ya presente en el sistema, eliminando la necesidad de la instalación de uno nuevo; poniéndonos un poco más nerds, en los contenedores se instalan solo binarios, librerías y runtimes necesarios, y además de esto necesitan de un userland que permite la simulación de diferentes distribuciones linux, así pues, si estamos trabajando en Manjaro, como es mi caso, podemos utilizar contenedores que traigan consigo Debian, Fedora, CentOS, entre otros, y todo esto compartiendo el kernel que tiene instalado nuesto host linux.
Perdón si me puse muy ñoño, no me controlo.
Todo bien ¿y qué pinta Docker en todo esto?
Si bien, los contenedores son una tecnología súper genial, y como ya saben, están desde hace algún tiempo con nosotros, antes de lo que Docker trajo consigo no era tan sencillo trabajar con ellos, y las alternativas que existían o eran privativas o eran muy malditamente complejas de utilizar, esto relegaba su uso a empresas especializadas; bueno pues, a los creadores de Docker se les ocurrió que podrían traer toda esta tecnología de contenedores al usuario de a pie y masificar su uso, y así es como en el 2013 DotCloud rompió esa brecha al desarrollar y lanzar Docker.
Ya sabemos qué representa Docker, pero ¿qué es realmente?
Para resumir, Docker aprovecha la tecnología de los Contenedores Linux, está desarrollada en torno a ellos, y provee herramientas para su manipulación, por ejemplo creación, despliegue, clusterización, networking, eliminación, entre muchos otros, que espero ir contando en las publicaciones venideras.
Funcionamiento de Docker vs VMs
En la siguiente imagen podemos apreciar la diferencia del funcionamiento de la contenerización vs. la virtualización.
En el caso de las VMs pueden apreciar, como explicaba antes, que tenemos el SO anfitrión, sobre este se monta la herramienta de virtualización y en esta otra es ejecutada una instancia de un SO huésped.
A diferencia de Docker, esta herramienta se ejecuta sobre el SO anfitrión y Docker se encarga del manejo de los contenedores para que usen el kernel y los recursos necesarios del OS anfitrión y su hardware.
Esta fue una pequeñísima introducción a todo este fascinante mundo, espero que les haya gustado, gracias por su tiempo; cualquier sugerencia es bienvenida.