DOCKER - 3 12 Exercice Tests dans conteneur

L'un des grands avantages de Docker est de fournir un environnement isolé et identique à chaque exécution. C'est idéal pour lancer des tests : la version du langage, des dépendances et de l'OS est figée dans l'image, ce qui évite le classique « ça marche sur ma machine ». Cet exercice consiste à exécuter une suite de tests à l'intérieur d'un conteneur.

Le principe

Deux approches sont possibles. La première consiste à démarrer un conteneur à partir d'une image contenant le runtime voulu, à monter le code source dedans, puis à lancer la commande de test. La seconde consiste à utiliser un conteneur déjà en cours d'exécution et à y exécuter les tests avec docker exec.

Pour lancer un test ponctuel dans un conteneur jetable, on combine docker run avec le montage du répertoire courant et la commande de test :

# Exemple avec un projet Node.js
docker run --rm -v ${PWD}:/app -w /app node:18 npm test

# Exemple avec un projet Python
docker run --rm -v ${PWD}:/app -w /app python:3.11 pytest

L'option --rm supprime automatiquement le conteneur à la fin, -v monte le code dans le conteneur et -w définit le répertoire de travail.

Tester dans un conteneur déjà actif

Si un conteneur tourne déjà (par exemple un serveur applicatif), on peut y exécuter les tests sans le redémarrer :

docker exec -it mon-conteneur npm test

Le code de sortie de la commande de test est propagé : si les tests échouent, la commande docker renvoie un code différent de zéro. C'est exactement ce comportement qui permet d'intégrer ces tests dans un pipeline d'intégration continue, où une étape échouée fait échouer tout le pipeline. À vous de mettre cet exercice en pratique avec votre propre projet avant de comparer avec la solution proposée dans la leçon suivante.