Ejecución Automática de Scripts en Python con Docker: Paso a Paso

Ejecución Automática de Scripts en Python con Docker: Paso a Paso
Photo by Álvaro Bernal / Unsplash

Hace un par de semanas recibí la triste noticia de que https://deta.space/ iba a cerrar 😔. Estuve un par de días buscando algún servicio que me permitiera ejecutar periódicamente un script de python pero no encontré nada que me llamara la atención; debido a esto, terminé montando mi script en mi RPi5 😛. Por acá comparto como hacerlo.

Introducción

Comparto un par de cosas que me parece importante compartir a manera de contexto:

  • Mi script se ejecuta con python cli.py
  • El script no requiere de ninguna interacción con el usuario.
  • Tengo un archivo requirements.txt donde se encuentran las dependencias de mi proyecto.
  • Sólo necesito que se ejecute a una hora en específica cada día.

Agregando docker a mi proyecto python

Por alguna extraña razón, hice este mini proyecto y no le puse docker 😅. So... este es momento de hacerlo. Sólo es necesario crear dos archivos de texto.

services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - .:/app
    restart: unless-stopped
    environment:
      - ENV=production

docker-compose.yml

Siéntete libre de agregar más variables de entorno o cualquier otra configuración que necesite tu proyecto.

FROM python:3.9-alpine

RUN apk update && \
    apk add --no-cache python3 py3-pip curl

WORKDIR /app

COPY . /app

RUN pip install --no-cache-dir -r requirements.txt

# UTC Hour
RUN echo "30 23 * * * python /app/cli.py" > /etc/crontabs/root

CMD ["crond", "-f", "-l", "2"]

Dockerfile

Este archivo se ejecutará cuando suba el contenedor, en resumen hará lo siguiente:

  • Utilizar una versión compacta de python 3.9, alpine
  • Actualizar e instalar paquetes
  • Copiar el directorio al volumen docker
  • Descargar librerías de python basadas en el archivo requirements.txt
  • Agregar la ejecución periódica utilizando cron.

Si te gustaría conocer más sobre cron, te dejo dos links que te pueden ser de mucha utilidad.

cron - Wikipedia
Crontab.guru - The cron schedule expression generator
An easy to use editor for crontab schedules.

Ejecución

Y listo! para subir el contenedor solo es necesario ejecutar docker-compose up --build