Bilan de la mise en pratique de Docker

Préparation

À ce stade des nos manipulations, il est fort probable que la commande docker ps -a retourne un grand nombre de conteneurs sur votre machine. Avant de passer à un petit exercice de mise en pratique, il convient de supprimer tout les conteneurs existants, qui ne servent plus. Pour cela on peut simplement lancer :

1
docker rm -vf $(docker ps -a -q)

Sans rentrer dans les détails de la commande, elle va simplement lister les identifiants de touts les conteneurs et les passer en argument à une commande qui va les supprimer.

Base de données dans Docker

À l'aide des connaissances acquises et de la documentation de l'image postgres sur le Docker Hub, nous avons le nécessaire pour déployer une base de données PostgreSQL avec Docker sur la machine, tout en garantissant son isolement réseau et la persistance des données.

Question

Donnez les commandes permettant de déployer une base de données PostgreSQL :

  • se trouvant sur un réseau privé Docker nommé pg-net

  • persistant les données de la base sur le disque (les données ne doivent pas être perdues si l'on re-créé le conteneur) dans un dossier /root/bdd

  • avec un utilisateur snowden ayant un accès à une base prism avec le mot de passe nsa

Solution

Pour créer un réseau dédié, on utilise :

1
docker network create pg-net

Pour lancer notre conteneur, on utilise une commande similaire à celle-ci :

1
docker run -d --name pg-test -e POSTGRES_DB=prism -e POSTGRES_USER=snowden -e POSTGRES_PASSWORD=nsa -v /root/bdd:/var/lib/postgresql/data --net pg-net postgres

On lance un conteneur basé sur l'image postgres et nommé pg-test. On configure la base de donnée et l'utilisateur à l'aide de variables d'environnements passées via l'option -e.

Pour assurer la persistance des données, on monte le dossier /root/bdd dans le dossier /var/lib/postgresql/data, là où se trouve les données de PostgreSQL.

Enfin, on connecte le conteneur dans notre réseau à l'aide de l'option --net

Question

Donnez une commande simple à lancer pour valider que la base de donnée est bien accessible dans le réseau pg-net.

Indice

On peut utiliser un autre conteneur dans le même réseau pour se connecter à la base de données.

Solution

On lance un conteneur (basé sur postgres pour avoir la commande psql) dans le même réseau Docker et l'on tente d’accéder à la base de données.

1
$ docker run -it --net pg-net postgres psql -h pg-test -U snowden prism
2
Password for user snowden:
3
psql (11.1 (Debian 11.1-1.pgdg90+1))
4
Type "help" for help.
5
prism=#

Après nous avoir demandé le mot de passe, on arrive à se connecter à la base de donnée que l'on fait tourner dans un conteneur isolé.