Skip to content

Latest commit

 

History

History
405 lines (296 loc) · 15.8 KB

File metadata and controls

405 lines (296 loc) · 15.8 KB

🔝 Retour au Sommaire

1.4 Cas d'usage et avantages de Docker

Introduction

Vous avez maintenant une bonne compréhension de ce qu'est Docker et comment il fonctionne. Mais une question demeure : pourquoi devriez-vous utiliser Docker ? Quels problèmes concrets résout-il dans votre travail quotidien ?

Dans cette section, nous allons explorer les avantages tangibles de Docker et les situations où il brille particulièrement. Vous découvrirez comment Docker peut transformer votre façon de travailler, que vous soyez développeur, administrateur système, ou membre d'une équipe DevOps.

Les avantages fondamentaux de Docker

1. Cohérence entre environnements

Le problème : Combien de fois avez-vous entendu "ça marche sur ma machine" ? Le code fonctionne parfaitement en développement, mais plante en production. Ou pire, il fonctionne sur l'ordinateur de votre collègue mais pas sur le vôtre.

La solution Docker : Avec Docker, vous empaquetez votre application avec toutes ses dépendances. Le conteneur qui fonctionne sur votre ordinateur portable fonctionnera exactement de la même manière sur le serveur de production.

Exemple concret : Votre application Python nécessite Python 3.9, Flask 2.0, et PostgreSQL 13. Sans Docker, vous devez installer et configurer tout cela sur chaque machine. Avec Docker, vous créez une image contenant tout, et cette image fonctionne partout.

2. Isolation des applications

Le problème : Sur un même serveur, vous voulez faire tourner deux applications. L'une nécessite Node.js 14, l'autre Node.js 18. C'est compliqué, voire impossible, sans créer des conflits.

La solution Docker : Chaque conteneur est isolé. Vous pouvez avoir 10 versions différentes de Node.js, Python ou Java qui tournent simultanément sans aucun conflit. Chaque application vit dans son propre monde.

Exemple concret : Sur le même serveur, vous faites tourner :

  • Un site WordPress (PHP 7.4 + MySQL 5.7)
  • Une API moderne (Node.js 18 + MongoDB 6)
  • Une application legacy (Java 8 + PostgreSQL 10)

Aucune interférence entre ces environnements.

3. Déploiement rapide et reproductible

Le problème : Déployer une application nécessite traditionnellement des heures de configuration : installer les dépendances, configurer les services, ajuster les paramètres...

La solution Docker : Le déploiement devient une simple commande. Tout est déjà configuré dans l'image. En quelques secondes, votre application est opérationnelle.

Exemple concret :

docker run -d -p 80:80 votre-application:v2.0

Une seule ligne pour déployer votre application. Besoin de revenir à la version précédente ? Une seule ligne aussi.

4. Utilisation optimale des ressources

Le problème : Les machines virtuelles gaspillent beaucoup de ressources. Chaque VM embarque un OS complet et réserve de la RAM même si elle ne l'utilise pas.

La solution Docker : Les conteneurs sont légers et ne consomment que les ressources qu'ils utilisent réellement. Sur une machine qui pourrait héberger 5 VMs, vous pouvez faire tourner 50 conteneurs.

Exemple concret : Serveur avec 32 Go de RAM :

  • Avec VMs : 4-6 applications maximum
  • Avec Docker : 30-40 applications sans problème

5. Scalabilité facile

Le problème : Votre application connaît un pic de trafic. Vous devez rapidement ajouter des instances pour gérer la charge. Avec une approche traditionnelle, c'est long et complexe.

La solution Docker : Lancer de nouvelles instances de votre application prend quelques secondes. Docker facilite la mise à l'échelle horizontale.

Exemple concret : Votre site e-commerce subit une forte charge le jour des soldes. En quelques commandes, vous passez de 3 à 20 instances de votre application pour absorber le trafic.

6. Développement collaboratif simplifié

Le problème : Un nouveau développeur rejoint l'équipe. Il passe 2 jours à installer et configurer son environnement de développement. Rien ne fonctionne du premier coup.

La solution Docker : Le nouveau développeur clone le dépôt Git, lance docker-compose up, et son environnement est opérationnel en 5 minutes. Tout est identique à celui de l'équipe.

Exemple concret :

git clone https://github.com/votre-projet.git  
cd votre-projet  
docker compose up  
# ✅ L'application tourne sur http://localhost:3000

Note : La commande docker compose (sans tiret) est la version moderne intégrée en tant que plugin Docker. L'ancienne commande docker-compose (avec tiret) fonctionne encore mais est progressivement remplacée.

Cas d'usage détaillés

1. Développement local

Scénario : Vous développez une application web qui nécessite plusieurs services : une base de données, un cache Redis, un serveur de messagerie.

Sans Docker :

  • Installer PostgreSQL sur votre machine
  • Configurer Redis
  • Installer un serveur mail local (MailHog ou similaire)
  • Gérer les ports, les configurations, les démarrages automatiques
  • Répéter tout cela sur chaque machine de développement

