Per basarsi sulla risposta di irakli, ecco una soluzione aggiornata:
- usa il file Docker Compose della versione 2 più recente
- Separare
volumes
sezione - impostazioni extra eliminate
docker-compose.yml
version: '2'
services:
postgres9:
image: postgres:9.4
expose:
- 5432
volumes:
- data:/var/lib/postgresql/data
volumes:
data: {}
dimostrazione
Avvia il server del database Postgres:
$ docker-compose up
Mostra tutte le tabelle nel database. In un altro terminale, parla con Postgres del container:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
Non mostrerà nulla, poiché il database è vuoto. Crea una tabella:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'create table beer()'
Elenca la tabella appena creata:
$ 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 | |
Sìì! Ora abbiamo avviato un database Postgres utilizzando un volume di archiviazione condiviso e archiviato alcuni dati in esso. Il passaggio successivo consiste nel verificare che i dati rimangano effettivamente presenti dopo l'arresto del server.
Ora, uccidi il contenitore del server Postgres:
$ docker-compose stop
Riavvia il container Postgres:
$ docker-compose up
Ci aspettiamo che il server del database riutilizzi lo spazio di archiviazione, quindi i nostri dati molto importanti sono ancora lì. Verifica:
$ 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 | |
Abbiamo utilizzato con successo un file Docker Compose di nuovo stile per eseguire un database Postgres utilizzando un volume di dati esterno e verificato che mantenga i nostri dati sani e salvi.
memorizzare i dati
Per prima cosa, fai un backup, memorizzando i nostri dati sull'host:
$ docker exec -it $(docker-compose ps -q postgres9 ) pg_dump -Upostgres > backup.sql
Scarica i nostri dati dal database degli ospiti:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'drop table beer'
Ripristina il nostro backup (memorizzato sull'host) nel contenitore Postgres.
Nota: usa "exec -i", non "-it", altrimenti otterrai un errore "il dispositivo di input non è un TTY".
$ docker exec -i $(docker-compose ps -q postgres9 ) psql -Upostgres < backup.sql
Elenca le tabelle per verificare che il ripristino abbia funzionato:
$ 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 | |
Per riassumere, abbiamo verificato che possiamo avviare un database, i dati persistono dopo un riavvio e possiamo ripristinarne un backup dall'host.
Grazie Tomasz!