Docker expliqué simplement : lancer ses premiers conteneurs
🎯 Objectifs
- Comprendre ce qu'est un conteneur et pourquoi utiliser Docker
- Différencier machines virtuelles et conteneurs
- Installer Docker et vérifier l'installation
- Manipuler des images Docker (pull, list, remove)
- Créer, lancer et gérer des conteneurs
📋 Prérequis
- Linux Intermédiaire - ligne de commande, permissions, processus
- Un terminal avec accès root ou sudo
🐳 Pourquoi Docker ?
Le problème classique : « Ça marche sur ma machine ! »
Un conteneur empaquette une application avec toutes ses dépendances dans un environnement isolé et portable. Résultat : ce qui tourne en dev tourne aussi en prod, à l'identique.
💡 Docker standardise le déploiement : un même conteneur fonctionne sur Linux, macOS et Windows.
🆚 VMs vs Conteneurs
| Critère | Machine Virtuelle | Conteneur |
|---|---|---|
| Taille | Plusieurs Go (OS complet) | Quelques Mo |
| Démarrage | Minutes | Secondes |
| Isolation | Totale (hyperviseur) | Au niveau processus (noyau partagé) |
| Performance | Overhead important | Quasi-native |
| Portabilité | Limitée | Excellente |
🏗️ Architecture Docker
Docker utilise une architecture client-serveur :
CLI (vous) → Client Docker → Daemon Docker → Registry (Docker Hub)| Composant | Rôle |
|---|---|
| Client | Envoie les commandes (docker run, docker build…) |
| Daemon | Gère les images, conteneurs, réseaux et volumes |
| Registry | Stocke les images (Docker Hub par défaut) |
| Image | Modèle en lecture seule pour créer un conteneur |
| Conteneur | Instance exécutable d'une image |
🔧 Installation
Linux (Ubuntu/Debian)
Référence officielle : docs.docker.com/engine/install
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.iomacOS / Windows
Installez Docker Desktop : docker.com/products/docker-desktop
Post-installation (Linux)
Ajoutez votre utilisateur au groupe docker pour éviter sudo :
sudo usermod -aG docker $USER
newgrp dockerVérification
docker --version
docker run hello-world✅ Si vous voyez « Hello from Docker! », tout fonctionne.
📦 Images Docker
Concept
Une image est un modèle en lecture seule composé de couches (layers). Chaque couche représente une instruction (installer un paquet, copier un fichier…).
Nommage
Format : registre/nom:tag
| Exemple | Signification |
|---|---|
nginx | Image officielle, tag latest implicite |
nginx:1.25 | Image officielle, version 1.25 |
myuser/myapp:v2 | Image utilisateur, version v2 |
ghcr.io/org/app:main | Registry GitHub, branche main |
Commandes essentielles
# Télécharger une image
docker pull nginx:1.25
# Lister les images locales
docker images
# Supprimer une image
docker rmi nginx:1.25
# Inspecter une image
docker image inspect nginx:1.25⚠️ Évitez
:latesten production - cette étiquette change sans préavis. Précisez toujours une version.
🚀 Conteneurs Docker
Concept
Un conteneur est une instance en cours d'exécution d'une image. Vous pouvez lancer plusieurs conteneurs à partir de la même image.
Cycle de vie
Created → Running → Paused → Stopped → RemovedLa commande docker run
# Lancer en premier plan
docker run nginx
# Lancer en arrière-plan (détaché)
docker run -d nginx
# Nommer le conteneur
docker run -d --name mon-nginx nginx
# Mapper un port (hôte:conteneur)
docker run -d -p 8080:80 nginx
# Supprimer automatiquement à l'arrêt
docker run --rm nginx
# Mode interactif
docker run -it ubuntu bash| Option | Description |
|---|---|
-d | Mode détaché (arrière-plan) |
--name | Nom personnalisé |
-p hôte:conteneur | Redirection de port |
--rm | Supprime le conteneur à l'arrêt |
-it | Mode interactif avec terminal |
-e VAR=val | Variable d'environnement |
Gestion des conteneurs
# Lister les conteneurs actifs
docker ps
# Lister tous les conteneurs (y compris arrêtés)
docker ps -a
# Arrêter / démarrer / supprimer
docker stop mon-nginx
docker start mon-nginx
docker rm mon-nginx
# Voir les logs (et suivre en temps réel)
docker logs mon-nginx
docker logs -f mon-nginx
# Exécuter une commande dans un conteneur actif
docker exec -it mon-nginx bash
# Statistiques en temps réel
docker stats⚠️ Erreurs Courantes
| Erreur | Cause | Solution |
|---|---|---|
permission denied | Utilisateur pas dans le groupe docker | sudo usermod -aG docker $USER puis déconnexion |
port is already allocated | Le port hôte est déjà utilisé | Changer le port hôte : -p 8081:80 |
Cannot connect to the Docker daemon | Le daemon n'est pas démarré | sudo systemctl start docker |
image not found | Nom ou tag incorrect | Vérifier sur Docker Hub |
container name already in use | Un conteneur porte déjà ce nom | docker rm ancien-conteneur |
📌 Points Clés
- Un conteneur = une application + ses dépendances dans un environnement isolé
- Docker utilise une architecture client → daemon → registry
- Les images sont des modèles en lecture seule, les conteneurs en sont des instances
docker runcrée et lance un conteneur ;docker execinteragit avec un conteneur actif- Toujours spécifier un tag de version en production
📚 Ressources
🚀 Prochaines étapes
Vous savez utiliser les images et les conteneurs Docker. Passez au niveau suivant :
- Créer ses images Docker : Dockerfile, volumes et réseaux - Dockerfile, volumes et réseaux Docker