Để xây dựng câu trả lời của irakli, đây là một giải pháp được cập nhật:
- sử dụng tệp Docker Compose phiên bản 2 mới hơn
- các tập
volumes
phần - cài đặt bổ sung đã bị xóa
docker-compost.yml
version: '2'
services:
postgres9:
image: postgres:9.4
expose:
- 5432
volumes:
- data:/var/lib/postgresql/data
volumes:
data: {}
bản trình diễn
Khởi động máy chủ cơ sở dữ liệu Postgres:
$ docker-compose up
Hiển thị tất cả các bảng trong cơ sở dữ liệu. Trong một thiết bị đầu cuối khác, hãy nói chuyện với Postgres của vùng chứa:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
Nó sẽ không hiển thị gì vì cơ sở dữ liệu trống. Tạo bảng:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'create table beer()'
Liệt kê bảng mới được tạ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 | |
Yay! Bây giờ chúng tôi đã bắt đầu cơ sở dữ liệu Postgres bằng cách sử dụng dung lượng lưu trữ được chia sẻ và lưu trữ một số dữ liệu trong đó. Bước tiếp theo là kiểm tra xem dữ liệu có thực sự tồn tại xung quanh sau khi máy chủ dừng không.
Bây giờ, hãy hủy vùng chứa máy chủ Postgres:
$ docker-compose stop
Khởi động lại vùng chứa Postgres:
$ docker-compose up
Chúng tôi hy vọng rằng máy chủ cơ sở dữ liệu sẽ sử dụng lại dung lượng lưu trữ, vì vậy dữ liệu rất quan trọng của chúng tôi vẫn ở đó. Kiểm tra:
$ 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 | |
Chúng tôi đã sử dụng thành công tệp Docker Compose kiểu mới để chạy cơ sở dữ liệu Postgres bằng cách sử dụng khối lượng dữ liệu bên ngoài và kiểm tra xem nó có giữ cho dữ liệu của chúng tôi an toàn và ổn định hay không.
lưu trữ dữ liệu
Trước tiên, hãy sao lưu, lưu trữ dữ liệu của chúng tôi trên máy chủ:
$ docker exec -it $(docker-compose ps -q postgres9 ) pg_dump -Upostgres > backup.sql
Zap dữ liệu của chúng tôi từ cơ sở dữ liệu khách:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'drop table beer'
Khôi phục bản sao lưu của chúng tôi (được lưu trữ trên máy chủ) vào vùng chứa Postgres.
Lưu ý: sử dụng "executive -i", not "-it", nếu không bạn sẽ gặp lỗi "thiết bị đầu vào không phải là TTY".
$ docker exec -i $(docker-compose ps -q postgres9 ) psql -Upostgres < backup.sql
Liệt kê các bảng để xác minh khôi phục đã hoạt động:
$ 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 | |
Tóm lại, chúng tôi đã xác minh rằng chúng tôi có thể khởi động cơ sở dữ liệu, dữ liệu vẫn tồn tại sau khi khởi động lại và chúng tôi có thể khôi phục bản sao lưu vào nó từ máy chủ.
Cảm ơn Tomasz!