Docker cron

docker cron
python docker
dockerfile
docker crontab

Voici comment créer une cron dans un conteneur docker, pour l’exemple j’ai utilisé un de mes dockerfiles ubuntu.

La docker crontab

Voici le fichier cron-drops que l’on va utilise dans notre conteneur :

* 21 * * * python3 /code/drops.py >> /var/log/drops.log

# An empty line is required at the end of this file for a valid cron file.

Le fichier doit être dans le même dossier que le dockerfile.

Une cron rudimentaire : Tous les jours à 21h elle exécute le script python drops.py et envoi l’output dans un fichier de log à l’intérieur de notre conteneur docker.

Le Dockerfile ubuntu

FROM ubuntu:latest

#Permet à Python d'afficher tout ce qui est imprimé dans l'application plutôt que de le mettre en mémoire tampon.
ENV PYTHONUNBUFFERED 1 
#ENV
ENV TZ=Europe/Paris
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y tzdata
#ENV LANG C.UTF-8
#ENV LC_ALL C.UTF-8
# Création of the workdir 
RUN mkdir /code 
WORKDIR /code 
# Add the current directory(the web folder) to Docker container 
COPY . /code/
# Install requirements 
RUN apt update
RUN apt install locales-all python3 python3-pip -y
RUN pip3 install --upgrade pip 
RUN pip3 install -r requirements.txt

# ADD the crontab
RUN apt install cron -y
COPY cron-drops /etc/cron.d/cron-drops
RUN chmod 0644 /etc/cron.d/cron-drops
RUN crontab /etc/cron.d/cron-drops
RUN touch /var/log/drops.log

CMD /usr/sbin/cron start && tail -f /var/log/drops.log

Ce qu’il faut retenir de ce dockerfile :

#ENV
ENV TZ=Europe/Paris
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y tzdata

Ces lignes permettent à la machine de s’initialiser sur l’heure de Paris (pour la cron)

# ADD the crontab
RUN apt install cron -y
COPY cron-drops /etc/cron.d/cron-drops
RUN chmod 0644 /etc/cron.d/cron-drops
RUN crontab /etc/cron.d/cron-drops
RUN touch /var/log/drops.log

Cette partie permet :

  • l’installaton de cron
  • la copie de notre fichier cron-drops
  • ajouter les droits 644 sur la cron
  • ajouter cette cron comme crontab
  • la création du fichier de log (vers lequel on renvoi l’output de notre script python)

Et enfin :

CMD /usr/sbin/cron start && tail -f /var/log/drops.log

La dernière ligne du Dockerfile permet l’exécution du service Cron et de rediriger les logs de notre scripts au premier plan.

Une fois le conteneur lancé, si on tape la commande docker logs nom_du_conteneur on affichera alors les logs du script python exécuté par la Crontab de notre conteneur docker.

D’autres articles docker : ICI.

La man page de crontab : ICI

Laisser un commentaire