Ejecutando Python en un contenedor Docker

En muchas ocasiones queremos que nuestras aplicaciones en Python estén dentro de un contenedor Docker para que sea más sencillo su despliegue.

Partamos de la base que tenemos un programa en Python muy sencillo, donde solo tenemos la dependencia de algunos módulos, no tenemos necesidad de utilizar una base de datos y solo requerimos de un archivo jpg (descarguen el archivo en la carpeta del proyecto); el cual utilizaremos como input de nuestro programa.

El programa que utilizaremos de ejemplo sera el siguiente:

Requiere de los modulos de Pillow, termcolor y colorama para trabajar; para poder utilizarlos dentro de Docker, crearemos un archivo llamado requirements.txt en la misma carpeta del programa, con el listado de modulos requeridos.

Luego debemos crear en la misma carpeta un archivo llamado dockerfile:

Una vez que tengamos todo; debemos construir el contenedor, ejecutando desde la terminal:

docker image build --tag testpy .

Esto demora unos instantes, debe descargar la imagen de docker con Python, luego copia los archivos de Python y descarga los módulos indicados en el archivo requierements.txt

Cuando termina, podemos validar que se construyo la imagen, ejecutando en la consola:

docker image ls

Obtendremos una vista como la siguiente:

Por ultimo, ejecutamos nuestro contenedor que tiene nuestro programa en Python, de la siguiente manera:

docker run --rm testpy

Instalar Mosquitto fácil y rápido

La parte de rápido depende mucho de la conexión de internet de cada uno para poder descargar los archivos, habiendo hecho esta salvedad.

Nos encontramos que para la mayoría de los proyectos IoT en los que trabajamos necesitamos tener disponible un servidor broker para poder enviar mensajes con el dispositivo que estamos armando; en muchas ocasiones con un broker publico de internet solucionamos el problema, pero otras veces necesitamos tener algo local (a raíz que nuestra conectividad no es estable o simplemente no disponemos de acceso a internet donde vamos a instalar el dispositivo).

Mosquitto es uno de los brokers mas utilizado por ser opensource y ser mantenido por la fundación Apache, para instalarlo es entornos linux es sencillo simplemente lo hacemos por medio del gestor de paquetes.

Pero la realidad es que en la mayoría de los laboratorios en escuelas o universidades las pcs tiene Windows; e instalar el servicio del broker resulta un poco engorroso, particularmente si no se va a usar de manera dedicada y no queremos el servicio corriendo.

La forma mas sencilla de instalarlo es utilizando el esquema de contenedores de Docker, tres sencillos pasos:

  1. Será necesario instalar primero Docker en nuestra pc, la instalación es sencilla simplemente damos continuar y al finalizar nos pedirá reiniciar el sistema.
  2. Luego que tengamos Docker corriendo en el sistema (en la traybar veremos el icono de la ballena) ejecutamos desde la consola:
docker pull eclipse-mosquitto

Para que descargue el contenedor de mosquitto en nuestra pc.

3. Creamos una instancia del contenedor, especificando el puerto sobre el que va a trabajar, utilizaremos los puertos 9001 y 1883 que son estándar para este servicio:

docker run -p 1883:1883 -p 9001:9001 eclipse-mosquitto

Esto crea un contenedor que sirve para entornos de prueba y laboratorio, no se guarda las configuraciones, ni tienen ningún mecanismo de seguridad.

Pero la puesta en marcha es rápida y sin complicaciones; luego de que se haya descargado la primera vez el contenedor las siguientes ejecuciones son aun mas ágiles.