"Ça marche sur ma machine"
C'est une phrase qu'on entend souvent comme excuse venant d'un développeur pour décliner toute responsabilité d'un problème qui vient d'arriver en production.
Les applications demandent des environnements de plus en plus complexes et il n'est pas rare de voir une appli fonctionner seulement sur une version précise d'un OS,
avec une version précise de son interpréteur/compilateur
et avec des centaines des dépendances avec toutes des versions très précises.
Certains environnements sont tellement compliqués à installer que, même en ayant le même laptop et le même OS, les nouveaux arrivants mettent plusieurs jours à tout installer parfaitement.
Pendant ce temps, les alertes en prod se répètent, les dev blâment les sysadmin et les sysadmin blâment les dev sans qu'aucun ne sachent vraiment d'où vient le problème.
Le malaise s'installe entre les deux équipes.
Le problème, c'est qu'une application tourne sur de nombreux environnements différents, aussi bien au niveau hardware (laptop de dev, serveur local, gros serveur en datacenter etc),
que logiciel (configuration, dépendances/modules/librairies, OS entre autre)
La combinaison de ces facteurs fait qu'une appli peut marcher parfaitement sur le laptop d'un dev mais pas du tout en production si UNE SEULE des nombreuses dépendances n'est pas exactement identique.
Le "Ça marche sur mon ordi" c'est le problème principal que règle Docker.
Docker permet de standardiser les applications pour qu'elles incluent toutes leurs dépendances avec elle, y compris l'OS ! L'astuce qui rend cela possible est le fait que les images Docker sont ultra légères comparées à des machines virtuelles et sont donc très facilement partageables.
Cette légèreté et cette standardisation permet de pouvoir utiliser la même image sur ton laptop et sur un gros serveur de production en étant sûr que tout va fonctionner correctement.
La mise en places des environnements nécessaires à chaque application est réduit à une commande, et une fraction de seconde !
Ma nouvelle formation sur Docker est justement dispo! Elle permet :
- Que tu comprennes enfin comment fonctionnent les conteneurs même si tu n'en a jamais utilisé avant.
- Que tu pratiques, pour comprendre toutes les commandes, et qu'utiliser Docker ne soit plus un obstacle, mais un couteau suisse qui te servira chaque jour.
- De créer tes propres images et tes propres stack entière en une seule commande.
Évidemment ce n'est pas une solution miracle et il y a des inconvénients qui ne conviendront pas a tout le monde:
- Elle comporte des exercices pratiques qui demandent un peu d'investissement perso pour que les commandes deviennent une habitude.
- Elle ne couvre pas la partie production (kubernetes, swarm, déploiements etc.) car c'est un sujet beaucoup plus vaste qui serait beaucoup trop indigeste d'un coup.
Commencer à utiliser Docker rendra les app de ton équipe beaucoup plus fiable et permet un gain de temps énorme dans la mise en place d’environnement des nouveaux dev.
Conteneuriser les app permet aussi d’être prêt à un passage a une infra conteneurisé quel que soit la techno choisie en production.
Avoir Docker dans ta trousse à outil te fera gagner énormément de temps et te permettra de pouvoir tester des logiciels sans rien installer ni configurer sur ta machine.
Docker est également la base nécessaire pour que tu puisses aborder plein d'autres technos sereinement (Integration continue, orchestration etc)
Connaître Docker te rendra plus crédible si tu cherches un nouveau taff car c'est une techno déjà bien installée.
Aider tes collègues à se mettre à Docker va leur permettre de gagner énormément en productivité et le temps sauvé à régler les problèmes d'inconsistance d’environnement te permettra de faire des tâches plus intéressantes que courir après les dev pendant une alerte.
Tu as maintenant le choix d'ignorer une techno de plus en plus demandée,
où de te mettre à jour et d'utiliser des outils modernes en passant a Docker.