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 -dAu 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 :
- Configuration du site : choisissez un nom, la langue, créez votre compte administrateur.
- Base de données : hôte
db, utilisateurjoomla, mot de passejoomla, basejoomla. Ce sont exactement les valeurs du Compose. - Finalisation : cliquez sur Installer, Joomla crée les tables.
- 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 directementCré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.