Avec Docker :

# docker-compose.yml
services:
  app:
    build: .
    ports:
      - "3000:3000"
  database:
    image: postgres:14
  cache:
    image: redis:7
  mail:
    image: mailhog/mailhog

Une commande, et tout votre environnement est prêt. Besoin de recommencer ? Supprimez tout et relancez. C'est toujours propre.

Avantages :

  • Environnement identique pour toute l'équipe
  • Installation en quelques minutes
  • Nettoyage facile (pas de pollution de votre système)
  • Changement de version simple

2. Tests et intégration continue (CI/CD)

Scénario : Vous voulez tester automatiquement votre code à chaque commit sur différentes versions de Node.js.

Sans Docker :

  • Configurer plusieurs serveurs de build
  • Installer différentes versions de Node.js sur chaque serveur
  • Gérer la maintenance et les mises à jour

Avec Docker :

# .github/workflows/test.yml
jobs:
  test:
    strategy:
      matrix:
        node: [18, 20, 22]
    steps:
      - run: docker run node:${{ matrix.node }} npm test

Les tests s'exécutent automatiquement sur toutes les versions, dans des environnements isolés et reproductibles.

Avantages :

  • Tests dans un environnement propre à chaque fois
  • Parallélisation facile
  • Pas de pollution entre les tests
  • Reproductibilité totale

3. Microservices

Scénario : Vous construisez une application moderne composée de plusieurs services indépendants : un service d'authentification, un service de paiement, un service de notifications, etc.

Sans Docker : Chaque service peut avoir ses propres dépendances et versions. Gérer tout cela sur un seul serveur devient un cauchemar.

Avec Docker : Chaque microservice tourne dans son propre conteneur avec ses propres dépendances. Ils communiquent via des réseaux Docker. Vous pouvez mettre à jour un service sans affecter les autres.

Exemple d'architecture :

┌─────────────┐   ┌─────────────┐   ┌─────────────┐
│   Auth      │   │  Payment    │   │  Notif      │
│  Service    │   │  Service    │   │  Service    │
│ (Node.js)   │   │  (Python)   │   │  (Go)       │
└─────────────┘   └─────────────┘   └─────────────┘
       ↓                 ↓                  ↓
┌──────────────────────────────────────────────────┐
│            Docker Network                        │
└──────────────────────────────────────────────────┘

Avantages :

  • Indépendance des services
  • Déploiement et mise à jour indépendants
  • Technologie différente par service
  • Scalabilité par service

4. Environnements de test multiples

Scénario : Votre application doit fonctionner avec plusieurs versions de bases de données : MySQL 5.7, MySQL 8.0, et MariaDB 10.5.

Sans Docker : Impossible de faire tourner plusieurs versions de MySQL simultanément sur la même machine.

Avec Docker :

# Test avec MySQL 5.7
docker run --name test-mysql57 -e MYSQL_ROOT_PASSWORD=password mysql:5.7

# Test avec MySQL 8.0
docker run --name test-mysql80 -e MYSQL_ROOT_PASSWORD=password mysql:8.0

# Test avec MariaDB
docker run --name test-mariadb -e MYSQL_ROOT_PASSWORD=password mariadb:10.5

Tous tournent simultanément sur des ports différents. Vous pouvez tester votre application contre toutes ces versions.

Avantages :

  • Tests de compatibilité faciles
  • Pas de conflit entre versions
  • Environnements jetables (supprimez et recréez à volonté)

5. Applications legacy et migration

Scénario : Vous avez une vieille application PHP 5.6 avec MySQL 5.5 qui doit continuer à fonctionner pendant que vous développez une nouvelle version moderne.

Sans Docker : Maintenir PHP 5.6 sur un système moderne est compliqué. Cette version n'est plus supportée et difficile à installer.

Avec Docker :

FROM php:5.6-apache  
RUN docker-php-ext-install mysql  
COPY . /var/www/html/  

Votre application legacy tourne dans son conteneur avec ses anciennes dépendances, pendant que votre nouvelle application utilise des technologies modernes.

Avantages :

  • Conservation des environnements legacy
  • Migration progressive
  • Cohabitation ancien/nouveau
  • Maintenance simplifiée

6. Démonstrations et formations

Scénario : Vous devez faire une démonstration de votre produit ou former des utilisateurs. Vous voulez que tout fonctionne immédiatement sans passer du temps à installer.

Sans Docker : Préparer chaque machine de démonstration prend du temps. Des problèmes surviennent toujours ("ça ne fonctionne pas sur cet ordinateur").

Avec Docker : Vous distribuez une image Docker. Les participants lancent un conteneur et l'application est immédiatement opérationnelle, identique pour tous.

Avantages :

  • Configuration instantanée
  • Environnement identique pour tous
  • Pas de pollution des machines
  • Nettoyage facile après la démo

7. Applications open source et distribution

Scénario : Vous créez un outil open source que d'autres développeurs vont utiliser. Votre outil dépend de nombreuses bibliothèques et services.

