Linux

Docker Compose — Stack complète

Déployer Nextcloud, ownCloud et WordPress (avec leurs bases de données) via un fichier docker-compose.yml.

← Retour aux tutoriels Linux
📚 C'est quoi Docker Compose ? Docker Compose est un outil qui permet de lancer plusieurs containers Docker en même temps à partir d'un seul fichier de configuration (docker-compose.yml). Au lieu de taper plein de commandes docker run, vous décrivez tous vos services dans un fichier YAML et vous lancez tout avec docker compose up. C'est idéal pour des applications qui ont besoin de plusieurs services (par ex. un site web + sa base de données).
ⓘ Environnement de travail Ce tuto est réalisé dans un environnement de test sous WSL (Windows Subsystem for Linux) avec VS Code comme éditeur. Docker Desktop doit être installé sur Windows avec l'intégration WSL activée.
# Ouvrir un terminal WSL dans VS Code (Ctrl + `)
docker --version
docker compose version
⚠ Adaptez à votre réseau Les ports utilisés dans ce tuto (8081, 8082, 8083) doivent être libres sur votre machine. Si vous travaillez depuis WSL, accédez aux services via http://localhost:PORT. Si vous êtes sur un réseau avec d'autres machines, remplacez localhost par l'IP de votre machine Windows.

Créer le répertoire du projet

Schéma de l'architecture

📦 Architecture Docker Compose — 3 stacks ┌──────────────── Docker Host ────────────────┐ │ │ │ ┌───────────┐ ┌───────────┐ ┌─────────┐ │ │ │ Nextcloud │ │ ownCloud │ │WordPress│ │ │ │ :8081 │ │ :8082 │ │ :8083 │ │ │ └─────┬─────┘ └─────┬─────┘ └────┬────┘ │ │ │ │ │ │ │ ┌─────▼─────┐ ┌─────▼─────┐ ┌────▼────┐ │ │ │ MariaDB │ │ MariaDB │ │MariaDB │ │ │ │ (next-db) │ │ (own-db) │ │(wp-db) │ │ │ └───────────┘ └───────────┘ └─────────┘ │ │ │ │ Volumes : ./next-data, ./own-data, ./wp-* │ └─────────────────────────────────────────────┘ Accès : http://localhost:8081 / 8082 / 8083

On crée un dossier dédié. Tous les volumes seront stockés dans ce même dossier pour s'y retrouver facilement depuis VS Code.

mkdir -p ~/docker-stack
cd ~/docker-stack
code .

La commande code . ouvre le dossier directement dans VS Code.

Créer le fichier docker-compose.yml

Ce fichier contient 3 stacks : Nextcloud, ownCloud et WordPress, chacune avec sa base de données MariaDB. Les volumes sont en ./ (chemin relatif) pour rester dans le dossier du projet.

Créez le fichier docker-compose.yml dans VS Code :

services:

  # ========================
  #  NEXTCLOUD
  # ========================
  nextcloud-db:
    image: mariadb:10.11
    container_name: nextcloud-db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: Password
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: nextcloud
      MYSQL_PASSWORD: Password
    volumes:
      - ./data/nextcloud-db:/var/lib/mysql

  nextcloud:
    image: nextcloud:latest
    container_name: nextcloud
    restart: unless-stopped
    ports:
      - "8081:80"
    environment:
      MYSQL_HOST: nextcloud-db
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: nextcloud
      MYSQL_PASSWORD: Password
    volumes:
      - ./data/nextcloud:/var/www/html
    depends_on:
      - nextcloud-db

  # ========================
  #  OWNCLOUD
  # ========================
  owncloud-db:
    image: mariadb:10.11
    container_name: owncloud-db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: Password
      MYSQL_DATABASE: owncloud
      MYSQL_USER: owncloud
      MYSQL_PASSWORD: Password
    volumes:
      - ./data/owncloud-db:/var/lib/mysql

  owncloud:
    image: owncloud/server:latest
    container_name: owncloud
    restart: unless-stopped
    ports:
      - "8082:8080"
    environment:
      OWNCLOUD_DOMAIN: localhost:8082
      OWNCLOUD_DB_TYPE: mysql
      OWNCLOUD_DB_HOST: owncloud-db
      OWNCLOUD_DB_NAME: owncloud
      OWNCLOUD_DB_USERNAME: owncloud
      OWNCLOUD_DB_PASSWORD: Password
      OWNCLOUD_ADMIN_USERNAME: admin
      OWNCLOUD_ADMIN_PASSWORD: Password
    volumes:
      - ./data/owncloud:/mnt/data
    depends_on:
      - owncloud-db

  # ========================
  #  WORDPRESS
  # ========================
  wordpress-db:
    image: mariadb:10.11
    container_name: wordpress-db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: Password
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: Password
    volumes:
      - ./data/wordpress-db:/var/lib/mysql

  wordpress:
    image: wordpress:latest
    container_name: wordpress
    restart: unless-stopped
    ports:
      - "8083:80"
    environment:
      WORDPRESS_DB_HOST: wordpress-db
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: Password
    volumes:
      - ./data/wordpress:/var/www/html
    depends_on:
      - wordpress-db
💡 Pourquoi ./data/ et pas des volumes nommés ? En utilisant des chemins relatifs (./data/nextcloud, etc.), toutes les données sont visibles directement dans votre explorateur VS Code. C'est beaucoup plus pratique pour débugger, éditer des configs ou comprendre la structure en environnement de test.

Structure du dossier après lancement

docker-stack/
├── docker-compose.yml
└── data/
    ├── nextcloud/          # Fichiers Nextcloud
    ├── nextcloud-db/       # Base de données Nextcloud
    ├── owncloud/           # Fichiers ownCloud
    ├── owncloud-db/        # Base de données ownCloud
    ├── wordpress/          # Fichiers WordPress
    └── wordpress-db/       # Base de données WordPress

Lancer la stack

# Lance TOUS les services définis dans docker-compose.yml
# -d = mode détaché (arrière-plan) — vous gardez le terminal libre
# Docker télécharge les images automatiquement si elles ne sont pas déjà présentes
docker compose up -d

Docker va télécharger les images et démarrer tous les containers. Le dossier data/ sera créé automatiquement.

Vérifier que tout tourne

# Affiche l'état de tous les services de la stack
# Tous doivent être "Up" (en marche)
docker compose ps

Tous les services doivent être en état Up.

Accéder aux applications

⚠ Adaptez l'adresse selon votre situation
  • Depuis votre PC Windows (WSL) : utilisez http://localhost:PORT
  • Depuis un autre poste sur le réseau : utilisez http://IP_DE_VOTRE_PC:PORT
Pour trouver votre IP Windows : ouvrez PowerShell et tapez ipconfig.
Application URL (depuis votre PC) Port
Nextcloud http://localhost:8081 8081
ownCloud http://localhost:8082 8082
WordPress http://localhost:8083 8083

Commandes utiles

# Affiche les logs d'un service spécifique
docker compose logs nextcloud

# -f = "follow" : affiche les logs en temps réel (Ctrl+C pour arrêter)
docker compose logs -f wordpress

# Arrête tous les containers de la stack (les données sont conservées dans ./data/)
docker compose down

# Arrête ET supprime les volumes (ATTENTION : toutes les données sont perdues !)
docker compose down -v
rm -rf ./data

# Redémarre un seul service sans toucher aux autres
docker compose restart nextcloud
✔ Résultat Vous avez 3 applications (Nextcloud, ownCloud, WordPress) qui tournent sur le même serveur, chacune avec sa propre base de données. Les données sont dans ./data/, visible directement dans VS Code.