Untuk membangun jawaban irakli, inilah solusi yang diperbarui:
- gunakan file Tulis Docker versi 2 yang lebih baru
- pisahkan
volumes
bagian - setelan ekstra dihapus
docker-compose.yml
version: '2'
services:
postgres9:
image: postgres:9.4
expose:
- 5432
volumes:
- data:/var/lib/postgresql/data
volumes:
data: {}
demo
Mulai server basis data Postgres:
$ docker-compose up
Tampilkan semua tabel dalam database. Di terminal lain, bicaralah dengan Postgres container:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
Itu tidak akan menunjukkan apa-apa, karena databasenya kosong. Buat tabel:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'create table beer()'
Cantumkan tabel yang baru dibuat:
$ 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 | |
Ya! Kami sekarang telah memulai database Postgres menggunakan volume penyimpanan bersama, dan menyimpan beberapa data di dalamnya. Langkah selanjutnya adalah memeriksa apakah data benar-benar tersimpan setelah server berhenti.
Sekarang, matikan wadah server Postgres:
$ docker-compose stop
Mulai wadah Postgres lagi:
$ docker-compose up
Kami berharap server database akan menggunakan kembali penyimpanan, sehingga data kami yang sangat penting masih ada. Periksa:
$ 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 | |
Kami telah berhasil menggunakan file Docker Compose gaya baru untuk menjalankan database Postgres menggunakan volume data eksternal, dan memeriksa apakah itu menjaga data kami tetap aman dan sehat.
menyimpan data
Pertama, buat cadangan, simpan data kita di host:
$ docker exec -it $(docker-compose ps -q postgres9 ) pg_dump -Upostgres > backup.sql
Ambil data kami dari database tamu:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'drop table beer'
Pulihkan cadangan kami (disimpan di host) ke dalam wadah Postgres.
Catatan: gunakan "exec -i", bukan "-it", jika tidak, Anda akan mendapatkan kesalahan "perangkat input bukan TTY".
$ docker exec -i $(docker-compose ps -q postgres9 ) psql -Upostgres < backup.sql
Buat daftar tabel untuk memverifikasi bahwa pemulihan berhasil:
$ 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 | |
Singkatnya, kami telah memverifikasi bahwa kami dapat memulai database, data tetap ada setelah restart, dan kami dapat memulihkan cadangan ke dalamnya dari host.
Terima kasih Tomasz!