Chcete-li stavět na odpovědi irakli, zde je aktualizované řešení:
- použijte novější verzi 2 souboru Docker Compose
- samostatné
volumes
sekce - další nastavení byla smazána
docker-compose.yml
version: '2'
services:
postgres9:
image: postgres:9.4
expose:
- 5432
volumes:
- data:/var/lib/postgresql/data
volumes:
data: {}
ukázka
Spusťte databázový server Postgres:
$ docker-compose up
Zobrazit všechny tabulky v databázi. V jiném terminálu si promluvte s Postgresem v kontejneru:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
Neukáže nic, protože databáze je prázdná. Vytvořte tabulku:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'create table beer()'
Seznam nově vytvořené tabulky:
$ 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 | |
Hurá! Nyní jsme spustili databázi Postgres pomocí sdíleného úložného svazku a uložili do ní některá data. Dalším krokem je zkontrolovat, zda se data po zastavení serveru skutečně drží.
Nyní zabijte kontejner serveru Postgres:
$ docker-compose stop
Znovu spusťte kontejner Postgres:
$ docker-compose up
Očekáváme, že databázový server znovu použije úložiště, takže naše velmi důležitá data jsou stále tam. Zkontrolujte:
$ 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 | |
Úspěšně jsme použili soubor Docker Compose nového stylu ke spuštění databáze Postgres pomocí externího datového svazku a zkontrolovali jsme, že udržuje naše data v bezpečí a v pořádku.
ukládání dat
Nejprve si vytvořte zálohu a uložte naše data na hostitele:
$ docker exec -it $(docker-compose ps -q postgres9 ) pg_dump -Upostgres > backup.sql
Zapněte naše data z databáze hostů:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'drop table beer'
Obnovte naši zálohu (uloženou na hostiteli) do kontejneru Postgres.
Poznámka: použijte "exec -i", ne "-it", jinak se zobrazí chyba "vstupní zařízení není TTY".
$ docker exec -i $(docker-compose ps -q postgres9 ) psql -Upostgres < backup.sql
Vyjmenujte tabulky, abyste ověřili, že obnovení proběhlo:
$ 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 | |
Abych to shrnul, ověřili jsme, že můžeme spustit databázi, data po restartu přetrvávají a můžeme do ní obnovit zálohu z hostitele.
Díky Tomaszi!