Comment exécuter un script Python avec Docker

Exécuter un script Python Docker

Exécuter des scripts Python est l’une des tâches les plus courantes en automatisation. Cependant, gérer les dépendances sur différents systèmes peut être un défi. C’est là que Docker entre en jeu. Docker vous permet de regrouper votre script Python avec toutes ses dépendances requises dans un conteneur, garantissant qu’il s’exécute de la même manière sur n’importe quelle machine. Dans ce guide étape par étape, nous allons passer en revue le processus de création d’un script Python réel et de son exécution à l’intérieur d’un conteneur Docker.

Pourquoi utiliser Docker pour les scripts Python

Lorsque vous travaillez avec des scripts Python, les choses peuvent rapidement devenir désordonnées/complexes. Différents projets nécessitent différentes bibliothèques, et ce qui fonctionne sur votre machine peut ne pas fonctionner sur celle de quelqu’un d’autre. Docker résout ce problème en regroupant votre script et son environnement ensemble. Ainsi, au lieu de dire “Ça fonctionne sur ma machine”, vous pouvez être sûr que cela fonctionne de la même manière partout.

Cela garde également votre système propre. Vous n’avez pas à installer chaque package Python globalement ou à vous soucier des conflits de version. Tout reste à l’intérieur du conteneur.

Si vous déployez ou transmettez votre script à quelqu’un d’autre, Docker facilite également cela. Pas d’instructions d’installation, pas de “installez ceci et cela”. Juste une commande, et ça fonctionne.

Écrire le script Python

Créons un répertoire de projet pour garder votre script Python et le Dockerfile. Une fois créé, naviguez dans ce répertoire en utilisant la commande cd :

mkdir docker_file_organizer  
cd docker_file_organizer

Créez un script nommé “organize_files.py” pour scanner un répertoire et regrouper les fichiers dans des dossiers en fonction de leurs extensions :

nano organize_files.py

Collez le code suivant dans le fichier “organize_file.py”. Ici, nous utilisons deux modules Python préconstruits, nommés os et shutil, pour gérer les fichiers et créer des répertoires dynamiquement :

import os  
import shutil  
  
SOURCE_DIR = "/files"  
  
def organize_by_extension(directory):  
    try:  
        for fname in os.listdir(directory):  
            path = os.path.join(directory, fname)  
            if os.path.isfile(path):  
                ext = fname.split('.')[-1].lower() if '.' in fname else 'no_extension'  
                dest_dir = os.path.join(directory, ext)  
                os.makedirs(dest_dir, exist_ok=True)  
                shutil.move(path, os.path.join(dest_dir, fname))  
                print(f"Déplacé : {fname} → {ext}/")  
    except Exception as e:  
        print(f"Erreur lors de l'organisation des fichiers : {e}")  
  
if __name__ == "__main__":  
    organize_by_extension(SOURCE_DIR)

Dans ce script, nous organisons les fichiers dans un répertoire donné en fonction de leurs extensions. Nous utilisons le module os pour lister les fichiers, vérifier si chaque élément est un fichier, extraire son extension et créer des dossiers nommés d’après ces extensions (s’ils n’existent pas déjà). Ensuite, nous utilisons le module shutil pour déplacer chaque fichier dans son dossier correspondant. Pour chaque déplacement, nous imprimons un message indiquant le nouvel emplacement du fichier.

Créer le Dockerfile

Maintenant, créez un Dockerfile pour définir l’environnement dans lequel votre script s’exécutera :

FROM python:latest  
LABEL maintainer="[email protected]"  
WORKDIR /usr/src/app  
COPY organize_files.py .  
CMD ["python", "./organize_files.py"]

Nous utilisons ce Dockerfile pour créer un conteneur avec Python, ajouter notre script à celui-ci et nous assurer que le script s’exécute automatiquement lorsque le conteneur démarre :

Créer un fichier Docker

Construire l’image Docker

Avant de pouvoir construire l’image Docker, vous devez d’abord installer Docker. Après cela, exécutez la commande suivante pour regrouper le tout dans une image Docker :

sudo docker build -t file-organizer .

Cela lit notre Dockerfile et assemble la configuration Python et notre script afin qu’ils soient prêts à s’exécuter dans une seule image de conteneur :

Construire l'image Docker

Créer un dossier d’exemple avec des fichiers

Pour voir notre script en action, nous créons un dossier de test nommé “sample_files” avec quelques fichiers de différents types. Nous avons créé ces fichiers juste pour rendre le dossier un peu désordonné et voir comment notre script Python le gère :

mkdir ~/sample_files  
touch ~/sample_files/test.txt  
touch ~/sample_files/image.jpg  
touch ~/sample_files/data.csv

Exécuter le script à l’intérieur de Docker

Enfin, nous exécutons notre conteneur Docker et montons le dossier d’exemple à l’intérieur. Le drapeau -v monte votre répertoire local “~/sample_files” dans le répertoire “/files” dans le conteneur, ce qui permet au script Python de lire et d’organiser les fichiers sur votre machine hôte :

docker run --rm -v ~/sample_files:/files file-organizer

Ici, nous utilisons l’option --rm pour supprimer automatiquement le conteneur après son exécution, ce qui permet d’économiser de l’espace disque :

À la fin, nous utilisons la commande tree pour vérifier si les fichiers ont été triés dans des dossiers en fonction de leurs extensions :

tree sample_files

Vérifier le résultat avec la commande Tree

Remarque : La commande tree n’est pas préinstallée sur la plupart des systèmes. Vous pouvez facilement l’installer en utilisant un gestionnaire de paquets comme apt sur Ubuntu, brew sur macOS, etc.

Dernières réflexions

Avec votre script Python s’exécutant à l’intérieur de Docker, vous êtes prêt à tirer pleinement parti d’un environnement de développement propre, portable et cohérent. Vous pouvez facilement réutiliser ce flux de travail conteneurisé pour d’autres tâches d’automatisation, partager votre script sans vous soucier des dépendances et garder votre système sans encombrement. Comme prochaine étape, envisagez d’explorer comment construire des images Docker multi-scripts, planifier des conteneurs avec des tâches cron, ou intégrer vos scripts avec d’autres outils comme Git, Jenkins, ou même des plateformes cloud pour rationaliser votre processus d’automatisation et de déploiement.