Créer le fichier docker-compose.yml

# Créer un dossier : 
$ mkdir docker-pgsql-pgAdmin && cd docker-pgsql-pgAdmin

# 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.8"
services:
  db:
    image: postgres
    container_name: local_pgdb
    restart: always
    ports:
      - "6032:5432"
    environment:
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: admin
    volumes:
      - local_pgdata:/var/lib/postgresql/data
  pgadmin:
    image: dpage/pgadmin4
    container_name: pgadmin4_container
    restart: always
    ports:
      - "6081:80"
    environment:
      PGADMIN_DEFAULT_EMAIL: [email protected]
      PGADMIN_DEFAULT_PASSWORD: admin
    volumes:
      - pgadmin-data:/var/lib/pgadmin

volumes:
  local_pgdata:
  pgadmin-data:

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

Une fois vos containers démarrés, vous pouvez vous connecter à pgAdmin à l’aide de votre navigateur Web à l’adresse http://localhost:6081
L’E-Mail de connexion et le mot de passe sont ceux définis dans la section pgadmin. Dans notre cas c’est [email protected] et le mot de passe est admin

Explications :

  • version: « 3.8 » -> détermine la version du fichier compose, plus d’infos sur Compose and Docker compatibility matrix.
  • Section services :
  • On définit 2 services -> postgresql et pgadmin
  • container_name -> est utilisé pour définir le nom d’un container. Dans notre exemple, ce sera local_pgdb et pgadmin4_container
  • 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 pgadmin, le port 80 du container sera joignable sur le port 6081 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 local_pgdata dans le dossier /var/lib/postgresql/data du container afin de stocker la base de données et persister les données lorsque le container est éteint.
    De la même manière, afin de stocker les informations de connexion de pgAdmin, nous créons le volume pgadmin-data pour le service pgadmin.

TL;DR :

  • 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.