Pour s'appuyer sur la réponse d'irakli, voici une solution mise à jour :
- utiliser la version 2 du fichier Docker Compose plus récent
- volumes
volumes
rubrique - paramètres supplémentaires supprimés
docker-compose.yml
version: '2'
services:
postgres9:
image: postgres:9.4
expose:
- 5432
volumes:
- data:/var/lib/postgresql/data
volumes:
data: {}
démo
Démarrez le serveur de base de données Postgres :
$ docker-compose up
Afficher toutes les tables de la base de données. Dans un autre terminal, parlez au Postgres du conteneur :
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
Il ne montrera rien, car la base de données est vide. Créer un tableau :
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'create table beer()'
Lister la table nouvellement créée :
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+-----------+-------+-------------------+--------------------------
public | beer | table | |
Yay! Nous avons maintenant démarré une base de données Postgres en utilisant un volume de stockage partagé et y avons stocké des données. L'étape suivante consiste à vérifier que les données sont conservées après l'arrêt du serveur.
Maintenant, tuez le conteneur du serveur Postgres :
$ docker-compose stop
Redémarrez le conteneur Postgres :
$ docker-compose up
Nous nous attendons à ce que le serveur de base de données réutilise le stockage, donc nos données très importantes sont toujours là. Vérifier :
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+-----------+-------+-------------------+--------------------------
public | beer | table | |
Nous avons utilisé avec succès un nouveau style de fichier Docker Compose pour exécuter une base de données Postgres à l'aide d'un volume de données externe, et nous avons vérifié qu'il conserve nos données en toute sécurité.
stocker des données
Tout d'abord, faites une sauvegarde, en stockant nos données sur l'hôte :
$ docker exec -it $(docker-compose ps -q postgres9 ) pg_dump -Upostgres > backup.sql
Zapez nos données de la base de données des invités :
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'drop table beer'
Restaurez notre sauvegarde (stockée sur l'hôte) dans le conteneur Postgres.
Remarque : utilisez "exec -i", pas "-it", sinon vous obtiendrez une erreur "le périphérique d'entrée n'est pas un TTY".
$ docker exec -i $(docker-compose ps -q postgres9 ) psql -Upostgres < backup.sql
Listez les tables pour vérifier que la restauration a fonctionné :
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+-----------+-------+-------------------+--------------------------
public | beer | table | |
Pour résumer, nous avons vérifié que nous pouvons démarrer une base de données, les données persistent après un redémarrage et nous pouvons y restaurer une sauvegarde depuis l'hôte.
Merci Tomasz !