Aller au contenu principal

Introduction à Docker


Objectifs du chapitre

  • Comprendre ce qu'est la conteneurisation
  • Découvrir Docker et son écosystème
  • Différencier conteneurs et machines virtuelles
  • Comprendre l'architecture Docker

1 - Qu'est-ce que la Conteneurisation ?

Le problème historique

Avant les conteneurs, le déploiement d'applications posait de nombreux défis :

Développeur : "Ça marche sur ma machine !"
Ops : "Mais pas en production..."

Les causes courantes :

  • Versions de dépendances différentes
  • Configuration système variable
  • Bibliothèques manquantes
  • Environnements hétérogènes

La solution : les conteneurs

Un conteneur est une unité logicielle standardisée qui empaquète :

  • Le code de l'application
  • Les dépendances (bibliothèques, frameworks)
  • La configuration
  • L'environnement d'exécution
┌─────────────────────────────────────────────────┐
│ Conteneur Docker │
├─────────────────────────────────────────────────┤
│ Application + Dépendances + Configuration │
│ ───────────────────────────────────────────── │
│ Isolation du système hôte │
└─────────────────────────────────────────────────┘

2 - Qu'est-ce que Docker ?

Définition

Docker est une plateforme open-source qui permet de :

  • Construire des images conteneurisées
  • Distribuer ces images via des registres
  • Exécuter des conteneurs de manière isolée

Historique

AnnéeÉvénement
2013Création de Docker par Solomon Hykes (dotCloud)
2014Docker 1.0 - Version stable
2017Moby Project - Docker devient open-source
2019Docker Desktop pour entreprises
2023Docker reste le standard de facto

L'écosystème Docker

┌──────────────────────────────────────────────────────────┐
│ Écosystème Docker │
├──────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │
│ │ Docker CLI │ │ Docker │ │ Docker │ │
│ │ │ │ Desktop │ │ Hub │ │
│ └─────────────┘ └─────────────┘ └─────────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │
│ │ Docker │ │ Docker │ │ Docker │ │
│ │ Compose │ │ Swarm │ │ Registry │ │
│ └─────────────┘ └─────────────┘ └─────────────────┘ │
│ │
└──────────────────────────────────────────────────────────┘

3 - Conteneurs vs Machines Virtuelles

Architecture comparée

Machine Virtuelle (VM)

┌───────────┐ ┌───────────┐ ┌───────────┐
│ App A │ │ App B │ │ App C │
├───────────┤ ├───────────┤ ├───────────┤
│ Bins/Lib │ │ Bins/Lib │ │ Bins/Lib │
├───────────┤ ├───────────┤ ├───────────┤
│ Guest OS │ │ Guest OS │ │ Guest OS │
└───────────┴─┴───────────┴─┴───────────┘
┌─────────────────────────────────────────┐
│ Hyperviseur │
├─────────────────────────────────────────┤
│ Système Hôte │
├─────────────────────────────────────────┤
│ Infrastructure │
└─────────────────────────────────────────┘

Conteneur Docker

┌───────────┐ ┌───────────┐ ┌───────────┐
│ App A │ │ App B │ │ App C │
├───────────┤ ├───────────┤ ├───────────┤
│ Bins/Lib │ │ Bins/Lib │ │ Bins/Lib │
└───────────┴─┴───────────┴─┴───────────┘
┌─────────────────────────────────────────┐
│ Docker Engine │
├─────────────────────────────────────────┤
│ Système Hôte │
├─────────────────────────────────────────┤
│ Infrastructure │
└─────────────────────────────────────────┘

Tableau comparatif

CaractéristiqueVMConteneur
DémarrageMinutesSecondes
TailleGoMo
Performance~95%~99%
IsolationForte (matériel)Bonne (processus)
OSCompletPartagé
Densité10-20/serveur100+/serveur

Quand utiliser quoi ?

Utilisez les VM quand :

  • Isolation totale requise
  • OS différents nécessaires
  • Applications legacy non conteneurisables

