झुंड मोड स्वयं वॉल्यूम के साथ कुछ भी अलग नहीं करता है, यह आपके द्वारा नोड पर प्रदान किए गए किसी भी वॉल्यूम माउंट कमांड को चलाता है जहां कंटेनर चल रहा है। यदि आपका वॉल्यूम माउंट उस नोड के लिए स्थानीय है, तो आपका डेटा स्थानीय रूप से उस नोड पर सहेजा जाएगा। नोड्स के बीच डेटा को स्वचालित रूप से स्थानांतरित करने के लिए कार्यक्षमता में कोई अंतर्निहित नहीं है।
GlusterFS जैसे कुछ सॉफ़्टवेयर आधारित स्टोरेज सॉल्यूशन हैं, और Docker ने एक Infinit कहा है जो अभी GA नहीं है और उस पर विकास ने EE में कुबेरनेट्स एकीकरण के लिए एक पीछे की सीट ले ली है।
विशिष्ट परिणाम यह है कि आपको या तो अपने आवेदन के भीतर भंडारण की प्रतिकृति का प्रबंधन करने की आवश्यकता है (जैसे कि वर्ड और अन्य बेस्ड एल्गोरिदम) या आप एक बाहरी स्टोरेज सिस्टम पर अपने माउंट का प्रदर्शन करते हैं (उम्मीद है कि अपने स्वयं के हा के साथ)। बाहरी भंडारण प्रणाली को माउंट करने के दो विकल्प हैं, ब्लॉक या फाइल आधारित। ब्लॉक आधारित भंडारण (जैसे ईबीएस) आमतौर पर उच्च प्रदर्शन के साथ आता है, लेकिन यह केवल एक नोड पर मुहिम शुरू करने तक सीमित है। इसके लिए, आपको आमतौर पर अपने डॉक नोड को उस ब्लॉक स्टोरेज तक पहुँच देने के लिए एक 3 पार्टी वॉल्यूम प्लगइन ड्राइवर की आवश्यकता होगी। फ़ाइल आधारित भंडारण (जैसे ईएफएस) का प्रदर्शन कम है, लेकिन अधिक पोर्टेबल है, और इसे एक साथ कई नोड्स पर लगाया जा सकता है, जो एक प्रतिकृति सेवा के लिए उपयोगी है।
सबसे आम फ़ाइल आधारित नेटवर्क स्टोरेज NFS है (यह EFS द्वारा उपयोग किया जाने वाला एक ही प्रोटोकॉल है)। और आप बिना किसी 3rd पार्टी प्लगइन ड्राइवरों को माउंट कर सकते हैं। दुर्भाग्य से "स्थानीय" वॉल्यूम प्लगइन ड्राइवर का नाम है जो डॉक करने वाले जहाज आपको किसी भी मान को पास करने का विकल्प देता है जिसे आप चालक विकल्पों के साथ माउंट कमांड करना चाहते हैं, और कोई विकल्प नहीं है, यह डॉक निर्देशिका में संस्करणों को स्टोर करने में चूक करता है / var / lib / डोकर / संस्करणों। विकल्पों के साथ, आप इसे एनएफएस मापदंडों को पारित कर सकते हैं, और यह एनएफएस होस्टनाम पर एक DNS लुकअप भी करेगा (आपके पास सामान्य रूप से एनएफएस के साथ कुछ नहीं है)। स्थानीय वॉल्यूम ड्राइवर का उपयोग करके NFS फाइल सिस्टम को माउंट करने के विभिन्न तरीकों का एक उदाहरण है:
# create a reusable volume
$ docker volume create --driver local \
--opt type=nfs \
--opt o=nfsvers=4,addr=192.168.1.1,rw \
--opt device=:/path/to/dir \
foo
# or from the docker run command
$ docker run -it --rm \
--mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,\"volume-opt=o=nfsvers=4,addr=192.168.1.1\",volume-opt=device=:/host/path \
foo
# or to create a service
$ docker service create \
--mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,\"volume-opt=o=nfsvers=4,addr=192.168.1.1\",volume-opt=device=:/host/path \
foo
# inside a docker-compose file
...
volumes:
nfs-data:
driver: local
driver_opts:
type: nfs
o: nfsvers=4,addr=192.168.1.1,rw
device: ":/path/to/dir"
...
यदि आप अंत में कंपोज फाइल उदाहरण का उपयोग करते हैं, तो ध्यान दें कि वॉल्यूम में परिवर्तन (जैसे कि सर्वर पथ या पता अपडेट करना) मौजूदा नाम वाले संस्करणों में तब तक प्रदर्शित नहीं होते हैं जब तक वे मौजूद हैं। आपको नए वॉल्यूम के साथ इसे फिर से बनाने की अनुमति देने के लिए, या तो अपनी मात्रा का नाम बदलने या इसे हटाने की आवश्यकता है।
अन्य सामान्य समस्या जो मैं सबसे अधिक एनएफएस उपयोग में देखता हूं, वह है "रूट स्क्वैश" सर्वर पर सक्षम होना। यह अनुमति के मुद्दों में परिणाम होता है जब कंटेनर वॉल्यूम के रूप में फ़ाइलों को लिखने का प्रयास करते हैं। आपके पास समान यूआईडी / जीआईडी अनुमति मुद्दे भी हैं जहां कंटेनर यूआईडी / जीआईडी वह है जिसे वॉल्यूम को लिखने के लिए अनुमतियों की आवश्यकता होती है, जिसके लिए डायरेक्ट्री ऑनरशिप और एनएफएस सर्वर पर समायोजित करने की अनुमति की आवश्यकता हो सकती है।