Créer le fichier docker-compose.yml

# Créer un dossier : 
$ mkdir docker-mongodb-mongoexpress && cd docker-mongodb-mongoexpress

# Créer le fichier docker-compose.yml :
$ touch docker-compose.yml

# Editer le fichier docker-compose.yml :
$ vim docker-compose.yml

# Ajouter le contenu suivant dans le fichier docker-compose.yml puis sauver et quitter l'éditeur de texte :
version: "3.7"

services:
  db:
    container_name: mongo-dev
    image: mongo:5.0
    environment:
      - MONGO_INITDB_ROOT_USERNAME=admin
      - MONGO_INITDB_DATABASE=auth
      - MONGO_INITDB_ROOT_PASSWORD=pass
    networks: 
      - mongo-compose-network
    ports:
      - '60017:27017'
    volumes: 
      - ./data:/data/db
  
  mongo-express:
    container_name: mongo-express
    image: mongo-express:0.54
    depends_on:
      - db
    networks: 
      - mongo-compose-network
    environment:
      - ME_CONFIG_MONGODB_SERVER=mongo-dev
      - ME_CONFIG_MONGODB_ADMINUSERNAME=admin
      - ME_CONFIG_MONGODB_ADMINPASSWORD=pass
      - ME_CONFIG_MONGODB_ENABLE_ADMIN=true
      - ME_CONFIG_BASICAUTH_USERNAME=admin
      - ME_CONFIG_BASICAUTH_PASSWORD=pass
    ports:
      - '6082:8081'
    volumes: 
      - ./data:/data/db      

networks:
  mongo-compose-network:
    driver: bridge

# Exécuter les containers :
$ docker compose up -d

Une fois vos containers démarrés, vous pouvez vous connecter à Mongo-Express à l’aide de votre navigateur Web à l’adresse http://localhost:6082
L’identifiant de connexion et le mot de passe sont ceux définis dans la section mongo-express. Dans notre cas c’est admin et le mot de passe est pass

Explications :

  • version: « 3.7 » -> détermine la version du fichier compose, plus d’infos sur Compose and Docker compatibility matrix.
  • Section services :
  • On définit 2 services -> db et mongo-express
  • container_name -> est utilisé pour définir le nom d’un container. Dans notre exemple, ce sera mongo-dev et mongo-express
  • restart: always -> Le container sera automatiquement redémarré quand le service Docker sera redémarré ou quand le container lui-même est redémarré.
  • ports -> utilisé pour définir le mapping de port entre le container et la machine hôte. Par exemple pour mongo-express, le port 8081 du container sera joignable sur le port 6082 de la machine hôte.
  • environment -> permet de définir des variables d’environnement pour un container donné.
  • volumes -> est utilisé pour monter un dossier de la machine hôte sur le container.
    Par exemple, pour le service db, on monte le volume ./data dans le dossier /data/db du container afin de stocker la base de données et persister les données lorsque le container est éteint.

TL;DR :

  • Le paramètre -d dans « docker-compose up -d » permet de lancer en mode daemon (vous récupérez la main dans le terminal après avoir lancé les containers).
  • Pour éteindre proprement, on utilise la commande : docker-compose down
  • Lorsqu’on définit un port, c’est toujours dans l’ordre [port_hôte]:[port_container]
  • L’utilisation des volumes Docker est recommandée pour persister des données. Ainsi, l’extinction de votre container ne sera pas synonyme de perte de vos données.
  • Pour mongo-express, j’ai utilisé l’image en version 0.54 car je n’arrivais pas à obtenir les statistiques du serveur avec la version latest.