Una carta de amor a Docker
Un viaje desde la incertidumbre hasta la pasión.
A veces en la vida tomamos decisiones sin saber muy bien por qué. No es que hubiese un motivo ni alguien en mi entorno que me empujase a ello, pero, por alguna razón, a principios de este año me propuse aprender Docker. Y, sin saberlo, estaba a punto de conocer un mundo inmenso lleno de posibilidades. Esa decisión no solo cambió la manera en que despliego aplicaciones, sino que redefinió mi forma de pensar sobre el desarrollo de software.
Sin saberlo, estaba a punto de enamorarme.
Las apariencias engañan
Probablemente la mayoría de los que estéis leyendo esta publicación habréis oído en mayor o menor medida hablar de Docker. Cuando uno comienza a adentrarse en el desarrollo de software es fácil que se tope con conceptos como "imágenes" o "contenedores" y, tal vez en un acto de supervivencia, el cerebro rápidamente les asigna las categorías de confuso, difícil y demasiado abstracto para mí.
Al menos eso es lo que me ocurrió cuando oí hablar de Docker por primera vez en las asignaturas de Sistemas Operativos de tercero de carrera. Y claro, cuando oyes hablar de una tecnología rara en una de las asignaturas más difíciles de la carrera, los prejuicios comienzan a hacer girar los engranajes del rechazo y la negación. Especialmente cuando escuchas a tu profesor de S.O. comentar alegremente con el profesor de Redes lo mucho que la utilizan en el día a día. Seguro que es complicadísimo, pensé. Estos profesores están demasiado locos. Después de explicarnos el concepto de contenedores y no haber entendido absolutamente nada, pasé un año sin escuchar nuevamente sobre ellos.
A principios de 2023, en la asignatura Arquitectura del Software de cuarto, nuestro profesor Marcos nos introducía nuevamente Docker, y esta vez la cosa iba en serio porque tendríamos que usarlo como parte final del proyecto de la asignatura. Supongo que podréis entender mi agobio cuando vas con el prejuicio de la asignatura difícil de tercero y te sueltan una clase magistral de dos horas explicándote qué es Docker y cómo utilizarlo. Evidentemente no me enteré de nada.
Y ahí estábamos mi compañero de prácticas y yo intentando hacer correr un stack de Docker formado por 4 contenedores (dos aplicaciones en Java, una aplicación en .Net y una instancia de MongoDB) un par de semanas antes de entregar el trabajo final. Todo esto, por supuesto, sin tener ni idea de lo que estábamos haciendo. Al final lo conseguimos, no sin antes bombardear a preguntas al profesor como nunca antes había hecho. Por cierto, también fue mi primera vez con .Net. Una gran asignatura, pero muy mala para el corazón 🙃.
Amor a tercera vista
Terminé la carrera y comencé a trabajar en Upango como programador de .Net. Mis primeros meses fueron evidentemente muy estresantes: mi primera experiencia laboral y un entorno de programación aún desconocido. Llegaba a casa y ni siquiera mi pasión por los videojuegos podía evitar que cayese rendido a la cama.
Conforme pasaban los meses me fui familiarizando con la metodología de trabajo y empecé a hacer mis primeras subidas a producción. El procedimiento es bastante sencillo: publicar la aplicación .Net en Visual Studio, hacer una copia de seguridad de las dll
que componen la aplicación y de la base de datos (si es necesario) que hay en producción, subir las nuevas dll
y reiniciar la aplicación. Evidentemente la lie. Tampoco fue nada grave, pero recuerdo romper alguna página por no subir la dll
que tocaba y en una ocasión dejar a un cliente un par de horas con la aplicación caída. Gajes de los juniors...
En cualquier caso, después de haber hecho decenas de subidas, un pensamiento empezaba a resonar en mi cabeza: Amazon, Google, Meta... ¿De verdad esta era la mejor forma de actualizar las aplicaciones en producción en el año 2024? Y entonces comencé a recordar cómo mi profesor de Redes entraba por la parte de atrás de la clase gritando entre risas al profesor de S.O. lo mucho que usaba diariamente Docker y la gran tecnología que era. Y ese recuerdo luego se fusionaba con vestigios aislados del trabajo de Arquitectura del Software que orbitaban mi mente. Y para cuando me había dado cuenta ya era demasiado tarde, Docker se había metido de lleno en mi cabeza. Necesitaba saber lo que era y estaba obligado a descubrirlo.
Un buen profesor puede cambiarlo todo
Un nombre: Fernando Herrera. Lo descubrí a través de un curso de Angular que estuve haciendo para la empresa y comencé a seguirle por recomendación de mi jefe de equipo, Mario. Al poco tiempo de estar con esta curiosidad insaciable buscando cursos de Docker di precisamente con el curso de Fernando de oferta por 9.99 €. Y ahí estaba yo el 31 de enero de 2024 a las 23:56 h tomando una de las mejores decisiones de mi vida, una inversión en conocimiento que me hace hasta sentir mal, porque decir que el curso es bueno es quedarse muy corto. Fernando dedica el tiempo necesario a explicar cada concepto, realiza numerosos ejercicios para afianzar conocimientos y destaca en todo momento la necesidad de comprender las bases en lugar de lanzarse a utilizar directamente herramientas como Docker Desktop que agilizan el proceso a costa de ofuscar lo que está ocurriendo por detrás. Gracias a Fernando comprendí los fundamentos de la virtualización, la gestión de redes entre contenedores y la creación de imágenes. Estoy realmente agradecido a Fernando por la claridad y el enfoque práctico que aportan una gran calidad a su formación, con él conseguí entender lo que durante dos años de carrera no había logrado comprender.
Pero es que no solo aprendí Docker, me obsesioné con Docker. Conforme pasaba el ecuador del curso ya no podía seguir resistiéndome. Necesitaba poner todo esto en práctica con aplicaciones reales. Así que comencé a adelantarme a las sesiones y a investigar por mi cuenta. Comencé a descubrir cientos de aplicaciones de código abierto con comunidades enormes. No puedo decir que se encendiese la chispa porque la casa ya estaba ardiendo por completo. Pero era un ardor de pura pasión.
Un presente hermoso, un futuro inspirador
Terminé el curso, compré un mini PC para usarlo como servidor y 10 meses más tarde me encuentro escribiendo una carta de amor con 39 contenedores funcionando concurrentemente al lado. En medio año había montado una intranet con mi propio servicio de DNS, un servicio de música, una alternativa a Google Photos, una web de gestión económica y un largo, larguísimo, etcétera. Además de crear mis propias imágenes, alquilar este dominio y exponer este sitio al mundo de forma segura. Todo gracias a Docker.
Porque lo potente de Docker es que pone las responsabilidades donde deben estar. Debe ser obligación del desarrollador garantizar un despliegue satisfactorio. Que falte una dll
, que haya una migración pendiente o que tengas que aprender a usar una tecnología solo para poder desplegar un servicio web no tiene sentido. Docker delega ese trabajo en la gente que verdaderamente sabe hacerlo: aquellos que han creado las aplicaciones, y libera al usuario de una pesada carga.
Y soy consciente de que aún me queda mucho por aprender y que esto solo es la punta del iceberg, pero es que es realmente precioso. Por el momento ya he logrado introducir la tecnología en el último desarrollo que hemos comenzado en Upango: una API Commerce compuesta por microservicios interconectados, además de haberla integrado por completo en mis proyectos personales (esperad noticias pronto al respecto 🙊).
Así que lo siento por mis compañeros de trabajo que tienen que aguantarme, pero voy a seguir vendiéndoles Docker como la divina tecnología que es. Porque el mejor momento para empezar a usarla fue ayer y el segundo mejor momento es hoy, da igual cuándo leas esto.
Si aún no has dado el paso, te animo a hacerlo. Docker ha transformado mi manera de trabajar y, quién sabe, quizá también cambie la tuya.
