इराकली के उत्तर पर निर्माण करने के लिए, यहां एक अद्यतन समाधान दिया गया है:
- नए संस्करण 2 डॉकर कंपोज़ फ़ाइल का उपयोग करें
- अलग
volumes
अनुभाग - अतिरिक्त सेटिंग हटाई गईं
docker-compose.yml
version: '2'
services:
postgres9:
image: postgres:9.4
expose:
- 5432
volumes:
- data:/var/lib/postgresql/data
volumes:
data: {}
डेमो
पोस्टग्रेज़ डेटाबेस सर्वर प्रारंभ करें:
$ docker-compose up
डेटाबेस में सभी टेबल दिखाएं। दूसरे टर्मिनल में, कंटेनर के पोस्टग्रेज़ से बात करें:
$ 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 सर्वर कंटेनर को मारें:
$ docker-compose stop
पोस्टग्रेज कंटेनर को फिर से शुरू करें:
$ 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 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'
पोस्टग्रेज़ कंटेनर में हमारे बैकअप (होस्ट पर संग्रहीत) को पुनर्स्थापित करें।
नोट: "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 | |
संक्षेप में, हमने सत्यापित किया है कि हम एक डेटाबेस शुरू कर सकते हैं, डेटा पुनरारंभ होने के बाद भी बना रहता है, और हम होस्ट से बैकअप को पुनर्स्थापित कर सकते हैं।
धन्यवाद टोमाज़!