För att bygga vidare på iraklis svar, här är en uppdaterad lösning:
- använd nyare version 2 Docker Compose-fil
- separata
volumes
avsnitt - extra inställningar raderade
docker-compose.yml
version: '2'
services:
postgres9:
image: postgres:9.4
expose:
- 5432
volumes:
- data:/var/lib/postgresql/data
volumes:
data: {}
demo
Starta Postgres databasserver:
$ docker-compose up
Visa alla tabeller i databasen. I en annan terminal, prata med containerns Postgres:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
Det visar ingenting, eftersom databasen är tom. Skapa en tabell:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'create table beer()'
Lista den nyskapade tabellen:
$ 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 | |
Jippie! Vi har nu startat en Postgres-databas med en delad lagringsvolym och lagrat en del data i den. Nästa steg är att kontrollera att datan faktiskt finns kvar efter att servern har stannat.
Avsluta nu Postgres-serverbehållaren:
$ docker-compose stop
Starta upp Postgres-behållaren igen:
$ docker-compose up
Vi förväntar oss att databasservern kommer att återanvända lagringen, så vår mycket viktiga data finns kvar. Kontrollera:
$ 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 | |
Vi har framgångsrikt använt en ny Docker Compose-fil för att köra en Postgres-databas med hjälp av en extern datavolym, och kontrollerat att den håller vår data säker och sund.
lagring av data
Gör först en säkerhetskopia och lagra vår data på värden:
$ docker exec -it $(docker-compose ps -q postgres9 ) pg_dump -Upostgres > backup.sql
Zappa vår data från gästdatabasen:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'drop table beer'
Återställ vår säkerhetskopia (lagrad på värden) i Postgres-behållaren.
Obs! använd "exec -i", inte "-it", annars får du ett "indataenhet är inte en TTY"-fel.
$ docker exec -i $(docker-compose ps -q postgres9 ) psql -Upostgres < backup.sql
Lista tabellerna för att verifiera att återställningen fungerade:
$ 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 | |
Sammanfattningsvis har vi verifierat att vi kan starta en databas, att data finns kvar efter en omstart och att vi kan återställa en säkerhetskopia till den från värden.
Tack Tomasz!