За да надградим отговора на irakli, ето актуализирано решение:
- използвайте по-нова версия 2 Docker Compose файл
- отделни
volumes
раздел - допълнителните настройки са изтрити
docker-compose.yml
version: '2'
services:
postgres9:
image: postgres:9.4
expose:
- 5432
volumes:
- data:/var/lib/postgresql/data
volumes:
data: {}
демо
Стартирайте Postgres сървър на база данни:
$ docker-compose up
Показване на всички таблици в базата данни. В друг терминал говорете с Postgres на контейнера:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
Няма да покаже нищо, тъй като базата данни е празна. Създайте таблица:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'create table beer()'
Избройте новосъздадената таблица:
$ 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 | |
Ура! Вече стартирахме база данни на Postgres, използвайки споделен обем за съхранение и съхранявахме някои данни в нея. Следващата стъпка е да проверите дали данните действително остават след спиране на сървъра.
Сега убийте контейнера на сървъра на Postgres:
$ docker-compose stop
Стартирайте отново контейнера Postgres:
$ docker-compose up
Очакваме сървърът на базата данни да използва повторно хранилището, така че нашите много важни данни все още са там. Проверете:
$ 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 | |
Успешно използвахме файл Docker Compose в нов стил, за да стартираме база данни на Postgres, използвайки външен обем данни, и проверихме дали той поддържа данните ни безопасни и здрави.
съхранение на данни
Първо, направете резервно копие, съхранявайки нашите данни на хоста:
$ docker exec -it $(docker-compose ps -q postgres9 ) pg_dump -Upostgres > backup.sql
Извадете нашите данни от базата данни за гости:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'drop table beer'
Възстановете нашия архив (съхранен на хоста) в контейнера Postgres.
Забележка: използвайте "exec -i", не "-it", в противен случай ще получите грешка "входното устройство не е TTY".
$ docker exec -i $(docker-compose ps -q postgres9 ) psql -Upostgres < backup.sql
Избройте таблиците, за да проверите дали възстановяването работи:
$ 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 | |
За да обобщим, потвърдихме, че можем да стартираме база данни, данните се запазват след рестартиране и можем да възстановим резервно копие в нея от хоста.
Благодаря Томаш!