Installer Docker sur Ubuntu : Guide complet 2026

Docker Engine + Docker Compose v2 sur Ubuntu 24.04 LTS — la méthode officielle apt, configuration post-installation, commandes essentielles et bonnes pratiques de production.

Installer Docker sur Ubuntu : Guide complet 2026

Docker est le moteur de conteneurisation qui propulse toute l'infrastructure BOTUM. Dans ce guide complet 2026, je vous montre comment installer Docker Engine et Docker Compose v2 sur Ubuntu 24.04 LTS selon la méthode officielle — la seule vraiment fiable.

Pourquoi Docker ? Les concepts clés

Docker est une plateforme de conteneurisation qui empaquette une application et toutes ses dépendances dans un conteneur portable et isolé. Contrairement aux VMs qui virtualisent le matériel, les conteneurs partagent le kernel Linux de l'hôte — ils démarrent en secondes et consomment beaucoup moins de ressources.

  • Image Docker : instantané immuable d'une application et ses dépendances
  • Conteneur : instance en cours d'exécution d'une image
  • Docker Hub : registre public d'images (ghost, nginx, postgres, etc.)
  • Docker Compose : orchestration multi-conteneurs via un fichier YAML
  • Volume : stockage persistant monté dans un conteneur
  • Network : réseau virtuel entre conteneurs
Architecture Docker
Schéma de l'architecture Docker : daemon, images, conteneurs

Installation Docker Engine — Méthode officielle apt

⚠️ N'utilisez pas 'snap install docker' ni le docker du dépôt Ubuntu par défaut — ces versions sont souvent obsolètes. Utilisez le dépôt officiel Docker Inc. :

# 1. Supprimer les éventuelles anciennes versions
sudo apt remove -y docker docker-engine docker.io containerd runc 2>/dev/null || true

# 2. Mettre à jour et installer les prérequis
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release

# 3. Ajouter la clé GPG officielle Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg   | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# 4. Ajouter le dépôt officiel Docker
echo "deb [arch=$(dpkg --print-architecture)   signed-by=/etc/apt/keyrings/docker.gpg]   https://download.docker.com/linux/ubuntu   $(. /etc/os-release && echo $VERSION_CODENAME) stable"   | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 5. Installer Docker Engine + Docker Compose v2
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io                     docker-buildx-plugin docker-compose-plugin

# 6. Vérifier l'installation
docker --version
docker compose version
sudo docker run hello-world

Configuration post-installation

Par défaut, seul root peut exécuter les commandes Docker. Ajoutez votre utilisateur au groupe docker pour éviter de taper sudo à chaque fois :

# Ajouter l'utilisateur courant au groupe docker
sudo usermod -aG docker $USER

# Appliquer les changements (sans logout)
newgrp docker

# Vérifier que ça fonctionne sans sudo
docker ps

# Activer Docker au démarrage (normalement déjà fait)
sudo systemctl enable docker
sudo systemctl start docker
sudo systemctl status docker

Commandes Docker essentielles

Voici les commandes Docker que vous utiliserez tous les jours en production :

# Gestion des conteneurs
docker ps                         # Lister les conteneurs actifs
docker ps -a                      # Tous les conteneurs (y compris arrêtés)
docker run -d -p 8080:80 nginx    # Démarrer nginx en arrière-plan
docker stop mon-conteneur         # Arrêter un conteneur
docker start mon-conteneur        # Démarrer un conteneur arrêté
docker restart mon-conteneur      # Redémarrer
docker rm mon-conteneur           # Supprimer un conteneur arrêté
docker exec -it mon-conteneur bash # Shell interactif dans un conteneur

# Gestion des images
docker images                     # Lister les images locales
docker pull nginx:latest          # Télécharger une image
docker rmi nginx:latest           # Supprimer une image

# Logs et monitoring
docker logs mon-conteneur         # Afficher les logs
docker logs -f mon-conteneur      # Suivre les logs en temps réel
docker logs --tail 50 mon-conteneur # 50 dernières lignes
docker stats                      # Utilisation CPU/RAM en temps réel
docker inspect mon-conteneur      # Détails complets
Exemple docker-compose.yml
Structure d'un fichier docker-compose.yml multi-services

Docker Compose — Orchestration multi-services

Docker Compose est l'outil qui permet de définir et démarrer plusieurs conteneurs en un seul fichier YAML. C'est la fondation de tout déploiement Docker en production.

# Exemple docker-compose.yml — Application web + base de données
version: '3.8'

