डॉकर में लगातार स्टोरेज (जैसे डेटाबेस) से कैसे निपटें


992

लोग आपके डॉकर कंटेनर के लिए लगातार भंडारण से कैसे निपटते हैं?

मैं वर्तमान में इस दृष्टिकोण का उपयोग कर रहा हूं: छवि का निर्माण, जैसे PostgreSQL के लिए, और फिर कंटेनर को प्रारंभ करें

docker run --volumes-from c0dbc34fd631 -d app_name/postgres

IMHO, जिसमें दोष है, कि मुझे कभी भी (दुर्घटना से) कंटेनर "c0dbc34fd631" को हटाना नहीं चाहिए।

एक और विचार कंटेनर में मेजबान मात्रा "-v" माउंट करने के लिए किया जाएगा, हालांकि, userid कंटेनर के भीतर अनिवार्य रूप से मेल नहीं खाता userid मेजबान से, और उसके बाद अनुमतियों में गड़बड़ हो सकती है।

नोट: इसके बजाय --volumes-from 'cryptic_id'आप यह भी उपयोग कर सकते हैं कि एक नाम --volumes-from my-data-containerकहाँ my-data-containerहै जिसे आपने डेटा-कन्टेनर को सौंपा है, उदाहरण के लिए docker run --name my-data-container ...(स्वीकृत उत्तर देखें)


क्षमा करें, मैंने गलत तरीके से कहा, मेरा कहने का मतलब है: उस छवि से मेरे भविष्य के सभी उदाहरण उस कंटेनर पर निर्भर हैं। अगर मैं दुर्घटना से उस कंटेनर को हटा देता हूं, तो मैं परेशानी में हूं।
जुवल्टर १ter

@AntonStrogonoff - हां, त्रुटि त्रुटि - मेरा कहने का मतलब है: मुझे यह सुनिश्चित करने की ज़रूरत है कि मैं कभी भी (संभवतः) पुराने कंटेनर को नहीं
हटाऊंगा

यह होना चाहिए --name। आपके पास-name
शम्मेल ली

जवाबों:


986

डॉकटर 1.9.0 और इसके बाद के संस्करण

वॉल्यूम API का उपयोग करें

docker volume create --name hello
docker run -d -v hello:/container/path/for/volume container_image my_command

इसका मतलब है कि डेटा-केवल कंटेनर पैटर्न को नए संस्करणों के पक्ष में छोड़ दिया जाना चाहिए।

वास्तव में वॉल्यूम एपीआई केवल डेटा-कंटेनर पैटर्न को प्राप्त करने का एक बेहतर तरीका है।

यदि आप -v volume_name:/container/fs/pathडॉकटर के साथ एक कंटेनर बनाते हैं, तो स्वचालित रूप से आपके लिए एक नामांकित वॉल्यूम बना सकता है:

  1. के माध्यम से सूचीबद्ध हो docker volume ls
  2. के माध्यम से पहचाना जाए docker volume inspect volume_name
  3. एक सामान्य निर्देशिका के रूप में समर्थित
  4. एक --volumes-fromकनेक्शन के माध्यम से पहले के रूप में समर्थित

नया वॉल्यूम API एक उपयोगी कमांड जोड़ता है जो आपको झूलने वाले संस्करणों की पहचान करने देता है:

docker volume ls -f dangling=true

और फिर इसे इसके नाम के माध्यम से हटा दें:

docker volume rm <volume name>

जैसा कि @mpugach टिप्पणियों में रेखांकित करता है, आप एक अच्छे वन-लाइनर के साथ सभी झूलने वाले संस्करणों से छुटकारा पा सकते हैं:

docker volume rm $(docker volume ls -f dangling=true -q)
# Or using 1.13.x
docker volume prune

डॉकर 1.8.x और नीचे

उत्पादन के लिए सबसे अच्छा काम करने वाला दृष्टिकोण केवल कंटेनर का उपयोग करना है ।

डेटा केवल कंटेनर एक नंगे छवि पर चलाया जाता है और वास्तव में डेटा वॉल्यूम को उजागर करने के अलावा कुछ भी नहीं करता है।

