Tu as clairement conscience que cette technologie se soit démocratisée embarquant tous le monde de la tech avec elle.
Malgré cet engouement, la mayonnaise n'a pas pris et tu te poses toujours ces questions existentielles.
Pourquoi Docker ? Quel est son intĂ©rĂȘt ? En quoi câest diffĂ©rent de tes superbes machines virtuelles ou de ton environnement de dĂ©veloppement ? đ€
Edine le sage đ€ disait:
Se poser des questions c'est bien ! Mais trouver des réponses c'est mieux !"
Donc cher geek junior ou aguerri, je peux comprendre l'attachement que tu portes Ă ton environnement local ou tes machines virtuelles configurĂ©es aux petits oignons. Mais tachons d'ĂȘtre l'une des derniĂšres personnes Ă te convaincre que c'est vraiment sensationnel.
C'est quoi Docker ?
Docker est une technologie qui va te permettre dâisoler une application et ses dĂ©pendances afin quâelle puisse sâexĂ©cuter de maniĂšre autonome et faciliter son dĂ©ploiement dans ce qu'on appelle un container.
OK j'ai compris, voit donc un container Docker comme une machine virtuelle trĂšs lĂ©gĂšre oĂč tout ce dont ton application a besoin est installĂ©. Chaque mini-machine virtuelle possĂšde sa propre IP, son utilisateur, ses paquets et son processus, etc... On parle donc d'isolation.
đ Je vois que tu as remarquĂ© que son processus Ă©tait au singulier, on y viendra un peu plus loin.
Mais j'ai une mauvaise nouvelle pour toi, le démarrage de cette mini-machine virtuelle ne sera plus une bonne raison de prendre la pause café car elle démarre en quelques secondes contrairement à ta machine virtuelle du futur et ses giga-octets de stockage soit dit en passant.
Isolation
Je te disais donc que Docker permettait d'isoler ton application et ses dépendances. Si je te parle de namespaces, chroot et cgroups tu vas encore me regarder de travers.
Ce sont pourtant ces fonctionnalités natives du noyau Linux qui permettent d'assurer l'isolation des containers. Oups! Je voulais dire des mini-machines virtuelles.
C'est à dire que ton conteneur va isoler ton application de son environnement hÎte et garantir le fonctionnement malgré les différences.
Par exemple, ton application containĂ©risĂ©e va fonctionner de la mĂȘme maniĂšre sur ta machine et celle de ton voisin sans pour autant avoir les mĂȘmes versions de logiciels (nginx, apache, php, python, jdk, node, ect...) installĂ©s sur vos machines respectives.
Et si tu as plusieurs containers sur ta machine, ils ne pourront pas communiquer entre eux à cause de l'isolation, à moins qu'ils partagent un réseau commun.
J'en ai déjà dit assez, tu trouveras de trÚs bonnes ressources sur le sujet des namespaces, chroot et cgroups mais ce qu'il faut que tu retiennes c'est que tu peux construire ton container à la main si tu te sens vraiment pousser des ailes.
Mais reste sur Docker đ.
Portabilité
Avec Docker tu vas pouvoir partager un environnement sans avoir à sortir ton disque dur 1To, ni ta super clef USB 64Go et ni d'attendre que ton super administrateur systÚme te donne les droits du disque réseau pour télécharger l'image de la machine virtuelle plus mise à jour depuis 2 ans.
En te disant ça tu comprends qu'un container est facilement portable sur plusieurs machines.
Pourquoi ? Car il n'embarque pas de systÚme d'exploitation, qui est virtualisé, contrairement à la machine virtuelle qui a son propre systÚme d'exploitation.
Docker définit un format de fichier de configuration, Dockerfile, qui inclus ton application et toutes ses dépendances.
Tu as tout intĂ©rĂȘt d'inclure ce fichier de configuration dans ton projet versionnĂ©. Bonjour git
Pourquoi ? Car ce fichier de configuration pĂšse quelques Ko et rappelle toi l'intĂ©rĂȘt de Docker c'est d'offrir un environnement d'exĂ©cution stable Ă ton application. Cet environnement pourra donc ĂȘtre Ă jour et partagĂ© sur n'importe quelle machine compatible Docker. Oui il va bien falloir que tu installes Docker Ă un moment.
C'est quoi une image Docker ?
Une image Docker est un package, un artefact, un livrable, ect.. que tu construis Ă lâaide de ce fameux Dockerfile.
Cette image va donc inclure toutes les dĂ©pendances dont ton application a besoin pour fonctionner. Bien que celle ci occupe de lâespace de stockage, elle nâutilise aucune ressource systĂšme (CPU, mĂ©moire) et ne peut pas ĂȘtre modifiĂ© aprĂšs sa crĂ©ation. Si tu veux faire une modification il faudra reconstruire ton image Docker.
J'ai une bonne nouvelle cette fois.
Il existe une bibliothĂ©que d'images, prĂȘtes Ă l'emploi, de tes applications prĂ©fĂ©rĂ©s qu'on appelle le docker hub qui est le registre officiel de Docker.
Tu as besoin d'une base de données MySQL, pas de souci tu peux utiliser l'image officiel Docker de MySQL.
Tu Ă©prouves le besoin de partager Ă des inconnus ta superbe application de web scrapping Ă travers une image Docker, tu peux le faire en poussant ton image sur le registre de docker aka Docker registry.
On est loin des partages d'images de machines virtuelles.
C'est quoi un container ?
Un container est une instance d'image. A partir d'une image Docker tu vas pouvoir crĂ©er un container c'est Ă dire un environnement dâexĂ©cution afin de faire fonctionner ton application.
En gros câest la mini-machine virtuelle sans le systĂšme d'exploitation et ses dĂ©pendances qui sont, je le rappelle, virtualisĂ©.
Si tu as besoin de travailler sur une architecture complexe, il te sera alors possible de lancer des dizaines de containers sans problĂšme et cela en quelques secondes. Pas sur que tu puisses faire de mĂȘme avec des machines virtuelles Ă moins d'avoir un ordinateur quantique đ€Ł.
IBM promet le sien pour 2025, il faudra patienter un peu moins d'une coupe du monde.
Donc essaie Docker si tu veux changer le destin de ta machine.
Cas d'utilisation
Il existe de nombreux cas d'utilisations de Docker que tu sois dans le développement ou coté systÚme, je vais pas tous les lister mais je vais te décrire un contexte.
Contexte
Tu es développeur web, tu as besoin de faire tourner tes applications sur ta machine hÎte.
Stack application A
- PHP 7.4
- Nginx 18
- Node.js 14
- MySQL 5.7
- Redis 5
Stack application B
- Python 3.8
- Apache 2.4
- Node.js 16
- Redis 8
- Mongo 3.4
Stack application C
- PHP 8.1
- Caddy 2
- MongoDB 4
- Elastic search 8
Problématique
Tu pourrais installer chaque dépendance sur ta machine mais accroche toi car il te faudra installer plusieurs outils de versions différentes, bien les configurer pour éviter que tout ce beau monde se marche sur les pieds.
Donc bonjour la documentation d'installation de 36 pages en version 1.0 depuis 7 mois.
Pour avoir un confort d'isolation, tu peux passer par de la virtualisation donc chaque application aurait sa propre machine virtuelle. Je doute que tu aies une machine qui puisse faire fonctionner trois machines virtuelles en parallĂšle de tes 7 instances Google Chrome qui ont 67 onglets chacune.
Donc bonjour les pauses cafĂ© d'un projet Ă un autre et les images de machines virtuelles qui trainent sur le rĂ©seau ou sur des clĂ©s USB, disques, etc... đ.
Une priĂšre đđż est nĂ©cessaire pour que l'image soit Ă jour sinon c'est la documentation de 36 pages qui t'attend pour installer chacune de tes applications.
Solution
Aujourd'hui tu as quelque chose dans l'idée qui ressemble aux machines virtuelles en terme d'isolation mais qui est beaucoup plus léger et plus rapide à l'exécution et surtout portable. Il s'agit des containers Docker
Tu auras donc 5 containers pour ton application A et B et 4 containers pour ton application C.
Au total tu auras donc 14 containers et si tu fais tourner certains containers sur des ports diffĂ©rents, ils pourront tous trĂšs bien tourner en parallĂšle sans ĂȘtre obligĂ© de stopper certains containers ou de fermer toutes tes instances Google Chrome. C'est pas une bonne nouvelle ?
C'est le moment ou tu me poses la fameuse question.
Pourquoi ne pas avoir 1 container par application ?
Tu te souviens avoir remarqué que je parlais plus haut d'un seul processus par container. C'est le moment d'expliquer quelle est la raison.
Docker conseille d'avoir un processus qui tourne par container pour les raisons suivantes:
- Plus facile de faire évoluer une application en créant plusieurs instances du conteneur. On parle de scaling.
- Une construction d'image plus rapide.
- Les dĂ©pendances peuvent ĂȘtre mises Ă jour indĂ©pendamment.
- Utilisation d'une mĂȘme image pour un autre projet.
- Plus facile de collecter les logs car il y a qu'un seul processus qui tourne sur le container
- etc...
Architecture client-serveur
Nous avons parlé d'image, de container et de registre et s'il était possible de tendre un micro à ces protagonistes, ils auraient eu cette fameuse phrase:
Rien de tout cela n'aurait été possible sans le Docker Engine.
Le Docker engine c'est le moteur Docker, l'application que tu vas installer sur ta machine afin d'interagir avec tous les objets Docker dont les containers, images, etc. et le registre. Il s'appuie sur une architecture client-serveur.
Client
Une interface de ligne de commande permettant d'exécuter les commandes Docker
Il existe un autre client, Docker Compose, qui permet de faire tourner une application multi-containers.
Serveur
Le Docker daemon traite les requĂȘtes du client sur tous le cycle de vie d'un objet Docker.
Bien entendu, le serveur Docker peut avoir un emplacement distant c'est tous le principe d'une architecture client-serveur.
L'une des possibilités est de mettre à jour la variable d'environnement DOCKER_HOST
qui permet au client de se connecter sur un daemon Docker distant. On est sur des notions avancées mais c'est pour que tu comprenne le schéma qui suit.
Pour en savoir plus:
https://docs.docker.com/get-started/overview/#docker-architecture
Conclusion
Félicitation, tu as compris la portée de cette révolution et pourquoi tous ce beau monde de la tech l'a intégré dans son quotidien. J'ai été inspiré sur ce coup mais je préfÚre te dire qu'il n'y aura pas de suite. Maman j'ai encore raté Docker a trÚs peu de chance de voir le jour.
Que tu veuilles tester un nouveau logiciel, une nouvelle architecture, tester ton nouveau modÚle de Machine Learning, faciliter le "onboarding" des nouveaux collaborateurs, l'utiliser pour de l'intégration continu ou déployer tes applications sur de nouveaux environnements, Docker sera la pour t'aider.
La containerisation ne sera pas la solution Ă tous tes problĂšmes bien que je trolle les machines virtuelles, elles restent utiles mais c'est pas le sujet de l'article.
Je te sens motivé pour passer à l'action, sache qu'il existe de nombreuses ressources sur internet pour apprendre docker mais je te conseille de toujours garder la documentation officielle sous le coude.
Demande à ton gars sûr qui s'éclate sur Docker depuis des années, il te partagera des liens sympa pour apprendre Docker que ce soit en français ou dans la langue de Shakespeare ou si tu es vraiment chaud en Hindi.
Il existe des références que je te partage:
- [en]https://www.docker.com/play-with-docker/
- [en]https://katacoda.com/courses/docker
- [en]https://container.training/
Je te partage aussi quelques chaines YouTube sympa oĂč tu trouveras, je l'espĂšre, ton bonheur.
Top comments (5)
A very good article, clear and concise ! It helped me understand what is Docker. Thank you !
TrÚs bon article Saidi merci pour ce partage de qualité ! J'espÚre que tu vas motiver plein de monde à adopter docker !
Merci Ousama đ
Merci Saidi. Article qui permet de comprendre simplement docker. đ
Merci Qamar pour le feedback đđŸ