A quoi sert effectivement docker : découvrons le ensemble en creant un site web fait en PHP
L'objectif finale de la creation d'un logiciel que ce soit web, mobile, desktop ou n'importe quel logiciel, est de resoudre un problème en utilisant l'informatique, ceci pass necessairement par l'écriture d'un code dans un langage informatique donné qui va etre par la suite compilé pour produire du code machine capable d'etre executé par le processeur de la machine ou le logiciel sera deployé qui peut etre soit une machine cliente(une machine d'un utilisateur) ou une machine serveur, donc en fait le processus est de créer un executable, un binaire, une unité de deployement qu'on peut mettre dans ces machines pour etre executé donc le but de la creation d'un logiciel c'est de produire un paquet de deployement qui le plus souvent contient le code compilé et ce paquet doit etre pret à l'emploie, par exemple le paquet office(word, excel etc..) vient sous forme d'un paquet qui contient un binaire (.exe) qui permet de lancer l'application, si vous creer un site fait en php et voulez le deployer chez un hebergeur, vous faite un paquets qui contient vos fichier .php et vous le deployez sur un repertoire du serveur, ce repertoire en fait est votre paquet de deployement, donc la creation d'un logiciel c'est la creation d'un paquet de deployement.
L'idée de de docker est celle de pouvoir etre l'instrument generique, globale pour la creation d'un paquet de deployement, en parole simple, vous voulez creer n'importe quel software deployable sur une machine serveur dans n'importe quel langage? alors vous coder dans ce langage, puis vous creez dans ce langage une unité de deployement, ou bien vous prenez votre code source de votre projet et vous le mettez tous dans un container Docker et c'est ce container que vous deployez sur le serveur, un peu comme si vous avez fait votre application PHP, vous le ZIPPER (creer un container docker) et vous distribuer le ZIP (distribuer l'image de docker), il suffit que sur la machine serveur il y ai le moteur de Docker installé (qu'il y ai un lecteur ZIP) et ce moteur saura quoi faire de ce qui se trouve à l'interieur independement du langage, de la technologie etc.. car dans le container vous y avez mis en amont tout ce qui sert pour pouvoir executer l'application qui se trouve à l'interieur du container, par exemple s'il s'agit d'un site en php, vous faites un script docker dans un fichier DockerFile, qui renseigne tout ce que l'image qui va produire le container devra comprendre par exemple le serveur web apache, le moteur PHP, la ou se trouvent les fichiers et vous donnez aussi la commande qui va lancer le site web quand on execute le container et c'est simple, donc si le site est en java, le developpeur mettra plutot toutes les dependances de java qui servent pour executer le site à l'interieur du container, si c'est un site en asp.net meme chose, du coup du point de vue de la machine serveur, ce n'est qu'un container Docker et rien de plus, et la machine serveur ne sait meme pas ce qui est entrain d'etre executer à l'interieur du container, on parle ici de virtualisation du sythème d'exploitation, c'est sincerement la chose la plus intelligente apparue dans le monde du deployement des logiciels et surtout des site web ces dernières années que chaque developpeurs serieux devrait connaitre, comprendre et savoir utiliser.
Serise sur le gateau avec Docker, plus question de dire "L'application fonctionne bien dans ma machine, je ne comprend pas pourquoi une fois sur le serveur ça ne marche pas" car comme vous l'avez deviné de mon recit ci dessus, vous mettez dans le container toutes les dependances qui servent pour faire fonctionner la app du coup si dans le container il y a PHP 8 par exemple, ça sera PHP 8 sur votre machine et PHP 8 aussi sur le serveur car soit votre machine que le serveur utilise le meme container DOCKER et DOCKER execute ce qu'il y a à l'interieur avec toutes ses dependances sans chercher à connaitre les details, finit le temps ou vous faite un code en php 7 par exemple le mettez sur un serveur qui supporte seulement php 5 et bonjours les degats, ça fonctionen chez vous mais sur le serveur pas.
En Plus avec docker, vous n'avez plus besoin en tant que developpeur d'installer une multitude de logiciel dans votre machine pour developper, il y a les immages de docker presque pour tous les langages et les technologies sur docker hub ici cherchez n'importe quel logiciel que vous utilisez pour developper vous trouverez son image dans docker hub qui est le repertoire online ou tout le monde deploie des images de docker gratuit pret à l'utilisation, par exemple si je veux travailler avec php, j'ai besoin de apache ou ngnix les serveur web et le moteur de php et meme une base de donnée comme mariadb ou mysql, simple au lieu d'installer tout cela dans ma machine, je vais sur docker hub je recuperes à travers docker ces images et je developpe directement avec docker, en bref dorenavant pour developper, j'aurai besoin de un et un seul instrument dans ma machine à savoir Docker
Developpons un petit site web en php en utilisant Docker juste pour vous faire prendre gout.
Allez ici et telechargez Docker pour votre machine, moi j'ai installé sur mon windows 10, une fois installé vous aurez une petite icone sous forme de bateau qui porte de container dans la barre de tache
voilà c'est fait, dans Docker, on peut utiliser Docker et Docker Compose, docker compose permet d'ecrire un fichier de configuration en YAML (c'est un peu comme du json, c'est ce fichier que vous voyez aussi dans flutter pour la description des packages donc pas de panic) qui contient la definition de plusieurs images à la fois donc on regroupe pour un meme projet tous les container du projet et on specifie comment ils sont liés entre eux par exemple nosu aurons besoin de apache/ngnix comme serveur web donc il nous faut un container seulement pour ça, il faut PHP donc un container pour ça, il faudra mysql ou mariadb un autre container donc on va decrire tout cela dans un fichier dockercompose.
Creez un repertoire dans votre machine quelque part appellez "MonPremierDocker", en utilisant nodepad ou nodepad++ bref un editeur de texte, creer un fichier "docker-compose.yml"
Commençon par ajouter le serveur web, installons NGNIX comme notre serveur web pour cela dans le fichier, ecrivez le code suivant
en fait, la clé service de ce fichier doit contenir tous les images docker donc on aura besoin pour notre proget, par exemple ici, on aura besoin d'un serveur web c'est pourquoi j'ai mis la valeur web(je pouvias l'appellé n'importe comment je met juste une description qui est plus coherent à ce que je suis entrain de faire), ce web contient une clé de docker compose qu'on appelle image qui indique en fait le nom de l'image sur docker hub (si vous partez dans le lien de docker hub si haut et vous cherchez ngnix vous allez le retrouvez donc en fait docker va prendre l'image du serveur ngnix à partir de docker hub), on indique sur quelle porte de notre machine le serveur web de ngnix à l'interieur de docker qui repond à la porte 80, devra repondre, pour simplicité j'ai mis qu'il devra aussi repondre à la porte 80 de ma machine (la valeur à gauche).
Pour tester si tout va bien, ouvrez une ligne de commande par exemple powershell dans le repertoire ou se trouve le fichier "docker-compose.yml" et tappez simplement la commande:
docker-compose up
Attendez simplement que docker telecharge l'image comme lu dans le fichier et cree son reseau interne à docker qui contiendra notre serveur web ngnix
Si tout se passe bien, ouvrez votre navigateur et allez sur le lien http://127.0.0.1 et vous verrez automatiquement la page initiale de ngnix, wow.. en une ligne de script on a ngnix dans notre machine
Maintenant, modifions le script YAML de manière à dire à ngnix de pouvoir lire ses fichiers de configurations et les fichiers HTMP et PHP qu'on va écrire du disque dure de notre machine plutot que de le lire dans le container docker ainsi on pourra facilement modifier ces fichiers pendant qu'on est entrain de travailler.
Maintenant, modifions le script YAML de manière à dire à ngnix de pouvoir lire ses fichiers de configurations et les fichiers HTMP et PHP qu'on va écrire du disque dure de notre machine plutot que de le lire dans le container docker ainsi on pourra facilement modifier ces fichiers pendant qu'on est entrain de travailler.
on a ajouté un voulme, qui permet de dire à docker de lier les fichiers dans un chemin de notre disque dure à des fichiers dans un chemin du disque dure du container docker car le container c'est comem une petite machine, donc tou ce qu'on va ecrire sur ces fichiers sur notre disque dure sera transcrit sur les memes fichiers dans le container docker.
Crée un fichier "nginx.conf" dans le meme repertoire que precedement ed inserré y le code suivant:
en fait nous disons à ngnix qu'il doit écouter par defaut à la porte 80 et que tous nos fichiers se trouvent dans le repertoire app/public
créer donc un sous repertoire app et un autre dans ce sous repertoire public dans le repertoire precedent et inserrez dans public par exemple le fichier html index.html contenant le code suivant
Faite ctrl-c pour stopper docker dans powershell puis retappez docker-compose up pour prendre en compte ces modfications
Ajoutons maintenant PHP dans notre architecture, pour cela on va creer un fichier docker file et on va installer php par ce fichier, j'utilise cette approche pour vous faire voir comment on fait un script dockerfile, surtout en utilisant un script, on peut modifier l'image qu'on prend de docker hun de manière à y ajouter des composantes non presentes dans cette image qui pourtant sert à notre projet, je vais par exemple ajouter les extension à l'image pour faire du PDO.
modifier votre fichier docker-compose comme suit
comme vous voyez , on a ajouté un service appellé php pour nous contenir tout ce qu'il nous faut pour php, nous demandons a dockercompose de lire cette image à partir d'un fichier qu'on appelle PHP.Dokerfile, cree le dans le meme repertoire ou il ya docker.compose.yaml
nous disons à docker de lire l'image php:fpm qui se trouve sur docker hub, c'est une petite machine, ensuite nous lui demandons suicessivement d'installer dans ces machines les extensions pdo_myslq et meme les extensions xdebug , le code est assez simple.
Pour tester que PHP fonctionne, creez un fichier index.php avec le code suivant dans app/public au meme endroit ou il y avait dejà index.html:
vous devez egalement modifié votre fichier ngnix.config pour prendre en compte php avec le code suivant
fait un ctrl+c pour arreter docker et relancer le avec docker-compose up eh voilà
Ajoutons à present MariadDb dans notre architecture comme cela on aura finalement une plateforme complete pour developper avec PHP, changer votre fichier docker-compose.yaml de manière qu'il ressemble au fichier suivant:
vou devez dejà etre familier un peu au fichier docker-compse, en fait on charge une image de mariadb de docker hub, on lui passe certaines informations à son demarage comme le mot de passe de l'administrateur racine de mariadb, l'utilisateur et son mot d epasse, puis la base de donnée sur la quelle nous voulons travailler et ensuite on lui dit que maria db devra tourner à la porte 3306 à l'interieur du contenaire comme à l'exterieur donc pour se connecter a mariadb avec n'importe quel client mysql il faudra utiliser la porte 3306 de votre machine.
Changez egalement votre fichier index.php dans app/public de manière qu'il contient le code suivant:
Faite ctrl+c et relancez docker avec docker-compose up
eh voilà tout fonctionne
@Bernard ouang c'est un très très bon topic à connaitre pour- tout developpeur qui veut vraiment aller dans la direction du vrai coding, le connaitre c'est un plus et ouvre beaucoup de possibilités surtout que quand on parle du web de nos jours du coup c'est docker, le savez vous que facebook, les applications de google, amazon, linkedin, twitter etc.. sont des sites web servis à partir des containers dockers? la plupart des sites actuellement sont empaquettés et publié comme paquet docker pour la simple raison que avec docker on resoud facilement le probleme de scalabilité c'est à dire pouvoir servire contemporainement des millions d'utilisateurs car plus les utilisateurs augmente docker multiplie seulement les instances du meme container qui servent facilement les utilisateurs quand ils diminussent docker elimine les container et le tour est joué c'est ça qu'on appelle scalabilité, j'essaie la de vous ecalirer sur un topic qui est difficile de comprendre quand on est debutant, du moins posez les questions et je leverai les doutes
22.08.2022, 20:36
@Bernard ouang c'est un très très bon topic à connaitre pour- tout developpeur qui veut vraiment aller dans la direction du vrai coding, le connaitre c'est un plus et ouvre beaucoup de possibilités surtout que quand on parle du web de nos jours du
22.08.2022, 20:29
Waouh, merci prof
22.08.2022, 18:21
LarrySig Guest
24.05.2024, 18:18
Post: Comment fonctionnent Internement les guichets automatiques ?
Orvilledop Guest
22.05.2024, 00:57
Post: Comment fonctionnent Internement les guichets automatiques ?
Orvilledop Guest
15.05.2024, 16:04
Post: Comment fonctionnent Internement les guichets automatiques ?
Franck Guest
14.05.2024, 19:34
Post: Comment deployer un site web statique sur github?