फिर आप किसी अन्य कंटेनर को डेटा कंटेनर वॉल्यूम तक पहुँच के लिए चला सकते हैं:

docker run --volumes-from data-container some-other-container command-to-execute
  • यहां आप विभिन्न कंटेनरों को व्यवस्थित करने के तरीके की एक अच्छी तस्वीर प्राप्त कर सकते हैं।
  • यहाँ पर अच्छी जानकारी है कि वॉल्यूम कैसे काम करता है।

में इस ब्लॉग पोस्ट एक अच्छा तथाकथित का वर्णन है मात्रा पैटर्न के रूप में कंटेनर जो होने का मुख्य बिंदु को स्पष्ट करता है डेटा केवल कंटेनरों

डॉकर प्रलेखन में अब मात्रा / पैटर्न के रूप में कंटेनर का विवरण है ।

निम्नलिखित डॉकर 1.8.x और उससे नीचे के लिए बैकअप / पुनर्स्थापना प्रक्रिया है।

बैकअप:

sudo docker run --rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data
  • --rm: कंटेनर को बाहर निकालें जब वह बाहर निकलता है
  • -volumes-DATA से: DATA कंटेनर द्वारा साझा किए गए वॉल्यूम में संलग्न करें
  • -v $ (pwd): / backup: बाँध करंट डाइरेक्टरी में कंटेनर को चालू करता है; टार फाइल को लिखने के लिए
  • बिजीबॉक्स: एक छोटी सरल छवि - त्वरित रखरखाव के लिए अच्छा है
  • tar cvf /backup/backup.tar / data: / data directory में सभी फ़ाइलों का एक असंपीड़ित tar फ़ाइल बनाता है

पुनर्स्थापित करें:

# Create a new data container
$ sudo docker run -v /data -name DATA2 busybox true
# untar the backup files into the new container᾿s data volume
$ sudo docker run --rm --volumes-from DATA2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
data/
data/sven.txt
# Compare to the original container
$ sudo docker run --rm --volumes-from DATA -v `pwd`:/backup busybox ls /data
sven.txt

यहां उत्कृष्ट ब्रायन गोफ का एक अच्छा लेख बताया गया है कि कंटेनर और डेटा कंटेनर के लिए एक ही छवि का उपयोग करना क्यों अच्छा है।


8
यह एक अलग जरूरत के लिए एक अलग उपकरण है। --volumes-fromआपको डिस्क स्थान --linkसाझा करने दें आप सेवाओं को साझा करें।
तोमासोप

3
इस तरह की चीज़ के लिए विशेष रूप से काम करने वाले कार्यों में एक और परियोजना है, शायद इसे इस संदर्भ में देखने के संदर्भ के रूप में जोड़ दें? github.com/ClusterHQ/flocker
Andre

9
डेटा कंटेनर का कोई मतलब नहीं है और वास्तव में बुरा विचार है! कंटेनर का मतलब केवल तब होता है जब कोई प्रक्रिया उसमें चल रही हो, अन्यथा यह केवल होस्ट फ़ाइल सिस्टम का एक टुकड़ा है। -V के साथ आप केवल एक वॉल्यूम माउंट कर सकते हैं वह एकमात्र और सबसे अच्छा विकल्प है। आपके द्वारा उपयोग की जाने वाली फाइल सिस्टम और भौतिक डिस्क पर आपका नियंत्रण है।
बॉय्नक्स

11
हां, डॉकर 1.9 के रूप में, वॉल्यूम एपीआई ( docker volume create --name mydata) के साथ नामांकित वॉल्यूम बनाना एक डेटा वॉल्यूम कंटेनर पर पसंद किया जाता है। डॉकर के दोस्तों ने खुद ही सुझाव दिया है कि डेटा वॉल्यूम कंटेनरों को " अब एक अनुशंसित पैटर्न नहीं माना जाता है ," " नामित वॉल्यूम को डेटा-केवल वॉल्यूम को अधिकांश (यदि सभी नहीं) मामलों में बदलने में सक्षम होना चाहिए ," और " बिना किसी कारण के मैं उपयोग करने के लिए देख सकता हूं। " डेटा-केवल कंटेनर । ”
क्विन कंटेंडर

