|
|
|
|
| |
Utiliser une image Docker toute prête c'est facile Développer dans un environnement Docker, c'est un peu plus chiant Mais c'est super important pour utiliser toute la puissance de Docker quand on est dev
- un petit rappel sur comment on dev d'habitude
- comment on aurait fait naïvement avec Docker
- comment on peut faire plus efficace
Mais avant laisse-moi te donner un exemple.
On utilise un app Node/Express toute simple qui fait juste un Hello World :
On utilise nodemon pour vérifier que lors de la modification d'un fichier, node se relance tout seul :
Donc je lance : npm run start:dev
Je fais quelques modifs dans mon hello world.
On est good. C'est automatiquement pris en compte.
Là, normalement, c'est ce que tu as habituellement (que ça soit en Node ou Python ou PHP ...)
Je fais mon dev, quand je save mon fichier, je peux tester tout de suite que mes modifs sont bien prises en compte et que ça fonctionne.
Comme maintenant, je sais l'intêret d'utiliser Docker (cf article : Débuter avec Docker), je ne veux plus dév à la Old Fashion
Je veux ma propre image Docker, pour être prêt pour la prod et avoir de la "portabilité" de mon dev.
Je fais donc mon Dockerfile tel qu'il sera utilisé en prod :
- docker build . -t helloworld
- docker run -p 3000:3000 -d helloworld
Je modifie mon code. La modification n'apparait pas, bien entendu.
Obliger de stop, build et de run à nouveau le tout pour que ça soit pris en compte.
Et là, ça fonctionne, ma modif est up.
Et c'est là que c'est hyper chiant.
À chaque fois que tu dois faire une modif, tu dois stop/build/run.
La solution vient de docker-compose qui permet de surcharger ton Dockerfile sans le toucher :
Ici je demande de remplacer la commande que l'on a vue plus haut "npm start" par "npm run start:dev" C'est la commande dont j'ai besoin (cf premier paragraphe) pour que mes modifs soient prises en compte automatiquement.
Et je lui dis de "monter" mon dossier courant dans "/usr/src/app" remplaçant le COPY du docker file
Monter un dossier comme ça permet à Docker de croire qu'il utilise un dossier dans le container alors qu'en fait il utilise mon dossier de développement
Ainsi, quand je modifie un fichier dans mon dossier, c'est modifié dans le container aussi.
Donc le "nodemon" détectera des modifications (comme au début de l'article) et prendra en compte mes modifs.
Pour tester : docker-compose up --build
Au final, créer une image Docker te permet de garantir que ton environnement de Dev est à l'identique de ton environnement de prod (avoir les bonnes libs avec les bonnes versions ...)
Donc quand tu dev, tu dois le faire dans les mêmes conditions que ton image Docker, pour être sûr que ton poste local n'interfère pas.
Maintenant, tu sais comment faire ça, facilement.
|
| | | |
|