Ejecución Automática de Scripts en Python con Docker: Paso a Paso
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.

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