For at bygge videre på iraklis svar er her en opdateret løsning:
- brug nyere version 2 Docker Compose-fil
- separate
volumes
afsnit - ekstra indstillinger slettet
docker-compose.yml
version: '2'
services:
postgres9:
image: postgres:9.4
expose:
- 5432
volumes:
- data:/var/lib/postgresql/data
volumes:
data: {}
demo
Start Postgres databaseserver:
$ docker-compose up
Vis alle tabeller i databasen. I en anden terminal skal du tale med containerens Postgres:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
Det vil ikke vise noget, da databasen er tom. Opret en tabel:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'create table beer()'
Liste over den nyoprettede tabel:
$ 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! Vi har nu startet en Postgres-database ved hjælp af en delt lagervolumen og gemt nogle data i den. Næste trin er at kontrollere, at dataene rent faktisk bliver ved, når serveren stopper.
Dræb nu Postgres-serverbeholderen:
$ docker-compose stop
Start Postgres-beholderen op igen:
$ docker-compose up
Vi forventer, at databaseserveren vil genbruge lageret, så vores meget vigtige data er der stadig. Tjek:
$ 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 med succes brugt en ny Docker Compose-fil til at køre en Postgres-database ved hjælp af en ekstern datavolumen og kontrolleret, at den holder vores data i sikkerhed.
lagring af data
Først skal du lave en sikkerhedskopi og gemme vores data på værten:
$ docker exec -it $(docker-compose ps -q postgres9 ) pg_dump -Upostgres > backup.sql
Zap vores data fra gæstedatabasen:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'drop table beer'
Gendan vores backup (gemt på værten) i Postgres-beholderen.
Bemærk: brug "exec -i", ikke "-it", ellers får du en "inputenhed er ikke en TTY"-fejl.
$ docker exec -i $(docker-compose ps -q postgres9 ) psql -Upostgres < backup.sql
Liste over tabellerne for at bekræfte, at gendannelsen virkede:
$ 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 | |
For at opsummere, har vi bekræftet, at vi kan starte en database, dataene fortsætter efter en genstart, og vi kan gendanne en sikkerhedskopi til den fra værten.
Tak Tomasz!