Utilisez Docker quand :

  • Microservices
  • CI/CD rapide
  • Scalabilité horizontale
  • Environnements de développement

4 - Architecture de Docker

Les composants principaux

┌─────────────────────────────────────────────────────────────┐
│ Client Docker │
│ (docker build, run, pull...) │
└──────────────────────────┬──────────────────────────────────┘
│ REST API

┌─────────────────────────────────────────────────────────────┐
│ Docker Daemon (dockerd) │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ Images │ │ Conteneurs │ │ Réseaux │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────────────────────────────┐ │
│ │ Volumes │ │ containerd │ │
│ └─────────────┘ └─────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘

Concepts clés

1. Docker Daemon (dockerd)

  • Service qui gère les objets Docker
  • Écoute les requêtes API
  • Communique avec containerd

2. Docker Client (docker)

  • Interface ligne de commande
  • Envoie les commandes au daemon
  • Peut communiquer avec plusieurs daemons

3. Docker Registry

  • Stocke les images Docker
  • Docker Hub (public)
  • Registres privés (Harbor, GitLab, etc.)

4. Images

  • Templates en lecture seule
  • Construites à partir de Dockerfile
  • Composées de couches (layers)

5. Conteneurs

  • Instances exécutables d'images
  • Isolés les uns des autres
  • Éphémères par défaut

5 - Pourquoi Docker ?

Avantages clés

Avantages

1. Portabilité

  • "Build once, run anywhere"
  • Même comportement partout

2. Efficacité

  • Démarrage rapide
  • Utilisation optimale des ressources

3. Isolation

  • Pas de conflits entre applications
  • Sécurité renforcée

4. Scalabilité

  • Réplication facile
  • Orchestration avec Kubernetes/Swarm

5. DevOps

  • CI/CD simplifié
  • Infrastructure as Code

Cas d'usage

Cas d'usageDescription
DéveloppementEnvironnements reproductibles
TestsIsolation des tests, parallélisation
CI/CDBuild et déploiement automatisés
MicroservicesArchitecture modulaire
Migration CloudPortabilité multi-cloud

6 - Docker Hub

Qu'est-ce que Docker Hub ?

Docker Hub est le registre public officiel de Docker :

  • Plus de 8 millions d'images disponibles
  • Images officielles maintenues par Docker
  • Images communautaires
  • Registres privés gratuits (limités)

Images populaires

ImageDescriptionPulls
nginxServeur web1B+
postgresBase de données500M+
nodeRuntime JavaScript500M+
pythonInterpréteur Python500M+
redisCache in-memory500M+

Conventions de nommage

# Format
[registre/]utilisateur/image:tag

# Exemples
nginx # Image officielle, tag latest
nginx:1.25 # Image officielle, tag spécifique
bitnami/nginx # Image communautaire
mon-registre.io/app:v1.0 # Registre privé

7 - Premiers pas

Vérifier l'installation

# Version de Docker
docker --version
# Docker version 24.0.7, build afdd53b

# Informations système
docker info

# Tester avec Hello World
docker run hello-world

Sortie attendue

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image.
4. The Docker daemon streamed that output to the Docker client.
...

Résumé

ConceptDescription
DockerPlateforme de conteneurisation
ImageTemplate en lecture seule
ConteneurInstance exécutable d'une image
RegistryStockage d'images (Docker Hub)
DaemonService qui gère Docker
Points clés
  • Docker résout le problème "ça marche sur ma machine"
  • Les conteneurs sont plus légers et rapides que les VM
  • Docker Hub fournit des milliers d'images prêtes à l'emploi
  • L'architecture client-serveur permet une grande flexibilité

Exercices pratiques

  1. Expliquez la différence entre une image et un conteneur
  2. Citez 3 avantages des conteneurs par rapport aux VM
  3. Qu'est-ce que Docker Hub ?
  4. Décrivez le rôle du Docker Daemon

← Table des matières | Installation de Docker →