Qu'est-ce que Docker ?
Si vous évoluez souvent dans le monde de la programmation, du développement web ou des serveurs, vous avez très certainement entendu parler du terme Docker.
Docker est une plateforme qui nous permet d'exécuter des applications dans des environnements appelés conteneurs.
En termes simples, Docker nous aide à empaqueter une application ainsi que toutes ses dépendances, telles que les bibliothèques, les dépendances, les configurations et même une version spécifique du runtime.
Ainsi, lorsque cette application est transférée du PC d'un développeur vers un serveur, la probabilité de rencontrer des problèmes du type :
"Ça fonctionne sur mon PC, mais pourquoi y a-t-il une erreur sur le serveur ?"
s'en trouve grandement réduite.
Docker rend l'environnement d'application beaucoup plus cohérent.
Qu'est-ce qu'un conteneur ?
Un conteneur peut être imaginé comme une boîte dédiée à une application.
À l'intérieur de cette boîte se trouvent l'application et tout ce dont elle a besoin pour fonctionner.
Imaginons par exemple que nous ayons une application Laravel qui nécessite :
- PHP 8.3
- MySQL
- Redis
- Nginx
- Composer
Plutôt que d'installer le tout un par un sur l'ordinateur, nous pouvons utiliser Docker pour exécuter tous ces besoins dans leurs conteneurs respectifs.
La structure ressemble grosso modo à ceci :
Laravel Application
│
├── PHP Container
├── Nginx Container
├── MySQL Container
└── Redis Container
Tous ces conteneurs peuvent se connecter les uns aux autres et fonctionner comme un seul et même système.
Docker n'est pas une machine virtuelle
On assimile souvent à tort Docker à une machine virtuelle (VM).
Pourtant, les deux sont bien différents.
Une machine virtuelle exécute généralement un système d'exploitation complet à l'intérieur d'un ordinateur.
Par exemple, si nous utilisons Windows et que nous y exécutons Ubuntu via VirtualBox.
Une VM nécessite des ressources assez conséquentes car elle doit faire tourner un système d'exploitation complet.
Docker est plus léger car les conteneurs utilisent le noyau du système d'exploitation hôte.
Voici une illustration simple :
Machine Virtuelle
Hardware
↓
Operating System
↓
Virtual Machine
↓
Guest Operating System
↓
Application
Docker
Hardware
↓
Operating System
↓
Docker
↓
Container
↓
Application
C'est pourquoi Docker est généralement plus rapide à créer, démarrer, arrêter et supprimer par rapport à une machine virtuelle.
Pourquoi Docker est-il autant utilisé ?
Plusieurs raisons expliquent la popularité actuelle de Docker auprès des développeurs.
1. Un environnement plus cohérent
L'un des problèmes classiques du développement est la divergence des environnements.
Imaginons que le premier développeur utilise :
PHP 8.2
Que le deuxième développeur utilise :
PHP 8.3
Et que le serveur de production utilise quant à lui :
PHP 8.1
De si petites différences peuvent parfois provoquer des erreurs dans l'application.
Avec Docker, la version de l'environnement peut être définie dès le départ.
Par exemple :
FROM php:8.3-fpm
Ainsi, tous les développeurs peuvent exécuter l'application en utilisant exactement la même version de PHP.
2. La configuration de projet facilitée
Imaginez que vous veniez de rejoindre un nouveau projet.
Normalement, vous devriez probablement installer :
PHP
Composer
MySQL
Node.js
Redis
Nginx
Sans compter la nécessité de veiller à ce que les versions correspondent.
Avec Docker, il vous suffit généralement d'exécuter une commande telle que :
docker compose up -d
Docker se chargera ensuite de lancer les services définis par le projet.
La configuration de l'environnement de développement devient alors beaucoup plus pratique.
3. Réduction du problème du "Ça fonctionne sur ma machine"
Tout développeur a déjà vécu cette situation :
Développeur A :
"L'application fonctionne sur mon ordinateur."
Développeur B :
"Ça plante sur le mien."
Serveur :
"Ici, ça ne démarre même pas du tout."
Ce genre de problème survient généralement en raison de différences d'environnement.
Docker aide à garantir que l'application s'exécute dans un environnement quasi identique, que ce soit sur :
- l'ordinateur du développeur,
- l'ordinateur d'un autre développeur,
- le serveur de staging,
- le serveur de production.
4. Facilité d'exécution de multiples services
Les applications modernes ne requièrent généralement pas qu'un seul service.
Par exemple, une application peut avoir besoin de :
Backend → Laravel
Database → MySQL
Cache → Redis
Web Server → Nginx
Queue → Laravel Queue Worker
Grâce à Docker Compose, tous ces services peuvent être configurés dans un seul et même fichier.
Exemple :
services:
app:
build: .
mysql:
image: mysql:8
redis:
image: redis:latest
nginx:
image: nginx:latest
Il suffit ensuite de lancer :
docker compose up -d
Docker démarrera l'ensemble de ces services. Pour consulter une liste complète d'autres commandes utiles, vous pouvez lire notre guide sur [comment voir les logs d'un conteneur docker]() que nous avons résumé pour vous.
Conclusion
Docker est une plateforme qui nous permet d'exécuter des applications au sein de conteneurs offrant un environnement plus cohérent.
Plutôt que d'installer manuellement PHP, MySQL, Redis, Nginx et diverses dépendances, nous pouvons tout définir à l'aide de Docker.
Son principal avantage réside dans le fait que l'environnement de développement devient beaucoup plus facile à déplacer, partager et exécuter sur d'autres appareils.
Les concepts clés à comprendre lorsque l'on commence à apprendre Docker sont :
- L'image Docker comme modèle (template).
- Le conteneur comme application en cours d'exécution.
- Le Dockerfile comme instructions de création d'image.
- Docker Compose pour gérer plusieurs conteneurs.
- Le volume pour stocker les données.
- Le réseau (network) pour la communication inter-conteneurs.
Si vous développez souvent des applications nécessitant de nombreux services ou si vous travaillez au sein d'une équipe de développeurs, Docker est un outil qui vaut amplement la peine d'être appris.
Articles Similaires
Découvrir FFmpeg : l'outil magique pour le traitement vidéo et audio
Écrit par
Wilan
Contributeur permanent de Bali Island Tekno qui partage activement des connaissances sur la technologie, la programmation et le monde du génie logiciel.