MQTT: Docker

1 minuto(s) de lectura

Docker

MQTT (Message Queue Telemetry Transport) es un protocolo diseñado por IBM destinado a mejorar la conectividad M2M (Machine to machine).

Los mensajes a enviar o a los que suscribirse se clasifican según su asunto (topic) gracias a un Broker (un servidor mqtt específico).

Los elementos que se conecten al servicio tienen la libertad de emitir mensajes con el topic en cuestión. El resto de terminales se pueden suscribir al topic para recibir los mensajes correspondientes.

Si quieres conocer en profundidad el protocolo, te invito a consultar esta entrada de un blog muy recomendado Luis Llamas: MQTT

En caso de seguir interesado, vamos a realizar unos pasos previos para preparar el entorno. En primer lugar creamos las carpetas donde alojar el proyecto:

mkdir -p $HOME/docker/mqtt/{config,data,log} && \
cd $HOME/docker/mqtt

A continuación creamos el fichero de configuración, en nuestro caso hemos optado a usarlo de forma libre en la red interna sin credenciales de usuario:

cat << EOF > $HOME/docker/mqtt/config/mosquitto.conf
allow_anonymous true
listener 1883
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
EOF

Configuradas las variables podemos crear el servicio lanzando el siguiente comando:

docker run -d \
--name=MQTT \
-v $HOME/docker/mqtt/config:/mosquitto/config \
-v $HOME/docker/mqtt/data:/mosquitto/data \
-v $HOME/docker/mqtt/log:/mosquitto/log \
-p 1883:1883 \
--restart=always \
eclipse-mosquitto

Vamos a repasar los principales parámetros que hemos lanzado:

Parámetro Función
-v $HOME/docker/mqtt/config:/mosquitto/config Ruta donde almacena la configuración
-v $HOME/docker/mqtt/data:/mosquitto/data Ruta donde almacena la base datos
-v $HOME/docker/mqtt/log:/mosquitto/log Ruta donde almacena las consultas
-p 1883:1883 Puerto de escucha broker :1883
restart=always Habilitamos que tras reiniciar la maquina anfitrion vuelva a cargar el servicio

Tras ello, ya tendremos nuestro servidor MQTT disponible, en mi caso la ruta 192.168.1.90:1883

Y listo!