1. Introduction
Dans ce tutoriel, nous allons apprendre comment exécuter PostgreSQL dans un conteneur Docker. Cette technique facilite la configuration de postgres. Par conséquent, c’est une solution idéale pour les environnements de développement et de test.
Commençons.
2. Prérequis
Tout d’abord, assurons-nous que Docker est installé et en cours d’exécution sur notre machine. Si ce n’est pas le cas, suivons le guide d’installation officiel de Docker pour le configurer.
Ensuite, téléchargeons l’image Docker PostgreSQL depuis Docker Hub :
docker pull postgres:latest
Cette commande récupère la dernière version de l’image PostgreSQL. Alternativement, nous pouvons spécifier une version particulière en remplaçant latest par le tag souhaité (par exemple, 13.2). Nous pouvons trouver tous les tags disponibles sur la page Docker Hub de PostgreSQL.
3. Démarrer un conteneur PostgreSQL
Pour démarrer un conteneur PostgreSQL, exécutez la commande suivante :
docker run --name my-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
Décomposons cette commande :
- –name my-postgres: Attribue un nom au conteneur.
- -e POSTGRES_PASSWORD=mysecretpassword: Définit le mot de passe pour l’utilisateur par défaut postgres.
- -d: Exécute le conteneur en mode détaché. Cela signifie que le conteneur démarre en arrière-plan.
- postgres: Spécifie l’image Docker à utiliser. Dans ce cas, nous allons utiliser la dernière version.
4. Accéder à l’instance PostgreSQL
Maintenant, nous devrions avoir une instance de PostgreSQL à l’intérieur d’un conteneur nommé my-postgres. Par conséquent, nous ne pouvons pas utiliser la commande psql directement depuis notre terminal car elle ne sera pas disponible. À la place, nous pouvons utiliser la commande docker exec pour accéder à l’instance PostgreSQL à l’intérieur du conteneur :
docker exec -it my-postgres psql -U postgres
Maintenant, nous devrions avoir un shell que nous pouvons utiliser pour interagir avec la base de données.
Nous n’accédons généralement pas à la base de données directement. Mais, en ce moment, c’est la seule façon d’accéder à la base de données.
Configurons le conteneur pour qu’il expose la base de données à l’hôte.
5. Configurer le conteneur PostgreSQL
Pour se connecter depuis la machine hôte, nous devons configurer le conteneur afin qu’il expose le port de la base de données. Pour ce faire, nous pouvons utiliser l’option –publish ou -p pour mapper le port du conteneur à un port de l’hôte :
docker run --name my-postgres -e POSTGRES_PASSWORD=mysecretpassword -p 5432:5432 -d postgres
Nous aurons maintenant accès à la base de données depuis la machine hôte si nous nous connectons à localhost:5432. De plus, nous avons défini le mot de passe pour l’utilisateur postgres afin que nous puissions utiliser un client de base de données, tel que DBeaver, pour nous connecter à la base de données.
Essayer de mémoriser ces commandes peut être difficile. À la place, nous pourrions utiliser un fichier docker-compose.yml pour définir notre conteneur. Ce faisant, nous pouvons également partager la configuration avec notre équipe.
Arrêtons-nous et supprimons le conteneur actuel :
docker stop my-postgres
docker rm my-postgres
Maintenant, nous pouvons créer notre fichier docker-compose.yml.
6. Utilisation de Docker Compose
Un docker-compose est simplement une description de fichier des conteneurs que nous souhaitons exécuter au format YAML.
Créons un fichier docker-compose.yml pour le conteneur Postgresql :
version: '3.1'
services:
db:
image: postgres
restart: always
environment:
POSTGRES_PASSWORD: mysecretpassword
ports:
- 5432:5432
Au-dessus, nous définissons un service nommé db avec des configurations similaires à celles d’avant. La seule nouveauté ici est l’option de redémarrage. En résumé, nous indiquons à Docker de redémarrer automatiquement le conteneur s’il s’arrête, par exemple, en raison d’une erreur ou d’un redémarrage du système.
Exécutons le conteneur en utilisant la commande docker-compose depuis le même répertoire où nous avons enregistré ce fichier :
docker-compose up -d
Encore une fois, nous utilisons l’option -d pour exécuter le conteneur en mode détaché.
Pour arrêter et supprimer le conteneur, nous pouvons utiliser la commande docker-compose down :
docker-compose down
Maintenant, nous savons comment créer facilement une base de données locale en utilisant Docker. Mais n’oublions pas, ceci n’est pas adapté pour la production.
Nous devons prendre en compte d’autres éléments pour notre environnement de production.
Si nous en avons l’occasion, nous devrions opter pour un service de base de données géré—par exemple, Amazon RDS, Google Cloud SQL, ou Azure Database for PostgreSQL.
7. Persistance des données du conteneur PostgreSQL
Avec la configuration actuelle, si nous supprimons le conteneur PostgreSQL, nous perdons également les données qu’il contient. Pour persister les données, nous pouvons monter un dossier local dans le conteneur en utilisant l’option –volume ou -v. Par exemple :
docker run --name my-postgres -e POSTGRES_PASSWORD=mysecretpassword -v /path/to/local/folder:/var/lib/postgresql/data -d postgres
En résumé, les données PostgreSQL utiliseront le dossier path/to/local/folder pour son contenu. Donc, si nous supprimons le conteneur et le recréons avec le même volume, les données seront toujours présentes.
8. Conclusion
Dans ce tutoriel, nous avons appris comment exécuter et configurer PostgreSQL dans un conteneur Docker. Nous avons d’abord montré une commande rapide pour avoir une instance de la base de données en cours d’exécution. Ensuite, nous avons utilisé un fichier docker-compose.yml pour définir le conteneur. Enfin, nous avons discuté de la persistance des données en montant un dossier local dans le conteneur.