8
@ कोडिंग, मुझे दुख है कि आप दुखी हैं, आंशिक रूप से क्योंकि आप 3 साल की देरी के साथ उत्तर दे रहे हैं और आंशिक रूप से क्योंकि इसका उत्तर इतिहास में है। यदि आपके पास कोई सलाह है तो टिप्पणी करने के लिए स्वतंत्र महसूस करें, ताकि मैं उत्तर को एकीकृत कर
सकूं

75

में डोकर रिहाई v1.0 , बाध्यकारी एक फ़ाइल या होस्ट मशीन दिया आदेश द्वारा किया जा सकता पर निर्देशिका के माउंट:

$ docker run -v /host:/container ...

उपरोक्त वॉल्यूम का उपयोग होस्ट रनिंग डॉकर पर लगातार स्टोरेज के रूप में किया जा सकता है।


3
यह अनुशंसित उत्तर होना चाहिए क्योंकि यह वॉल्यूम-कंटेनर दृष्टिकोण की तुलना में बहुत कम जटिल है जिसमें इस समय अधिक वोट हैं
insitecec

2
काश, एक होस्ट-यूआईडी निर्दिष्ट करने के लिए एक ध्वज होता: कंटेनर-यूआईडी और होस्ट-जीआईडी: कंटेनर-जीआईडी ​​मैपिंग जब यह वॉल्यूम माउंट कमांड का उपयोग करता है।
रैंपियन

35

Docker Compose 1.6 के रूप में, अब Docker Compose में डेटा वॉल्यूम के लिए बेहतर समर्थन है। निम्न कंपोज़ फ़ाइल एक डेटा छवि बनाएगी जो मूल कंटेनरों के पुनरारंभ (या हटाने) के बीच बनी रहेगी:

यहाँ ब्लॉग की घोषणा है: रचना 1.6: नेटवर्क और संस्करणों को परिभाषित करने के लिए नई रचना फ़ाइल

यहाँ एक उदाहरण फ़ाइल लिखें:

version: "2"

services:
  db:
    restart: on-failure:10
    image: postgres:9.4
    volumes:
      - "db-data:/var/lib/postgresql/data"
  web:
    restart: on-failure:10
    build: .
    command: gunicorn mypythonapp.wsgi:application -b :8000 --reload
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    links:
      - db

volumes:
  db-data:

जहां तक ​​मैं समझ सकता हूं: यह एक डेटा वॉल्यूम कंटेनर ( db_data) बनाएगा जो पुनरारंभ के बीच बना रहेगा।

यदि आप चलते हैं: docker volume lsआपको अपना वॉल्यूम सूचीबद्ध देखना चाहिए:

local               mypthonapp_db-data
...

आप डेटा वॉल्यूम के बारे में कुछ और जानकारी प्राप्त कर सकते हैं:

docker volume inspect mypthonapp_db-data
[
  {
    "Name": "mypthonapp_db-data",
    "Driver": "local",
    "Mountpoint": "/mnt/sda1/var/lib/docker/volumes/mypthonapp_db-data/_data"
  }
]

कुछ परीक्षण:

# Start the containers
docker-compose up -d

# .. input some data into the database
docker-compose run --rm web python manage.py migrate
docker-compose run --rm web python manage.py createsuperuser
...

# Stop and remove the containers:
docker-compose stop
docker-compose rm -f

# Start it back up again
docker-compose up -d

# Verify the data is still there
...
(it is)

# Stop and remove with the -v (volumes) tag:

docker-compose stop
docker=compose rm -f -v

# Up again ..
docker-compose up -d

# Check the data is still there:
...
(it is).

