Maman j'ai ratĂ© Docker đŸ˜±

saidi_sfinx

Saidi

Posted on May 20, 2022

Maman j'ai ratĂ© Docker đŸ˜±

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 ? đŸ€”

Une personne qui se pose des questions

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.

Personne qui n'a rien compris Ă  l'explication

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.

Personne qui enfin compris

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.

Personne qui a besoin d'un café

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.

Regard 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.

Homme surmotivé

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
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.

Content de la bonne nouvelle

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.
Femme énervée tirant sur son PC

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

Enfant qui crie dans tous les sens
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.

Un homme qui pleure

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.
Schéma solution avec containers
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 ?

Enfant content

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.

Remerciement

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.

Docker architecture

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.

Kevin tu as encore raté docker

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.

DĂ©collage

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:

Je te partage aussi quelques chaines YouTube sympa oĂč tu trouveras, je l'espĂšre, ton bonheur.

💖 đŸ’Ș 🙅 đŸš©
saidi_sfinx
Saidi

Posted on May 20, 2022

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related