Aller au contenu

Docker & PostgreSQL

Faire tourner l'application Django dans un conteneur Docker et la relier à une base PostgreSQL.


Créer une image Docker

Au niveau de manage.py, créer un fichier Dockerfile. Créer aussi un fichier .dockerignore.

Construire l'image :

$ docker build .

Création du fichier docker-compose.yml au niveau du Dockerfile :

$ docker-compose up

Application isolée

Notre serveur Django s'exécute dans un conteneur Docker autonome.

Pour arrêter le conteneur :

  • Ctrl-c
  • docker compose down

Créer la base de données PostgreSQL

Psycopg est l'adaptateur de PostgreSQL. Rajouter dans requirements.txt :

psycopg[binary]==3.1.12

Création d'un conteneur db pour notre base de données PostgreSQL.

Le webservice dépend du service de base de données à exécuter : ajouter une ligne appelée depends_on pour le signifier.

Mettre à jour la base de données dans settings.py au niveau de DATABASE.

S'assurer que les tables Django par défaut ont été créées :

$ docker-compose exec db psql --username=alex --dbname=pong_db

Pour faire tourner les deux conteneurs en mode détaché avec une seule commande :

$ docker-compose up -d --build

Pour afficher les images qui tournent :

$ docker images -a

Forcer l'arrêt de tous les conteneurs puis supprimer toutes les images :

$ docker stop $(docker ps -aq)
$ docker rmi -f $(docker images -q)

Utilisation de PostgreSQL

Vérifier qu'un conteneur est en route :

$ docker ps

Se connecter en root à PostgreSQL sur ligne de commande :

$ docker exec -it container_name bash

Pour accéder à PostgreSQL :

$ su - postgres
$ psql
psql (14.11 (Debian 14.11-1.pgdg120+2))
Type "help" for help.

postgres=#

Commandes utiles :

\conninfo       # Affiche l'état de la connexion.
\l              # Liste les bases de données.
\dt             # Liste les tables.
\q              # Quitte psql.

Accéder aux éléments d'une table de la base de données :

SELECT * FROM pong_player;

Arrêter le conteneur avant de le supprimer :

$ docker stop container_name
$ docker rm container_name