DEV Community 👩‍💻👨‍💻

Cover image for Maman j'ai raté Docker 😱
Saidi
Saidi

Posted on • Updated on

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.

Top comments (5)

Collapse
karim1706 profile image
karim1706

A very good article, clear and concise ! It helped me understand what is Docker. Thank you !

Collapse
_ous92 profile image
Ousama Ben Younes

Très bon article Saidi merci pour ce partage de qualité ! J'espère que tu vas motiver plein de monde à adopter docker !

Collapse
saidi_sfinx profile image
Saidi Author • Edited on

Merci Ousama 😍

Collapse
qamarh profile image
qamar-h

Merci Saidi. Article qui permet de comprendre simplement docker. 🙂

Collapse
saidi_sfinx profile image
Saidi Author

Merci Qamar pour le feedback 🙏🏾

🌚 Browsing with dark mode makes you a better developer by a factor of exactly 40.

It's a scientific fact.