Installer Docker sur Debian, comprendre les concepts (image, conteneur, volume), et maîtriser les commandes de base.
Debian 13 avec accès root ou sudo. Connaître les bases de Linux (commandes, services). Notions de virtualisation.
| Concept | Définition | Analogie |
|---|---|---|
| Image | Modèle en lecture seule d'un conteneur (OS + application) | Recette de cuisine |
| Conteneur | Instance en cours d'exécution d'une image | Plat cuisiné à partir de la recette |
| Dockerfile | Fichier texte définissant comment construire une image | La recette elle-même |
| Registry | Dépôt d'images (Docker Hub, GitLab Registry, etc.) | Bibliothèque de recettes |
| Volume | Répertoire persistant partagé entre hôte et conteneur | Boîte de conservation |
| Network | Réseau virtuel isolé pour faire communiquer les conteneurs | Réseau local entre cuisiniers |
| Docker Compose | Outil pour définir et lancer plusieurs conteneurs ensemble | Orchestre plusieurs cuisiniers |
# Supprimer les anciennes versions si présentes sudo apt remove docker docker-engine docker.io containerd runc # Installer les dépendances sudo apt update sudo apt install ca-certificates curl gnupg -y # Ajouter la clé GPG officielle Docker sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/debian/gpg | \ sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg # Ajouter le dépôt Docker echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # Installer Docker Engine sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y # Vérifier l'installation sudo docker run hello-world
# Post-installation : utiliser Docker sans sudo sudo usermod -aG docker $USER newgrp docker # Activer Docker au démarrage sudo systemctl enable --now docker # Vérifier la version docker version docker info
| Commande | Action | Exemple |
|---|---|---|
| docker run | Créer et démarrer un conteneur | docker run -d -p 80:80 nginx |
| docker ps | Lister les conteneurs actifs | docker ps |
| docker ps -a | Lister tous les conteneurs (actifs + arrêtés) | docker ps -a |
| docker stop | Arrêter un conteneur proprement | docker stop mon-nginx |
| docker start | Redémarrer un conteneur arrêté | docker start mon-nginx |
| docker restart | Redémarrer un conteneur | docker restart mon-nginx |
| docker rm | Supprimer un conteneur arrêté | docker rm mon-nginx |
| docker rm -f | Forcer la suppression (même actif) | docker rm -f mon-nginx |
| docker logs | Voir les logs d'un conteneur | docker logs mon-nginx |
| docker logs -f | Suivre les logs en temps réel | docker logs -f mon-nginx |
| docker exec -it | Ouvrir un shell dans un conteneur actif | docker exec -it mon-nginx bash |
| docker inspect | Voir la configuration complète d'un conteneur | docker inspect mon-nginx |
| docker stats | Voir l'utilisation CPU/RAM des conteneurs | docker stats |
# Exemple complet : lancer un serveur Nginx docker run -d \ --name mon-nginx \ -p 8080:80 \ -v /var/www/html:/usr/share/nginx/html:ro \ --restart unless-stopped \ nginx:latest # Options expliquées : # -d : détaché (arrière-plan) # --name : nom du conteneur # -p 8080:80 : port hôte:port conteneur # -v : volume (répertoire partagé) # --restart : politique de redémarrage # nginx:latest : image utilisée
| Commande | Action | Exemple |
|---|---|---|
| docker pull | Télécharger une image depuis le registry | docker pull debian:13 |
| docker images | Lister les images locales | docker images |
| docker rmi | Supprimer une image | docker rmi nginx:latest |
| docker build | Construire une image depuis un Dockerfile | docker build -t monapp:v1 . |
| docker tag | Renommer / étiqueter une image | docker tag monapp:v1 monapp:latest |
| docker push | Envoyer une image vers un registry | docker push monuser/monapp:v1 |
| docker search | Rechercher une image sur Docker Hub | docker search nginx |
| docker history | Voir les couches d'une image | docker history nginx |
Par défaut, les données d'un conteneur sont perdues à sa suppression. Les volumes permettent la persistance :
| Type | Syntaxe | Usage |
|---|---|---|
| Bind mount | -v /chemin/hote:/chemin/conteneur | Partager un répertoire existant de l'hôte |
| Named volume | -v nom_volume:/chemin/conteneur | Volume géré par Docker, stocké dans /var/lib/docker/volumes/ |
| tmpfs | --tmpfs /chemin/conteneur | Volume en RAM (temporaire, pour données sensibles) |
# Créer un volume nommé docker volume create mes-donnees # Utiliser le volume dans un conteneur docker run -d -v mes-donnees:/var/lib/mysql mysql:8 # Lister les volumes docker volume ls # Inspecter un volume docker volume inspect mes-donnees # Supprimer un volume non utilisé docker volume rm mes-donnees
| Driver réseau | Description | Usage |
|---|---|---|
| bridge | Réseau isolé par défaut (docker0) | Conteneurs sur le même hôte qui communiquent |
| host | Partage le réseau de l'hôte | Performances maximales, moins d'isolation |
| none | Aucun réseau | Conteneur totalement isolé |
| overlay | Réseau multi-hôtes (Docker Swarm) | Cluster de conteneurs sur plusieurs serveurs |
# Créer un réseau personnalisé docker network create mon-reseau # Lancer des conteneurs sur ce réseau docker run -d --name app --network mon-reseau monapp docker run -d --name db --network mon-reseau mysql:8 # Les conteneurs du même réseau se joignent par nom # "app" peut accéder à "db" via : mysql -h db # Lister les réseaux docker network ls
✅ Réponse : L'image est le modèle statique, le conteneur est l'instance en cours d'exécution
✅ Réponse : Lance le conteneur en arrière-plan (détaché)
✅ Réponse : docker exec -it conteneur bash
✅ Réponse : Named volume
✅ Réponse : docker image prune -a