Pendant longtemps, j'ai monté mes sites Joomla localement avec WAMP et MAMP quand je suis passé sous macOS. Ça marchait. Jusqu'au jour où le serveur de prod tournait sur une version de PHP différente, et la mise en ligne virait au cauchemar. Docker m'a réglé ce problème définitivement. Voici comment je monte un Joomla 5 ou 6 en local en moins de dix minutes, sans rien installer sur ma machine à part Docker / Orbstack pour Mac.

Docker, c'est quoi concrètement ?

En gros, Docker fait tourner des applications dans des conteneurs — des boîtes isolées qui embarquent tout ce dont l'app a besoin : PHP, Apache, MariaDB. Pas besoin que ça soit installé sur votre machine. Et contrairement à une VM, un conteneur démarre en quelques secondes.

Quatre notions à retenir :

  • Image — le modèle (ex : joomla:5-php8.2-apache). On la télécharge une fois depuis Docker Hub.
  • Conteneur — une instance qui tourne à partir de cette image.
  • docker-compose.yml — le fichier qui décrit et orchestre plusieurs conteneurs. C'est lui qu'on va écrire.
  • Volume — un espace de stockage qui persiste même quand le conteneur est arrêté. Sans ça, vous perdez tout à chaque redémarrage.

Pour Joomla, on aura deux conteneurs : un pour Apache + PHP + Joomla, un pour MariaDB. Docker Compose s'occupe de les faire démarrer dans le bon ordre et de les faire communiquer.

Ce qu'il faut avant de commencer

  • Docker Desktop installé (Mac, Windows, Linux) — il inclut Docker Compose
  • Un terminal
  • C'est tout. Pas de PHP, pas d'Apache, pas de MySQL à installer.

Le fichier docker-compose.yml

Créez un dossier pour votre projet, et posez ce fichier dedans :

services:

  joomla:
    image: joomla:5-php8.2-apache
    ports:
      - "8080:80"
    environment:
      JOOMLA_DB_HOST: db
      JOOMLA_DB_USER: joomla
      JOOMLA_DB_PASSWORD: joomla
      JOOMLA_DB_NAME: joomla
    volumes:
      - joomla_data:/var/www/html
    depends_on:
      db:
        condition: service_healthy
    restart: unless-stopped

  db:
    image: mariadb:lts
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: joomla
      MYSQL_USER: joomla
      MYSQL_PASSWORD: joomla
    volumes:
      - db_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      start_period: 10s
      interval: 5s
      timeout: 5s
      retries: 5
    restart: unless-stopped

  phpmyadmin:
    image: phpmyadmin:latest
    ports:
      - "8081:80"
    environment:
      PMA_HOST: db
      PMA_USER: root
      PMA_PASSWORD: root
    depends_on:
      - db
    restart: unless-stopped

volumes:
  joomla_data:
  db_data:

Quelques détails importants sur ce fichier : le healthcheck sur MariaDB garantit que la base est vraiment prête avant que Joomla tente de s'y connecter. Sans ça, Joomla démarre trop tôt et plante. Le depends_on avec condition: service_healthy gère ça proprement.

Joomla 6

Pour Joomla 6, changez juste le tag de l'image : joomla:6-php8.4-apache. Le reste du fichier ne change pas.

Démarrer les conteneurs

Dans votre dossier projet, une seule commande :

docker compose up -d

Au premier lancement, Docker télécharge les images (quelques centaines de Mo). Les fois suivantes, c'est quasi instantané. Le -d lance tout en arrière-plan et vous rend la main dans le terminal.

Installer Joomla

Ouvrez http://localhost:8080. L'installeur Joomla s'affiche. Voilà les valeurs à saisir :

  1. Configuration du site : choisissez un nom, la langue, créez votre compte administrateur.
  2. Base de données : hôte db, utilisateur joomla, mot de passe joomla, base joomla. Ce sont exactement les valeurs du Compose.
  3. Finalisation : cliquez sur Installer, Joomla crée les tables.
  4. Supprimez le dossier d'installation quand Joomla vous le demande (il y a un bouton), puis allez sur http://localhost:8080/administrator.

Modifier les fichiers depuis votre éditeur

Par défaut, les fichiers Joomla sont dans un volume Docker nommé — difficile à atteindre depuis VS Code ou PhpStorm. Si vous développez un template ou un composant, remplacez le volume par un bind mount :

volumes:
  - ./www:/var/www/html   # dossier local, éditable directement

Créez le dossier www/ avant de lancer les conteneurs. Joomla s'installera dedans et tous vos fichiers seront accessibles depuis votre machine.

Les commandes du quotidien

# Démarrer
docker compose up -d

# Arrêter (données conservées)
docker compose down

# Tout remettre à zéro (supprime les volumes)
docker compose down -v

# Suivre les logs de Joomla en direct
docker compose logs -f joomla

# Ouvrir un shell dans le conteneur Joomla
docker compose exec joomla bash

 

En dix minutes, vous avez un Joomla 5 ou 6 qui tourne en local, identique à ce que vous mettrez en production. Fini les surprises au déploiement parce que le serveur de prod tourne sur PHP 8.1 alors que vous étiez en 8.3. Un docker compose up, et tout le monde travaille dans le même contexte.