1. C'est quoi Docker exactement ?
Avant Docker, déployer une application sur un serveur était fastidieux : installer les dépendances, gérer les versions, s'assurer que rien ne conflit avec d'autres apps sur le même serveur. Et quand quelque chose ne marchait pas, la phrase classique : "mais ça marchait sur ma machine...".
Docker résout ces problèmes avec les conteneurs : des boîtes autonomes qui contiennent votre application ET toutes ses dépendances (runtime, bibliothèques, configuration). Un conteneur Docker tourne de façon identique partout.
Concrètement :
- Image : le modèle de votre conteneur (comme un disque ISO)
- Conteneur : une instance d'une image en cours d'exécution
- Registry : un dépôt d'images (Docker Hub est le principal, gratuit)
- Docker Compose : un outil pour orchestrer plusieurs conteneurs ensemble
2. Installer Docker Engine
N'utilisez pas la version de Docker dans les dépôts Debian/Ubuntu - elle est souvent très obsolète. Utilisez le dépôt officiel Docker.
# Mettre à jour et installer les prérequis
apt update
apt install ca-certificates curl gnupg -y
# Créer le dossier pour les clés GPG
install -m 0755 -d /etc/apt/keyrings
# Télécharger la clé GPG officielle Docker
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
# Ajouter le dépôt Docker aux sources apt
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" | tee /etc/apt/sources.list.d/docker.list
# Installer Docker
apt update
apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -ySur Ubuntu, remplacez docker.com/linux/debian par docker.com/linux/ubuntu dans les deux commandes qui y font référence.
Vérifiez l'installation :
docker --version
docker compose version
# Test classique : télécharge et exécute un conteneur hello-world
docker run hello-worldSi vous voyez "Hello from Docker!", l'installation est réussie.
3. Activer Docker au démarrage
systemctl enable docker
systemctl start docker4. Utiliser Docker sans sudo (optionnel)
Par défaut, les commandes Docker nécessitent sudo. Pour votre utilisateur non-root :
usermod -aG docker $USER
newgrp dockerAjouter un utilisateur au groupe docker lui donne des droits équivalents à root sur le système (il peut monter n'importe quel dossier dans un conteneur). Ne faites ça que pour des utilisateurs de confiance.
5. Commandes Docker essentielles
# Télécharger une image depuis Docker Hub
docker pull nginx:alpine
# Lancer un conteneur
docker run -d -p 80:80 --name mon-nginx nginx:alpine
# -d = détaché (arrière-plan)
# -p 80:80 = port local:port conteneur
# --name = nom du conteneur
# Voir les conteneurs en cours
docker ps
# Voir TOUS les conteneurs (y compris arrêtés)
docker ps -a
# Voir les logs d'un conteneur
docker logs mon-nginx
docker logs -f mon-nginx # -f = follow (en temps réel)
# Entrer dans un conteneur (shell interactif)
docker exec -it mon-nginx sh
# Arrêter un conteneur
docker stop mon-nginx
# Supprimer un conteneur
docker rm mon-nginx
# Voir les images locales
docker images
# Supprimer une image
docker rmi nginx:alpine
# Nettoyer tout ce qui n'est plus utilisé
docker system prune -a
# Voir l'utilisation des ressources en temps réel
docker stats6. Docker Compose : orchestrer plusieurs conteneurs
La plupart des applications ont besoin de plusieurs services : une base de données, un cache, l'application elle-même. Docker Compose permet de les définir dans un seul fichier docker-compose.yml et de tout démarrer d'une commande.
Exemple concret : une app Node.js + MongoDB + Redis :
mkdir ~/mon-app && cd ~/mon-app
nano docker-compose.ymlservices:
# Votre application Node.js
app:
image: node:20-alpine
working_dir: /app
volumes:
- ./src:/app # Votre code source monté en volume
ports:
- "3000:3000" # Port local:port conteneur
command: node server.js
depends_on:
- mongo
- redis
environment:
- NODE_ENV=production
- MONGO_URL=mongodb://mongo:27017/madb
- REDIS_URL=redis://redis:6379
restart: unless-stopped
# Base de données MongoDB
mongo:
image: mongo:7
volumes:
- mongo_data:/data/db # Volume persistant pour les données
restart: unless-stopped
# Cache Redis
redis:
image: redis:7-alpine
restart: unless-stopped
# Déclaration des volumes nommés
volumes:
mongo_data:Démarrez tout avec une seule commande :
docker compose up -dAutres commandes Compose :
# Voir l'état des services
docker compose ps
# Voir les logs de tous les services
docker compose logs -f
# Voir les logs d'un service spécifique
docker compose logs -f app
# Redémarrer un service
docker compose restart app
# Arrêter tous les services
docker compose down
# Arrêter ET supprimer les volumes (attention : supprime les données !)
docker compose down -v
# Reconstruire les images et relancer
docker compose up -d --build7. Les volumes : ne perdez pas vos données
Un conteneur est éphémère - si vous le supprimez, tout ce qui est dedans disparaît. Les volumes Docker persistent les données en dehors des conteneurs.
# Volume nommé (Docker gère l'emplacement)
docker volume create mes-donnees
docker volume ls
docker volume inspect mes-donnees
# Utiliser dans une commande docker run
docker run -d -v mes-donnees:/data postgres:16
# Bind mount (dossier précis de votre VPS)
docker run -d -v /home/user/data:/data postgres:16Sauvegardez vos volumes ! Un docker compose down -v supprime définitivement les volumes et toutes les données. Mettez en place des sauvegardes régulières de vos volumes critiques (bases de données, fichiers utilisateurs).
Docker est opérationnel. Vous pouvez maintenant déployer n'importe quelle application dockerisée en quelques minutes. Combinez Docker avec Nginx comme reverse proxy pour exposer vos conteneurs en HTTPS sur votre domaine.