Développer en local avec PostgreSQL et pgAdmin avec Docker-Compose

Développer en local avec PostgreSQL et pgAdmin avec Docker-Compose : Utilisez le fichier docker-compose.yml de cet article puis commencez à utiliser votre base de données PostgreSQL.

Image docker-compose PostgreSQL pgAdmin

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: admin@local.com
      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 admin@local.com et le mot de passe est admin

Explications à propos de l’image docker-compose PostgreSQL pgAdmin :

  • 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. N’hésitez pas à changer cette valeur si ce port est déjà utilisé sur votre machine.
  • 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]
  • Vous pouvez changer la valeur du [port_hôte] selon vos besoins.
  • 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.

Sur le même thème :