services:
  # Service web (nginx + app)
  webapp:
    image: nginx:alpine
    container_name: mon-site
    restart: unless-stopped
    ports:
      - "8080:80"           # Port générique — adapter selon vos besoins
    volumes:
      - ./html:/usr/share/nginx/html:ro
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
    networks:
      - app-network
    depends_on:
      - database

  # Base de données
  database:
    image: postgres:16-alpine
    container_name: mon-db
    restart: unless-stopped
    environment:
      POSTGRES_DB: mabase
      POSTGRES_USER: monuser
      POSTGRES_PASSWORD: monmotdepasse  # Utiliser un .env en production
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - app-network

volumes:
  db-data:

networks:
  app-network:
    driver: bridge
# Commandes Docker Compose essentielles
cd /chemin/vers/docker-compose.yml

docker compose up -d        # Démarrer tous les services en arrière-plan
docker compose down         # Arrêter et supprimer les conteneurs
docker compose down -v      # + supprimer les volumes (⚠️ données perdues)
docker compose ps           # Statut des services
docker compose logs -f      # Logs de tous les services
docker compose logs -f webapp # Logs d'un service spécifique
docker compose pull         # Mettre à jour toutes les images
docker compose up -d        # Redéployer après pull
docker compose restart webapp # Redémarrer un service unique

Variables d'environnement et fichier .env

Ne jamais mettre de mots de passe en dur dans docker-compose.yml. Utilisez un fichier .env à côté du docker-compose.yml :

# Fichier .env (JAMAIS commité dans git)
POSTGRES_PASSWORD=MonMotDePasseSecurise2026
APP_SECRET_KEY=cle-secrete-aleatoire
DOMAIN=monapp.example.com

# Dans docker-compose.yml, référencer avec ${VARIABLE} :
environment:
  POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
  APP_KEY: ${APP_SECRET_KEY}

# Ajouter .env dans .gitignore :
echo ".env" >> .gitignore

Volumes Docker — Persistance des données

Les volumes Docker sont essentiels pour que vos données survivent au redémarrage ou à la mise à jour des conteneurs. Il existe deux types principaux :

  • Bind mount : lie un dossier de l'hôte au conteneur — ex: ./data:/var/data
  • Named volume : géré par Docker, stocké dans /var/lib/docker/volumes/
  • Bind mounts recommandés pour : fichiers de config, données à sauvegarder facilement
  • Named volumes recommandés pour : bases de données, données volumineuses
# Inspecter les volumes Docker
docker volume ls
docker volume inspect mon-volume

# Sauvegarde d'un volume nommé
docker run --rm   -v mon-volume:/data   -v $(pwd):/backup   alpine tar czf /backup/mon-volume-$(date +%Y%m%d).tar.gz /data

# Restauration d'un volume
docker run --rm   -v mon-volume:/data   -v $(pwd):/backup   alpine tar xzf /backup/mon-volume-20260312.tar.gz -C /
Conteneurs Docker en cours d'exécution
docker ps — vue des conteneurs actifs en production

Networks Docker — Communication entre conteneurs

Par défaut, les conteneurs sont isolés. Pour qu'ils communiquent, ils doivent être sur le même réseau Docker. Le bridge par défaut fonctionne pour les tests, mais en production créez des réseaux dédiés :

# Créer un réseau dédié
docker network create mon-app-network

# Connecter des conteneurs au réseau
docker network connect mon-app-network conteneur1
docker network connect mon-app-network conteneur2

# Dans docker-compose.yml (méthode recommandée) :
# Les services du même compose file se voient par leur nom de service
# Ex: webapp peut atteindre database en HTTP via http://database:5432

# Inspecter les réseaux
docker network ls
docker network inspect mon-app-network

Mise à jour des conteneurs en production

La mise à jour d'un service Docker se fait en quelques commandes sans interruption majeure :

# Méthode standard avec Docker Compose :
cd /chemin/vers/votre/app

# Télécharger les nouvelles images
docker compose pull

# Redéployer avec les nouvelles images (downtime minimal)
docker compose up -d

# Vérifier que tout tourne
docker compose ps
docker compose logs --tail 20

# Supprimer les anciennes images inutilisées
docker image prune -f

Conclusion et prochaines étapes

Docker et Docker Compose sont maintenant installés et configurés sur votre Ubuntu Server. Vous avez les bases pour déployer n'importe quel service de cette série. Dans le prochain article, nous installons Zoraxy — notre reverse proxy SSL qui exposera ces services à Internet de façon sécurisée.


📥 Guide PDF complet

Téléchargez ce guide en PDF pour le consulter hors ligne.

⬇ Télécharger le guide (PDF)

🚀 Aller plus loin avec BOTUM

Ce guide couvre les bases. En production, chaque environnement a ses spécificités. Les équipes BOTUM accompagnent les organisations dans le déploiement, la configuration avancée et la sécurisation de leur infrastructure. Si vous avez un projet, parlons-en.

Discuter de votre projet →
📋 Série Infrastructure Proxmox : Voir la série complète →
Série Infrastructure Proxmox