324 - Dockerizar la Raspberry
Si quieres tener servicios de fotografía, documentación, vídeo, domótica en tu Raspberry, lo mejor es Dockerizar la Rasbperry
En el episodio 322 te hablé sobre las opciones ocultas de la Raspberry Pi. En el te comenté que para mi, la Raspberry había representado un cambio importante, en todos los aspectos de mi vida. Pero no es el único ni mucho menos. Otra tecnología, que revolucionó sustancialmente mi forma de entender la informática, y la forma de relacionarme con ella, fueron sin duda los contenedores, y en concreto Docker. Por esta razón, en este episodio aúno ambas cuestiones, Raspberry y Docker, es decir Dockerizar la Raspberry.
El objetivo de este podcast, no solo es el de explicarte como instalar Docker en tu Raspberry, es decir, como Dockerizar la Raspberry, sino que también te quiero contar mis razones para hacerlo.
Dockerizar la Raspberry
No quiero ocultarte nada, y esto te lo digo, porque en su momento no terminaba de encontrar la razón de Dockerizar la Raspberry. Bueno, realmente, no encontraba la razón a Docker. Probablemente, ni entendía el concepto ni entendía las razones para hacerlo.
Esto de añadir una capa adicional para correr un software que podía correr directamente sobre la Raspberry, o en general sobre cualquier servidor, me parecía completamente innecesario, así como un derroche de recursos. Sin embargo, con el paso del tiempo, me he dado cuenta las ventajas que Dockerizar la Raspberry trae consigo. Y es sin lugar a dudas la primera de ellas la comodidad.
El primer paso es aprender
No creo que esto de Dockerizar la Raspberry haya sido una iluminación divina, ni mucho menos. Creo sinceramente que ha sido un camino. Un camino que he ido recorriendo poco a poco y de menos a mas.
El primer paso fue llegar al mundo Linux, descubrir todo lo que te ofrecen las decenas de entornos de escritorio que aquí tienes a tu entera disposición. Pero no solo son todos esos entornos de escritorio los que tienes, sino que además los puedes personalizar y adaptar a tus necesidades poco a poco.
Esto me llevó a profundizar en lo que había bajo el capó, tanto en el entorno de escritorio que vengo utilizando desde entonces, GNOME como en los diferentes lenguajes de programación que tenía al alcance de mis dedos. Lenguajes como Python, JavaScript, PHP, y recientemente Rust.
El siguiente paso fue descubrir la terminal, y entonces, un mundo entero de posibilidades se abrió ante mi… y lo digo literalmente.
A partir de aquí, se precipitó todo, servidores web, proxy inversos, bases de datos, gestores de colas… Había tantas cosas… Me sentía como un chiquillo en una tienda de juguetes… se me iban los ojos a todas partes.
Las versiones, las dependencias y la frustración
Pero no todo iban a ser alegrías, llegó el día en el que algo que había hecho anteriormente dejó de funcionar. Las malditas versiones y dependencias. Algo que hacía unos días había montado sin ningún tipo de problemas, ahora había dejado de funcionar, y esto era o porque la versión que estaba utilizando había cambiado o porque las dependencias necesarias no estaban y no se podían instalar o por cualquier otro tipo de razón similar. Esto me llevaba a una frustración sin límites, sobre todo si no era capaz de resolverlo.
Pero no solo esto, también estaba el otro problema. Imagina que visitas una fantástica web, donde te encuentras las instrucciones para poner en marcha un servicio web, donde tienes que levantar un servidor web, una base de datos e instalar algún lenguaje de programación. Realizas paso a paso cada una de las instrucciones que se indican, siguiendo escrupulosamente las instrucciones, y después de una hora de haber estado instalando cada una de las piezas, lo intentas levantar y te das cuenta de que no funciona. De nuevo la frustración.
Todo ello es debido a lo mismo, las versiones y las dependencias. En la guía que estabas siguiendo tenían una distribución diferente a la tuya, o simplemente, que cuando hizo la guía las versiones eran diferentes. Por supuesto que en su máquina el servicio funcionaba pero en la tuya no hay manera.
La solución
Cierto es que puedes invertir tu tiempo en averiguar porque no te funciona, e incluso, puedes llegar a resolverlo. Sin embargo, tu lo que querías montar era tu propia nube personal y te encuentras investigando algo que a lo mejor, ni siquiera tiene solución.
¿Y si pudieras pasar de las versiones?¿Y si pudieras pasar de las dependencias?¿Y si te digo que si que es posible?
La solución viene de la mano de Docker. Utilizando Docker te evitarás tener que lidiar tanto con versiones como con dependencias. O casi, porque si que dependerás de la versión de Docker, y en su caso de docker-compose
, que estés ejecutando. Pero, esto es un mal menor, te lo aseguro. Y en mi caso, en el tiempo que llevo trabajando con esto, hasta el momento nunca me ha ocurrido.
La dockerización
Para Dockerizar tu Raspberry y comenzar a instalar servicios como si no hubiera un mañana tan solo tienes que instalar Docker, y esto lo puedes hacer de forma sencilla, siguiendo las intrucciones del artículo Docker y Raspberry. Instalar Docker y docker-compose.
Una vez realizados los pasos, ejecuta,
docker -v
para ver la versión que tienes instalada, y por supuesto un hola mundo, para ver que está funcionando todo de forma correcta,
docker run hello-world
Como trabajar con Docker en tu Raspberry
Es muy goloso instalar Portainer para gestionar tus contenedores. Portainer es un contenedor que te permite gestionar contenedores desde una página web, con lo que te simplifica mucho el trabajo, o eso parece.
Sin embargo, si hasta el momento no has trabajado con contenedores, si hasta el momento no has trabajado con Docker, mi recomendación es que empieces con la terminal. Utilizando o gestionando tus contenedores desde la línea de comandos de va a dar una mejor visión, más cercana y práctica. Creo que es la mejor forma de comprender los conceptos que se encuentran tras Docker.
Una vez hayas dominado o simplemente comprendido esos conceptos, entonces, si quieres puedes lanzarte al uso de Portainer. Pero, sinceramente, creo que ese el orden correcto.
En este sentido, y de la misma forma, te recomiendo que utilices docker-compose
para gestionar tus servicios. Se trata de una forma muy cómoda de escribirte unas recetas para conseguir que tus servicios funcionen perfectamente.
Un proxy inverso
Por último, te recomiendo que te montes un proxy inverso. Si, en contenedor, por supuesto. Pero creo que es muy interesante que tengas un proxy inverso funcionando en tu Raspberry, porque te va permitir levantar todos los servicios que quieras saliendo por el puerto 443.
Piensa que por muchos servicios que tengas instalados en tu Raspberry, esta no va a sufrir gran cosa, sino tienes una gran cantidad de usuarios trabajando con ella. Al final, me di cuenta, que somos muy poquitos, de 1 a 3 personas, los que puntualmente podemos estar utilizando alguno de los servicios que hemos instalado en la Rasbperry de forma simultánea. Así que, en condiciones normales, va ir muy sobrada.
El siguiente paso
El siguiente paso, una vez llegado a este punto, y esto es totalmente opcional, es que hagas tus propias imágenes. Primero de algún servicio. Pero es cuando te creas tu primera imagen de una aplicación tuya es cuando de verdad entiendes lo fantástico que es Dockerizar la Raspberry, porque esta imagen, la puedes llevar a cualquier sitio, en tan solo dos o tres líneas de terminal.
Espero que te haya gustado este nuevo episodio del podcast. Si puedes, te agradecería una valoración en iVoox y/o en Apple Podcast.
Imagen de portada de Cameron Venti en Unsplash