टिप्पणियाँ:

  • आप volumesब्लॉक में विभिन्न ड्राइवरों को भी निर्दिष्ट कर सकते हैं । उदाहरण के लिए, आप db_data के लिए Flocker ड्राइवर निर्दिष्ट कर सकते हैं:

    volumes:
      db-data:
        driver: flocker
    
  • जैसा कि उन्होंने डॉकर झुंड और डॉकर कम्पोज़ के बीच एकीकरण में सुधार किया है (और संभवतः डॉकटर को इको-सिस्टम में एकीकृत करना शुरू कर दिया है (मैंने एक अफवाह सुनी कि डॉकर ने फ्लॉकर को खरीदा है), मुझे लगता है कि यह दृष्टिकोण तेजी से शक्तिशाली होना चाहिए।

अस्वीकरण: यह दृष्टिकोण आशाजनक है, और मैं इसे विकास के माहौल में सफलतापूर्वक उपयोग कर रहा हूं। मैं अभी उत्पादन में इस का उपयोग करने के लिए आशंकित हो जाएगा!


Flocker कर दिया गया है शट डाउन और वहाँ पर गतिविधि का एक बहुत नहीं है GitHub रेपो
कृष्णा

17

यदि यह चयनित उत्तर के अपडेट 5 से स्पष्ट नहीं है, तो डॉकर 1.9 के रूप में, आप ऐसे वॉल्यूम बना सकते हैं जो किसी विशिष्ट कंटेनर से जुड़े बिना मौजूद हो सकते हैं, इस प्रकार "डेटा-ओनली कंटेनर" पैटर्न अप्रचलित हो जाता है।

डेटा-केवल कंटेनरों को डूकर 1.9.0 के साथ देखें ? # 17798

मुझे लगता है कि डॉकर के रख-रखावकर्ताओं ने महसूस किया कि डेटा-केवल कंटेनर पैटर्न एक डिज़ाइन की गंध का एक सा था और वॉल्यूम को एक अलग इकाई बनाने का फैसला किया, जो संबंधित कंटेनर के बिना मौजूद हो सकता है।


13

हालांकि यह अभी भी डॉकर का एक हिस्सा है जिसे कुछ काम की जरूरत है , आपको वॉल्यूम डॉयलफाइल में वॉल्यूम को निर्देश के साथ रखना चाहिए ताकि आपको दूसरे कंटेनर से वॉल्यूम को कॉपी करने की आवश्यकता न हो।

इससे आपके कंटेनर कम अंतर-निर्भर होंगे और आपको एक कंटेनर के दूसरे को प्रभावित करने के बारे में चिंता करने की ज़रूरत नहीं है।


फ्लिप-साइड का तर्क है कि "डेटा ओनली" कंटेनरों का अंत डेटा वॉल्यूम के अंतिम-रिसोर्ट संदर्भ के रूप में होता है (डॉकटर डेटा कंटेनर को तब नष्ट कर देता है जब अंतिम कंटेनर उस वॉल्यूम को हटा देता है docker rm)
वाइनसोकेटेड

2
डॉकर का यह दिशा-निर्देश अन्यथा सुझाव देता है: docs.docker.com/userguide/dockervolumes/… "डेटा वॉल्यूम कंटेनर के जीवन चक्र से स्वतंत्र डेटा को बनाए रखने के लिए डिज़ाइन किए गए हैं। डॉकर इसलिए कंटेनर को हटाते समय न तो स्वचालित रूप से वॉल्यूम हटाते हैं, न ही कभी। "कचरा इकट्ठा" वॉल्यूम जो अब कंटेनर द्वारा संदर्भित नहीं हैं। "
एलेक्स

12

डॉकर कम्पोज़ का उपयोग करते समय , उदाहरण के लिए, एक नामित वॉल्यूम संलग्न करें:

version: '2'
services:
  db:
    image: mysql:5.6
    volumes:
      - db_data:/var/lib/mysql:rw
    environment:
      MYSQL_ROOT_PASSWORD: root
volumes:
  db_data:

9

@ टोमासोप का उत्तर अच्छा है, और डेटा-केवल कंटेनरों का उपयोग करने के कुछ यांत्रिकी की व्याख्या करता है। लेकिन जैसा कि किसी ने शुरू में सोचा था कि डेटा कंटेनर मूर्खतापूर्ण थे जब कोई केवल मेजबान को एक वॉल्यूम माउंट कर सकता है (जैसा कि कई अन्य उत्तरों द्वारा सुझाव दिया गया है), लेकिन अब यह पता चलता है कि वास्तव में डेटा-केवल कंटेनर बहुत साफ हैं, मैं अपना खुद का सुझाव दे सकता हूं इस विषय पर ब्लॉग पोस्ट: क्यों डॉकटर डेटा कंटेनर (वॉल्यूम!) अच्छे हैं

यह भी देखें: प्रश्न के लिए मेरा उत्तर " डॉकर साझा संस्करणों के लिए अनुमतियों को प्रबंधित करने का सबसे अच्छा (सबसे अच्छा) तरीका क्या है? एक उदाहरण के लिए कि कैसे अनुमतियों और यूआईडी / जीआईडी ​​मैपिंग जैसी समस्याओं से बचने के लिए डेटा कंटेनरों का उपयोग किया जाए।

ओपी की मूल चिंताओं में से एक को संबोधित करने के लिए: कि डेटा कंटेनर को हटाया नहीं जाना चाहिए। यहां तक ​​कि अगर डेटा कंटेनर को हटा दिया जाता है, तो भी डेटा तब तक खो नहीं जाएगा, जब तक कि किसी भी कंटेनर का उस वॉल्यूम यानी किसी भी कंटेनर का संदर्भ न हो, जो वॉल्यूम को माउंट करता है --volumes-from। इसलिए जब तक सभी संबंधित कंटेनरों को रोक दिया जाता है और नष्ट नहीं किया जाता है (कोई इसे दुर्घटना के बराबर मान सकता है rm -fr /) डेटा सुरक्षित है। आप --volumes-fromकिसी भी कंटेनर को हमेशा उस मात्रा का संदर्भ देकर डेटा कंटेनर को फिर से बना सकते हैं ।

हमेशा की तरह, हालांकि बैकअप बनाओ!

अद्यतन: डॉकर के पास अब ऐसे वॉल्यूम हैं जिन्हें कंटेनरों से स्वतंत्र रूप से प्रबंधित किया जा सकता है, जिससे इसे प्रबंधित करना आसान हो जाता है।


9

आपकी आवश्यकताओं के आधार पर लगातार डेटा के प्रबंधन के कई स्तर हैं:

  • इसे अपने होस्ट पर स्टोर करें
    • -v host-path:container-pathहोस्ट निर्देशिका में कंटेनर निर्देशिका डेटा को जारी रखने के लिए ध्वज का उपयोग करें ।
    • बैकअप / पुनर्स्थापना एक बैकअप / पुनर्स्थापना कंटेनर (जैसे कि ट्यूटमक्लाउड / डॉकअप) को चलाने से होता है जो एक ही निर्देशिका में आरोहित होता है।
  • एक डेटा कंटेनर बनाएँ और अपने वॉल्यूम को अपने एप्लिकेशन कंटेनर में माउंट करें
    • एक कंटेनर बनाएं जो डेटा वॉल्यूम निर्यात करता है, --volumes-fromउस डेटा को अपने एप्लिकेशन कंटेनर में माउंट करने के लिए उपयोग करें।
    • बैकअप / उपरोक्त समाधान के समान ही पुनर्स्थापित करें।
  • एक Docker वॉल्यूम प्लगइन का उपयोग करें जो एक बाहरी / तृतीय-पक्ष सेवा का समर्थन करता है
    • डॉकर वॉल्यूम प्लगइन्स आपके डेटा स्रोत को कहीं से भी आने की अनुमति देते हैं - NFS, AWS (S3, EFS और EBS)
    • प्लगइन / सेवा के आधार पर, आप एकल या एकाधिक कंटेनरों को एक वॉल्यूम में संलग्न कर सकते हैं।
    • सेवा के आधार पर, बैकअप / पुनर्स्थापना आपके लिए स्वचालित हो सकते हैं।
    • हालांकि यह मैन्युअल रूप से करने के लिए बोझिल हो सकता है, कुछ ऑर्केस्ट्रेशन समाधान - जैसे कि रंचर - यह इसमें बेक किया गया है और उपयोग करने के लिए सरल है।
    • मैन्युअल रूप से ऐसा करने के लिए कॉन्वॉय सबसे आसान उपाय है।

8

यदि आप अपने आस-पास के संस्करणों को स्थानांतरित करना चाहते हैं, तो आपको फ्लॉकर को भी देखना चाहिए ।

README से:

Flocker एक डेटा वॉल्यूम प्रबंधक और मल्टी-होस्ट Docker क्लस्टर प्रबंधन उपकरण है। इसके साथ आप लिनक्स पर ZFS की शक्ति का उपयोग करके अपने डेटा को अपने स्टेटलेस एप्लिकेशन के लिए उपयोग करने वाले अपने डेटा को नियंत्रित कर सकते हैं।

इसका मतलब यह है कि आप डॉकर में अपने डेटाबेस, कतारों और की-वैल्यू स्टोर को चला सकते हैं और उन्हें अपने आवेदन के बाकी हिस्सों की तरह आसानी से घुमा सकते हैं।


1
धन्यवाद जोहान। मैं क्लस्टरस्टर पर काम करता हूं और मैं सिर्फ यह नोट करना चाहता था कि हम केवल जेडएफएस-आधारित भंडारण से आगे बढ़ गए हैं। अब आप Flocker को Amazon EBS या Google Persistent Disk जैसे स्टोरेज के साथ उपयोग कर सकते हैं। यहां भंडारण विकल्पों की पूरी सूची दी गई है: docs.clusterhq.com/en/latest/supported/…
ferrantim

1
Flocker बंद हो गया है और इसका इस्तेमाल portworx.com/…
jesugmz

5

यह आपके परिदृश्य पर निर्भर करता है (यह उत्पादन वातावरण के लिए वास्तव में उपयुक्त नहीं है), लेकिन यहां एक तरीका है:

एक MySQL डॉकटर कंटेनर बनाना

इसके बारे में यह बताया गया है कि डेटा होस्ट के लिए अपने होस्ट पर निर्देशिका का उपयोग करना है।


6
धन्यवाद बेन, हालाँकि - इस मुद्दे के साथ मैं देख सकता हूं मुद्दों में से एक: फ़ाइल सिस्टम संसाधन (निर्देशिका, फ़ाइलें) docker / lxc कंटेनर (अतिथि) के भीतर से एक यूआईडी के स्वामित्व में होगा - एक जो संभवतः एक यूआईडी से टकरा सकता है होस्ट पर ...
जुलावेर

1
मुझे लगता है कि आप बहुत सुरक्षित हैं क्योंकि यह रूट द्वारा चलाया जाता है, लेकिन मैं मानता हूं कि यह एक हैक है - स्थानीय देव / पंचांग एकीकरण परीक्षण के लिए उपयुक्त है। यह निश्चित रूप से एक ऐसा क्षेत्र है, जिसे मैं और अधिक पैटर्न / सोच के साथ देखना चाहता हूं। आपको इस प्रश्न को
docker

बेन, इस समाधान के लिए धन्यवाद! मैं इसे हैक नहीं कहूंगा, हालांकि यह वॉल्यूम की तुलना में कंटेनर की तुलना में अधिक विश्वसनीय लगता है । क्या आपको मामले में कोई कमी दिखाई देती है, जब डेटा कंटेनर से पूरी तरह से उपयोग किया जाता है? (यूआईडी इस मामले में कोई फर्क नहीं पड़ता)
जॉन्डोडो

3

मैंने हाल ही में एक संभावित समाधान और तकनीक का प्रदर्शन करने वाले एक एप्लिकेशन के बारे में लिखा था। मुझे लगता है कि यह विकास के दौरान और उत्पादन में काफी कुशल है। आशा है कि यह कुछ विचारों को मदद या स्पार्क करता है।

रेपो: https://github.com/LevInteractive/docker-nodejs-example
लेख: http://lev-interactive.com/2015/03/30/docker-load-balanced-mongodb-persist//


1

मैं अभी PostgreSQL के डेटा को जारी रखने के लिए होस्ट पर एक पूर्वनिर्धारित निर्देशिका का उपयोग कर रहा हूं। इसके अलावा, इस तरह से डॉकटर कंटेनरों में मौजूदा PostgreSQL प्रतिष्ठानों को आसानी से माइग्रेट करना संभव है: https://crondev.com/persistent-postgresql-inside-docker/


0

मेरा समाधान नए का उपयोग करना है docker cp, जो अब कंटेनरों से डेटा को कॉपी करने में सक्षम है, इससे कोई फर्क नहीं पड़ता कि यह चल रहा है या नहीं और ठीक उसी स्थान पर होस्ट वॉल्यूम साझा करता है जहां डेटाबेस एप्लिकेशन कंटेनर के अंदर अपनी डेटाबेस फाइलें बना रहा है। । मूल डेटाबेस कंटेनर से सीधे डेटा-केवल कंटेनर के बिना यह दोहरा समाधान काम करता है।

तो मेरा सिस्टमड इनिट स्क्रिप्ट होस्ट पर एक संग्रह में डेटाबेस को बैकअप करने का काम ले रहा है। मैंने फ़ाइल में कभी भी दोबारा लिखने के लिए फ़ाइलनाम में टाइमस्टैम्प नहीं रखा था।

यह ExecStartPre पर कर रहा है:

ExecStartPre=-/usr/bin/docker cp lanti-debian-mariadb:/var/lib/mysql /home/core/sql
ExecStartPre=-/bin/bash -c '/usr/bin/tar -zcvf /home/core/sql/sqlbackup_$$(date +%%Y-%%m-%%d_%%H-%%M-%%S)_ExecStartPre.tar.gz /home/core/sql/mysql --remove-files'

और यह ExecStopPost पर भी यही काम कर रहा है:

ExecStopPost=-/usr/bin/docker cp lanti-debian-mariadb:/var/lib/mysql /home/core/sql
ExecStopPost=-/bin/bash -c 'tar -zcvf /home/core/sql/sqlbackup_$$(date +%%Y-%%m-%%d_%%H-%%M-%%S)_ExecStopPost.tar.gz /home/core/sql/mysql --remove-files'

साथ ही मैंने होस्ट से एक फ़ोल्डर को वॉल्यूम के रूप में उसी स्थान पर उजागर किया जहां डेटाबेस संग्रहीत है:

mariadb:
  build: ./mariadb
  volumes:
    - $HOME/server/mysql/:/var/lib/mysql/:rw

यह मेरे वीएम पर बहुत काम करता है (मैं अपने लिए एक एलईएमपी स्टैक का निर्माण कर रहा हूं): https://github.com/DJviolin/LEMP

लेकिन मैं यह नहीं जानता कि क्या यह "बुलेटप्रूफ" समाधान है जब आपका जीवन वास्तव में इस पर निर्भर करता है (उदाहरण के लिए, किसी भी संभावित मील के पत्थर में लेनदेन के साथ webshop)?

20 मिनट 20 सेकंड पर इस आधिकारिक डोकर मुख्य वीडियो से, प्रस्तुतकर्ता डेटाबेस के साथ एक ही काम करता है:

डॉकटर के साथ शुरुआत करना

"डेटाबेस के लिए हमारे पास एक वॉल्यूम है, इसलिए हम यह सुनिश्चित कर सकते हैं कि जैसे-जैसे डेटाबेस ऊपर और नीचे जाएगा, हम डेटा को ढीला नहीं करते हैं, जब डेटाबेस कंटेनर बंद हो जाता है।"


आपको "... का उपयोग करें ..." से क्या मतलब है ? और "... किसी भी संभावित संकट में लेनदेन" ?
पीटर मोर्टेंसन

0

कुबेरनेट्स से लगातार वॉल्यूम क्लेम (पीवीसी) का उपयोग करें, जो डॉक कंटेनर प्रबंधन और शेड्यूलिंग टूल है:

लगातार वॉल्यूम

इस उद्देश्य के लिए कुबेरनेट का उपयोग करने के फायदे इस प्रकार हैं:

  • आप एनएफएस या अन्य स्टोरेज जैसे किसी भी स्टोरेज का उपयोग कर सकते हैं और नोड डाउन होने पर भी स्टोरेज की जरूरत नहीं है।
  • इसके अलावा इस तरह के वॉल्यूम में डेटा को कंटेनर के नष्ट होने के बाद भी बनाए रखा जा सकता है - ताकि दूसरे कंटेनर से इसे दोबारा प्राप्त किया जा सके।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.