Aby wykorzystać odpowiedź irakli, oto zaktualizowane rozwiązanie:
- użyj nowszej wersji 2 pliku Docker Compose
- oddzielne
volumes
sekcja - usunięto dodatkowe ustawienia
docker-compose.yml
version: '2'
services:
postgres9:
image: postgres:9.4
expose:
- 5432
volumes:
- data:/var/lib/postgresql/data
volumes:
data: {}
demonstracja
Uruchom serwer bazy danych Postgres:
$ docker-compose up
Pokaż wszystkie tabele w bazie danych. W innym terminalu porozmawiaj z Postgresem kontenera:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
Nic nie pokaże, ponieważ baza danych jest pusta. Utwórz tabelę:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'create table beer()'
Wymień nowo utworzoną 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 | |
Tak! Uruchomiliśmy bazę danych Postgres przy użyciu współdzielonego woluminu pamięci masowej i zapisaliśmy w niej niektóre dane. Następnym krokiem jest sprawdzenie, czy dane faktycznie pozostają po zatrzymaniu serwera.
Teraz zabij kontener serwera Postgres:
$ docker-compose stop
Uruchom ponownie kontener Postgres:
$ docker-compose up
Spodziewamy się, że serwer bazy danych ponownie wykorzysta pamięć, więc nasze bardzo ważne dane nadal tam są. Sprawdź:
$ 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 | |
Pomyślnie użyliśmy nowego stylu pliku Docker Compose do uruchomienia bazy danych Postgres przy użyciu zewnętrznego woluminu danych i sprawdziliśmy, czy przechowuje on nasze dane w bezpiecznym i zdrowym stanie.
przechowywanie danych
Najpierw utwórz kopię zapasową, przechowując nasze dane na hoście:
$ docker exec -it $(docker-compose ps -q postgres9 ) pg_dump -Upostgres > backup.sql
Usuń nasze dane z bazy danych gości:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'drop table beer'
Przywróć naszą kopię zapasową (przechowywaną na hoście) do kontenera Postgres.
Uwaga: użyj "exec -i", nie "-it", w przeciwnym razie otrzymasz błąd "urządzenie wejściowe nie jest TTY".
$ docker exec -i $(docker-compose ps -q postgres9 ) psql -Upostgres < backup.sql
Wymień tabele, aby sprawdzić, czy przywracanie zadziałało:
$ 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 | |
Podsumowując, sprawdziliśmy, że możemy uruchomić bazę danych, dane utrzymują się po restarcie i możemy przywrócić do niej kopię zapasową z hosta.
Dzięki Tomasz!