Tengo unos pantalones, ja ja (I – O de como arrancar con Docker)

Vergüenza. Que la vergüenza caiga sobre tí por hacer un chiste tan malo. ¿Y sabes por qué soy tan soberbio? Porque yo he dicho la misma idiotez múltiples veces.

Vamos a ver, que la cosa ésta de los contenedores (sí, contenedores), da mucho miedito y en realidad el asunto tiene la complejidad de un botijo (que se usa fácil pero tiene mucha tecnología en su interior, no te creas).

Vamos primero con un disclaimer. Estoy lejísimos de ser un experto en el tema. Sé usarlos, hacer alguna cosita con ellos y poco más. Si quieres formarte de verdad en contenedores hay recursos incontables y gratuitos en Internet. Pero en éste blog vamos a por los conceptos básicos porque confío en que si te interesa, te buscarás tus cosas por la red y tal.

Al principio, todo ésto era campo. Y hardware.

Si retrocedemos en el tiempo y probablemente en el espacio muchos años atrás, los despliegues en servidores tenían mogollón de encanto. Digamos, por decir algo, que tú querías montarte unas bases de datos, digamos dos, un servidor de correo, un servidor web y un sistema de almacenamiento de ficheros compartido.

No vamos a entrar en detalle, pero lo primero que te venía a la cabeza era cuántas máquinas necesito para que no me quiten el sueño por las noches. Porque puedes meterlo todo en una sóla máquina y currártelo para que todo se comunique adecuadamente sin que se pegue de bofetones una cosa con la otra, pero es que ésto introduce un montón de problemas. Entre otros muchísimos más allá de cómo conviven unas cosas con otras, como perdieras la máquina ahí va todo en el mismo paquete (cosa que no vamos a solucionar en nuestra aproximación a los contenedores en éste blog, ésto es un capítulo bastante más avanzado). Pero a lo que voy, sistemas operativos, compatibilidad… un dolor de cabeza estupendérrimo.

Y llegaron las máquinas virtuales

Y vieron los sysadmin que aquello era bueno. En un mismo cacharro, en un servidor, en un hierro, podías tener un Linux, o diez Linux, un Windows o seis Windows y cada uno con sus cosas instaladas dentro. Claramente hemos mejorado. Las cosas se dan menos de bofetones, podemos ser más quirúrgicos a la hora de decidir dónde instalamos qué, solventamos razonablemente el tema de depender del mismo sistema operativo para todo… la cosa está bastante bien.

Ahora bien, yendo a la custión más fundamental (de otras muchísimas), échale una pensada. Joder, ¿Instalar un sistema operativo entero para una triste base de datos no te parece una solución un poco bestia? Porque lo es, la verdad

Los contenedores, ése mundo

Bueno, pues hete aquí que aparece el concepto de contenedor hace ya bastantes años. ¿Qué es un contenedor? Pues Javier Garzas lo explica magníficamente en su blog Por favor, ve a leerlo allí, el texto que hay a continuación no es ni de lejos una explicación razonable, más bien algo de andar por casa.

Pero pensemos que un contenedor es una caja. Una caja de software. Docker es una empresa que proporciona el entorno adecuado para hacer cajas de software. Hay otros entornos, Podman, LXC, Amazon tiene su propio cacharro (claro)… bueno, que hay un montón, nosotros en éste vloj nos vamos a quedar con Docker por cuestiones que no vienen al caso pero que igual vemos más adelante.

El asunto. Una caja. Una caja de software. Yo instalo Docker y lo que instalo es el entorno para poder usar cajas de software. Y en ése entorno puedo meter una caja, dos, diez, cien… para lo que dé mi máquina. Ésa caja trae lo mínimo necesario e imprescindible para que un trozo de código funcione. Así, si por ejemplo, necesito una base de datos, en lugar de instalar un sistema operativo entero y en ése sistema operativo la base de datos, lo que hago es instalar mi entorno para usar cajas (contenedores) y empiezo a meter ahí lo que yo quiera. Una caja puede tener una base de datos, otra un servidor web, otra un blog (como éste), otra una instancia de Mastodon, otra un sistema de navegador de ficheros y lo mejor de todo, entre ellas no se dan de bofetones. Comparado con cualquier otro sistema, son ligeras, pequeñas, rápidas y entre ellas, ni siquiera se ven (salvo que yo se lo diga).

Si eres un desarrollador, todo ésto ya lo sabes, pero si lo que quieres es auto-alojarte tres o cuatro cositas, todo ésto quiere decir que puedes ir a Internet, coger una caja que ya haya hecho alguien y meterla en tu habitación de guardar cajas (Docker). Así de fácil es todo ésto.

Es decir.

Si quiero desplegar en mi servidor una base de datos y un programa para emitir música en streaming, me bajo la caja de las bases de datos y la caja del servidor de música, las arranco y a funcionar.

Ahora bien. Éstas cajas, por diversos motivos (portabilidad, ligereza) tienen una particularidad que al principio te va a parecer la mierda pero luego te darás cuenta que es maravillosa.

Si paras la caja, si la borras, todo lo que contiene desaparece.

Si levanto mi servidor de música y echo dentro mis discos y mañana se me ocurre borrar la caja… también borro los discos.

Tengo que decirle a la caja qué cosas quiero que se escriban en el disco duro y que lea ésos ficheros de ahí, porque si no llevo el tema crudo.

Echa la introducción al sistema de contenedores, voy a asumir que ya tienes un server. Que te has hecho con una máquina en un proveedor de cloud (tú sabrás), que te has montado un server con tus discos o que te has hecho con una Raspberry Pi (o similar… mejor similar, de hecho) y tiene un disco duro conectado (muy recomendable, no imprescindible). Si tienes una Raspberry Pi, te has montado un Linux en ella salvo que hayas hecho cosas muy raras y usas un procesador ARM (no es importante, pero las cosas que funcionan con ARM no funcionan en máquinas tradicionales). Si estás usando una Raspberry no te hace falta el entorno gráfico para nada, te va a consumir recursos y no lo vamos a usar. Si te has montado tu propio server, asumo que has instalado Linux. Si no lo has hecho para de leer.

Vuelve al servidor.

Instala Linux.

Seguimos.

¿Por qué éste proselitismo pingüinudo? Pues por cosas de uno, pero aparte de mi opinión personal es que el ecosistema de contenedores que hay en Linux, como en muchas otras cosas, no tiene color comparado con el de cualquier otro sistema operativo.

En el siguiente paso, vamos a por nuestro primer contenedor… un servidor de música en streaming. Va a estar muy bien.

Nos vamos a divertir ya por fin.

Ya veréis cómo mola.