Sans Docker : Votre README contient 10 pages d'instructions d'installation. Les utilisateurs rencontrent des problèmes selon leur OS et leur configuration.

Avec Docker :

docker run -p 8080:8080 votre-outil/application

Installation en une ligne. Fonctionne sur Windows, macOS et Linux.

Avantages :

  • Adoption facilitée
  • Moins de support nécessaire
  • Documentation simplifiée
  • Expérience utilisateur améliorée

8. Développement et production identiques

Scénario : Le fameux problème "ça marche en dev mais pas en prod". Les environnements diffèrent légèrement, causant des bugs inattendus.

Sans Docker : Même avec de bonnes pratiques, des différences subsistent : versions de bibliothèques, configurations système, variables d'environnement...

Avec Docker : La même image Docker qui tourne en développement tourne en production. Zéro différence.

Processus :

Développement → Tests → Staging → Production
   Image       Image     Image      Image
  (identique) (identique) (identique) (identique)

Avantages :

  • Bugs détectés plus tôt
  • Déploiements plus sûrs
  • Confiance accrue
  • Moins de surprises en production

Exemples concrets d'entreprises

Netflix

Netflix utilise des conteneurs (dont Docker) pour gérer des milliers de microservices. Cela leur permet de :

  • Déployer des centaines de fois par jour
  • Gérer une architecture massive et complexe
  • Tester et itérer rapidement

Spotify

Spotify a migré vers une architecture basée sur des conteneurs pour :

  • Améliorer la vitesse de déploiement
  • Donner plus d'autonomie aux équipes
  • Optimiser l'utilisation de leurs serveurs

PayPal

PayPal utilise Docker pour :

  • Accélérer le développement local
  • Améliorer la cohérence entre environnements
  • Faciliter les tests

Ces entreprises ont en commun d'avoir considérablement amélioré leur efficacité et leur agilité grâce à la conteneurisation.

Les secteurs qui bénéficient le plus de Docker

Startups et PME

  • Démarrage rapide sans grande infrastructure
  • Optimisation des coûts cloud
  • Flexibilité et agilité

Entreprises tech

  • Microservices et architectures modernes
  • CI/CD et DevOps
  • Développement distribué (équipes distantes)

Éducation et formation

  • Environnements de lab facilement reproductibles
  • Démonstrations cohérentes
  • Apprentissage pratique sans configuration complexe

Recherche et data science

  • Reproductibilité des expériences
  • Partage d'environnements complexes
  • Gestion de dépendances scientifiques

Tableau récapitulatif des avantages

Avantage Impact Exemple
Cohérence Élimine "ça marche sur ma machine" Dev = Production
Isolation Pas de conflits entre applications Node.js 14 et 18 coexistent
Portabilité Fonctionne partout Linux, Windows, macOS, Cloud
Légèreté Économie de ressources 10x plus de conteneurs que de VMs
Rapidité Démarrage en secondes Déploiement quasi-instantané
Scalabilité Multiplication facile des instances De 1 à 100 conteneurs rapidement
Reproductibilité Environnements identiques Onboarding en minutes
Versionning Retours en arrière faciles Rollback instantané

Quand Docker n'est peut-être pas la meilleure solution ?

Soyons honnêtes : Docker n'est pas toujours la solution miracle. Voici quelques cas où d'autres approches peuvent être préférables :

Applications avec GUI lourdes

Les applications desktop avec interfaces graphiques complexes peuvent être compliquées à conteneuriser.

Performances extrêmes

Pour des applications nécessitant les performances absolues maximales (HPC, trading haute fréquence), l'overhead de Docker — bien que quasi nul côté CPU — peut poser des problèmes au niveau des I/O disque ou du réseau dans certaines configurations.

Très petites applications simples

Pour un simple script Python qui tourne une fois par mois, Docker peut être excessif.

Contraintes réglementaires strictes

Certains secteurs réglementés peuvent avoir des restrictions sur l'utilisation de conteneurs.

Cependant, dans la grande majorité des cas, les avantages de Docker surpassent largement ces limitations potentielles.

En résumé

Docker offre des avantages considérables qui transforment la manière de développer, tester et déployer des applications :

Pour les développeurs :

  • Environnements cohérents et reproductibles
  • Onboarding rapide des nouveaux membres
  • Expérimentation sans risque

Pour les équipes DevOps :

  • Déploiements simplifiés et automatisés
  • Scalabilité facilitée
  • Gestion des ressources optimisée

Pour les entreprises :

  • Réduction des coûts d'infrastructure
  • Accélération du time-to-market
  • Amélioration de la fiabilité

Les cas d'usage sont multiples : du développement local aux architectures microservices en production, en passant par les tests automatisés et la formation. Docker est devenu un standard de facto dans l'industrie pour de bonnes raisons.

Vous avez maintenant une vision complète de ce qu'est Docker, comment il fonctionne, et pourquoi il est devenu incontournable. Dans le prochain chapitre, nous passerons à la pratique avec l'installation et la configuration de Docker sur votre système.

⏭️ Installation et configuration