Vous connaissez ce moment où vous tapez docker-compose up -d --build pour la énième fois de la journée, et que vos doigts commencent à développer une haine viscérale pour votre clavier ? Bienvenue dans le club. Heureusement, il existe une solution élégante, minimaliste et surtout drastiquement moins chiante : le Makefile. Non, ce n’est pas un retour en 1977, c’est juste une façon de remplacer vos commandes Docker à rallonge par des petits mots-clés aussi simples que make up ou make build. Et si vous pensez que c’est de la triche, c’est que vous n’avez pas encore compris que le développement, c’est avant tout une question de paresse intelligente.
Pourquoi un Makefile ? Parce que votre mémoire n’est pas un disque dur
Docker et Docker Compose, c’est génial. Vraiment. Mais avouons-le : personne n’a envie de se souvenir de la différence entre docker-compose up -d et docker-compose up --build, surtout à 3h du matin après trois cafés et une réunion qui n’en finissait pas. Un Makefile, c’est comme un pense-bête, mais en mieux : au lieu de noter vos commandes sur un Post-it qui finira collé à votre écran (ou pire, perdu), vous les centralisez dans un fichier à la racine de votre projet. Et hop, plus qu’à taper make up pour lancer vos conteneurs, make down pour les arrêter, ou make logs pour voir ce qui cloche (parce que bien sûr, quelque chose cloche toujours).
Le vrai bonus ? Vous pouvez partager ce Makefile avec votre équipe, et soudain, tout le monde parle la même langue. Plus de "Attends, c’est quoi la commande pour rebuild le front ?" ou de "Pourquoi mon conteneur ne se lance pas ? Ah, j’avais oublié le --build.". Tout le monde utilise les mêmes raccourcis, et tout le monde gagne du temps. Enfin, sauf les puristes du terminal qui préfèrent taper 80 caractères plutôt que 8. Ceux-là, on les laisse à leur souffrance.
Un Makefile, c’est simple comme bonjour (enfin, presque)
Si vous n’avez jamais utilisé de Makefile, rassurez-vous : c’est moins compliqué que de configurer un reverse proxy avec Nginx. Un Makefile, c’est juste un fichier texte avec des règles qui ressemblent à ça :
up: docker-compose up -d build: docker-compose up -d --build down: docker-compose down logs: docker-compose logs -f migrate: docker-compose exec app python manage.py migrate test: docker-compose exec app pytest
Chaque règle commence par un nom (par exemple, up), suivi de deux-points, puis de la commande à exécuter. Les commandes doivent être indentées avec une tabulation (oui, une tabulation, pas des espaces, sinon ça ne marche pas, et c’est là que les choses deviennent légèrement frustrantes). Une fois ce fichier enregistré à la racine de votre projet sous le nom Makefile (sans extension, c’est important), vous n’avez plus qu’à lancer make up dans votre terminal, et magie : Docker fait son travail sans que vous ayez à vous souvenir de tous les drapeaux.
Et si vous voulez aller plus loin, vous pouvez même ajouter des règles avec des arguments. Par exemple, pour lancer un shell dans un conteneur spécifique :
shell: docker-compose exec app sh
Ou pour nettoyer tous les conteneurs et volumes inutiles (parce que oui, Docker a tendance à laisser traîner des trucs) :
clean: docker system prune -a --volumes
Les limites : quand le Makefile devient un couteau suisse (trop) émoussé
Bien sûr, tout n’est pas rose dans le monde des Makefile. D’abord, il faut accepter que ce ne soit pas une solution universelle. Si votre projet est complexe, avec des dizaines de services et des dépendances tordues, un Makefile peut vite devenir illisible. Dans ce cas, peut-être qu’un script Bash ou Python serait plus adapté. Mais pour la plupart des projets, surtout ceux qui tournent autour de Docker Compose, un Makefile reste une solution simple et efficace.
Autre point noir : les erreurs de syntaxe. Oubliez une tabulation, ou utilisez des espaces à la place, et make vous enverra paître avec un message d’erreur aussi clair qu’un manuel d’assemblage IKEA. Et si vous travaillez sur Windows, préparez-vous à quelques galères supplémentaires, car make n’est pas natif sur cette plateforme. Mais bon, si vous utilisez Docker sur Windows, vous êtes déjà habitué à souffrir un peu, non ?
Enfin, il y a les puristes. Ceux qui vous diront que make est un outil de build, pas un gestionnaire de commandes, et que vous devriez utiliser des scripts ou des outils comme just ou task. À ceux-là, je réponds : "Oui, et ?". Si make fait le job sans ajouter de dépendances inutiles, pourquoi s’en priver ? La tech, c’est aussi une question de pragmatisme, pas de dogme.
Conclusion : adoptez le Makefile, mais sans en faire une religion
Un Makefile avec Docker et Docker Compose, c’est un peu comme un bon café le matin : ça ne révolutionne pas votre vie, mais ça la rend drastiquement plus agréable. Vous gagnez du temps, vous réduisez les erreurs, et vous évitez de maudire votre clavier à chaque fois que vous devez relancer vos conteneurs. Alors oui, ce n’est pas parfait, et oui, il y a des alternatives. Mais pour la plupart des projets, c’est une solution simple, efficace, et surtout suffisamment bonne.
Alors, à vos éditeurs de texte : créez ce Makefile, et dites adieu aux commandes Docker à rallonge. Et si quelqu’un vous dit que c’est de la triche, répondez-lui que la vraie triche, c’est de perdre du temps à taper des commandes inutiles au lieu de coder. Ou de boire un café. Ou les deux.