Docker como ambiente de desarrollo

Docker tiene muchos usos, aquí muestro uno práctico en el que debía modificar, compilar y probar un bot escrito en Golang en Windows, pero pensado para ejecutarse en Linux.

En estos días implementamos en ambiente de producción funciones serverless usando OpenFaaS. Usamos el mecanismo de monitoreo recomendado con Prometheus+Grafana que, dicho de paso, funciona perfectamente.

Configuramos las alertas, por email era lo único disponible con nuestra infraestructura, pero nadie está mirando su bandeja de entrada a cada rato, por lo que funciona pero no es efectivo.

Entonces me encontré con prometheus_bot, un bot para enrutar notificaciones de Prometheus a Telegram. Interesante, pero eso implica que la gente encargada del monitoreo se meta con nuestro Prometheus, lo que no estaba previsto y tampoco nos gustaba.

Se me ocurrió que podría adaptar al bot para que funcione con alertas de Grafana. Pequeño detalle es que está escrito en Golang, y yo apenas experimenté "hola mundo!" y 2+2 = ? en ese lenguaje.
Como al final eso iba a correr en un Docker, me pregunté "para qué instalar todo el entorno de desarrollo en mi Windows?", por lo que de inmediato:

> cd f:/workspace/go 
> git clone https://github.com/inCaller/prometheus_bot.git grafana_bot
> docker run -it --rm -v f:\workspace\go\grafana_bot:/grafana_bot --env http_proxy=http://mi_proxy:3128/ --env https_proxy=http://mi_proxy:3128/ --name development golang:alpine sh

En unos segundos ya tenía el ambiente de desarrollo disponible. Las directivas --env http_proxy=... y --env https_proxy=... son porque donde necesité esto estoy detrás de un proxy corporativo. Me pareció un ejemplo interesante que debía conservar en este artículo.

Uso Atom desde Windows para modificar el código, directamente desde f:\workspace\go\grafana_bot.

Las compilaciones las realizo desde la imágen development que había creado antes, pero para ejecutar el bot uso otra, la que sería la imágen final.

Compilación en la imágen development

# una sola vez necesitamos instalar las dependencias
$ apk --no-cache add make git nano curl && \
  cd grafana_bot && \
  go get -d -v

# para crear el ejecutable, cada vez
$ make clean && make

Correr el ejecutable

# creamos el contenedor
> docker run -it --rm -v f:\workspace\go\grafana_bot:/app -p 9087:9087 --env http_proxy=http://mi_proxy:3128/ --env https_proxy=http://mi_proxy:3128/ --name grafana_bot alpine sh

# instalamos la única dependencia necesaria para ejecutar
$ apk add --no-cache ca-certificates

$ cd grafana_bot
$ ./grafana_bot -t my_template.tmpl

Debo aclarar que Grafana ya tiene como canal de alerta a Telegram, pero por cuestiones del proxy que ya mencioné no puedo acceder directamente a Internet desde ahí, además, "para que hacerlo facil si dificil también se puede?".

El código fuente del bot modificado, además de intrucciones para cada paso incluyendo crear el bot en Telegram y la configuración en Grafana pueden encontrarlos aquí

Docker como ambiente de desarrollo
Share this