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.

bash
# 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 -y
💡

Sur 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 :

bash
docker --version docker compose version # Test classique : télécharge et exécute un conteneur hello-world docker run hello-world

Si vous voyez "Hello from Docker!", l'installation est réussie.

3. Activer Docker au démarrage

bash
systemctl enable docker systemctl start docker

4. Utiliser Docker sans sudo (optionnel)

Par défaut, les commandes Docker nécessitent sudo. Pour votre utilisateur non-root :

bash
usermod -aG docker $USER newgrp docker
⚠️

Ajouter 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

bash
# 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 stats

6. 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 :

bash
mkdir ~/mon-app && cd ~/mon-app nano docker-compose.yml
yaml
services: # 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 :

bash
docker compose up -d

Autres commandes Compose :

bash
# 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 --build

7. 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.

bash
# 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:16
⚠️

Sauvegardez 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.