PostgreSQL avec Docker
Introduction
Docker est une plateforme permettant de développer, déployer et exécuter des applications dans des conteneurs. Les conteneurs sont des environnements légers, autonomes et exécutables qui embarquent tout ce dont une application a besoin pour fonctionner : le code, le runtime, les outils système, les bibliothèques et les paramètres.
Ce guide vous aidera à configurer une base de données PostgreSQL avec Docker, ce qui est particulièrement pratique par rapport à une installation traditionnelle car vous pourrez exécuter la base de données dans un environnement isolé, sans avoir à l'installer directement sur votre machine.
Objectifs d'apprentissage :
- Comprendre les bases de Docker et Docker Compose
- Configurer un conteneur PostgreSQL avec variables d'environnement
- Utiliser un script d'initialisation pour créer des tables
- Accéder et interagir avec PostgreSQL via psql
Prérequis & Installation
Connaissances préalables
- Notions de base en ligne de commande
- Concepts SQL de base (optionnel mais utile)
Outils requis
| Outil | Version | Lien | Description |
|---|---|---|---|
| Docker Desktop | Dernière | docker.com | Plateforme de conteneurisation |
| Éditeur de code | - | VS Code, etc. | Pour éditer les fichiers de config |
Installation de Docker
Docker est disponible pour Windows, macOS et Linux. Téléchargez l'installeur depuis le site officiel et suivez les instructions d'installation.
Vérification
docker --version
docker-compose --version
Configuration du conteneur PostgreSQL
Docker Compose est un outil permettant de définir et d'exécuter des applications multi-conteneurs Docker. Avec Compose, vous utilisez un fichier YAML pour configurer les services de votre application.
Structure du projet
Créez un répertoire database et ajoutez-y trois fichiers :
database/
├── docker-compose.yml # Configuration Docker Compose
├── .env # Variables d'environnement
└── init.sql # Script d'initialisation
Fichier docker-compose.yml
services:
db:
image: postgres:alpine
restart: always
hostname: ${DB_HOST}
env_file:
- .env
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: ${DB_NAME}
volumes:
- ./db:/var/lib/postgresql/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
ports:
- ${DB_PORT}:5432
volumes:
data:
Fichier .env
DB_HOST=localhost
DB_USER=postgres
DB_PASSWORD=postgres
DB_NAME=mydatabase
DB_PORT=5432
Ne commitez jamais le fichier .env dans un dépôt public ! Ajoutez-le à .gitignore.
Fichier init.sql
\c mydatabase
CREATE TABLE customer (id SERIAL PRIMARY KEY, name VARCHAR(50));
INSERT INTO customer (name) VALUES ('Alice');
INSERT INTO customer (name) VALUES ('Bob');
Explications de la configuration
Fichiers :
docker-compose.yml: Définit la configuration du conteneur.env: Variables d'environnement (nom, utilisateur, mot de passe, port)init.sql: Script SQL exécuté au démarrage, créant une tablecustomeret insérant deux lignes
Configuration Docker :
image: postgres:alpine: Exécute PostgreSQL sur un OS Alpine (léger)restart: always: Redémarre automatiquement le conteneur s'il s'arrêtehostname: Nom d'hôte du conteneurenv_file: Chemin du fichier des variables d'environnementenvironment: Variables d'environnement pour PostgreSQLvolumes:db: Stocke les données de façon persistanteinit.sql: Sera exécuté au premier démarrage
ports: Port exposé pour accéder à la base (icilocalhost:5432)
Démarrer le conteneur PostgreSQL
Placez-vous dans le répertoire database et exécutez :
docker-compose up -d
Cette commande crée et démarre le conteneur PostgreSQL en arrière-plan.
Vérifier que le conteneur est en cours d'exécution
docker ps
Vous devriez voir un conteneur postgres en cours d'exécution. Dans la colonne "NAMES", notez le nom du conteneur (probablement database-db-1 si votre dossier s'appelle database).
Accéder à la base de données PostgreSQL
Maintenant que la base de données est démarrée, connectez-vous manuellement avec l'outil en ligne de commande psql :
docker exec -it database-db-1 psql -U postgres
Remplacez database-db-1 par le nom réel de votre conteneur si vous n'avez pas nommé votre répertoire de travail database.
Commandes psql utiles
Une fois connecté à PostgreSQL, vous pouvez exécuter des requêtes SQL :
Lister les bases de données :
\l
Se connecter à une base de données :
\c mydatabase
Lister les éléments de la table customer :
SELECT * FROM customer;
Vous devriez voir les deux entrées créées par le script d'initialisation (Alice et Bob).
Quitter psql :
\q
Arrêter et nettoyer
Arrêter le conteneur
docker-compose down
Supprimer les données persistantes
Les données sont conservées dans le répertoire db/. Pour effacer complètement les données :
rm -rf db/
Supprimez le dossier db/ si vous modifiez le fichier init.sql et souhaitez réinitialiser la base avec de nouvelles données.
Bonnes pratiques
- Variables d'environnement : Ne jamais exposer les mots de passe en clair, utilisez
.envet.gitignore - Volumes nommés : Pour la production, préférez les volumes Docker nommés plutôt que les bind mounts
- Sauvegarde des données : Pensez à sauvegarder régulièrement votre dossier
db/ - Logs : Consultez les logs avec
docker logs database-db-1en cas de problème
Ressources
- Commandes PostgreSQL - Liste de commandes et bonnes pratiques
- Documentation Docker Compose - Guide officiel
- PostgreSQL Documentation - Documentation complète
- Docker PostgreSQL Image - Documentation de l'image officielle