macOS पर एक स्थानीय Docker प्रोजेक्ट के लिए, बाइंड माउंट (bind mount) का उपयोग तब करें जब आपको macOS और एक कंटेनर में समान फ़ाइलों को संपादित या जांचना हो; नेम्ड वॉल्यूम (named volume) का उपयोग तब करें जब कंटेनर के पास डेटाबेस या कैश जैसा स्थायी डेटा होना चाहिए। व्यावहारिक परीक्षण यह है कि क्या आपको Finder या किसी Mac ऐप में फ़ाइलों तक सीधे पहुंच (एक्सेस) की आवश्यकता है। यदि हाँ, तो विशिष्ट प्रोजेक्ट फ़ोल्डर को बाइंड करें। यदि नहीं, तो डेटा को Docker द्वारा प्रबंधित एक नेम्ड वॉल्यूम में रखें।
दोनों माउंट प्रकारों के बीच क्या अंतर है?
एक बाइंड माउंट आपके Mac के पाथ को कंटेनर के अंदर के पाथ से जोड़ता है। परिवर्तन दोनों तरफ से दिखाई देते हैं, जो इसे सोर्स कोड, कॉन्फ़िगरेशन और आपके प्रोजेक्ट फ़ोल्डर में रखी जाने वाली जनरेट की गई फ़ाइलों के लिए उपयोगी बनाता है। एक नेम्ड वॉल्यूम को Docker द्वारा संग्रहीत और प्रबंधित किया जाता है, और यह चुने गए पाथ पर एक कंटेनर से जुड़ा होता है। Docker स्थायी कंटेनर डेटा के लिए और जब होस्ट को सीधे फ़ाइल एक्सेस की आवश्यकता नहीं होती है, तब वॉल्यूम की अनुशंसा करता है। Docker का बाइंड माउंट दस्तावेज़ और वॉल्यूम दस्तावेज़ इन अंतरों का वर्णन करते हैं।
| आपका डेटा | आमतौर पर चुनें | कारण |
|---|---|---|
| सोर्स फ़ाइलें जिन्हें आप Mac IDE में संपादित करते हैं | बाइंड माउंट | Mac और कंटेनर प्रोजेक्ट फ़ाइलों को एक्सेस करते हैं। |
| डेटाबेस की डेटा डायरेक्टरी | नेम्ड वॉल्यूम | Docker macOS के माध्यम से प्रत्येक डेटाबेस फ़ाइल को साझा किए बिना स्थायी कंटेनर डेटा का प्रबंधन करता है। |
| वह आउटपुट जिसे आप Mac टूल्स से खोलना या उपयोग करना चाहते हैं | बाइंड माउंट | आउटपुट चुने गए Mac पाथ पर दिखाई देता है। |
| अस्थायी स्थिति जिसे हटाया जा सकता है | डिफ़ॉल्ट रूप से कोई नहीं | विचार करें कि क्या डेटा को वास्तव में स्थायित्व (persistence) की आवश्यकता है; जब तक आप इसे अलग से नहीं हटाते, कंटेनर हटाने के बाद भी एक नेम्ड वॉल्यूम बना रहता है। |
macOS के कारण यह चुनाव क्यों महत्वपूर्ण हो जाता है
Docker Desktop एक Linux वर्चुअल मशीन के अंदर Linux कंटेनर चलाता है, इसलिए यह Mac फ़ाइल सिस्टम और कंटेनरों के बीच एक्सेस में मध्यस्थता करता है। Docker के सेटिंग्स दस्तावेज़ में कहा गया है कि होस्ट फ़ाइलों को साझा करने से ओवरहेड जुड़ता है; बहुत अधिक फ़ाइलें साझा करने से CPU लोड बढ़ सकता है और फ़ाइल सिस्टम संचालन धीमा हो सकता है। यह विशेष रूप से अनुशंसा करता है कि जब परफ़ॉर्मेंस मायने रखती हो, तो गैर-कोड आइटम जैसे कैश और डेटाबेस को डेटा वॉल्यूम में रखा जाए। Docker Desktop सेटिंग्स
उस मार्गदर्शन का यह अर्थ नहीं है कि प्रत्येक बाइंड माउंट धीमा होगा। इसका मतलब है कि डेटा का प्रकार और आपका वर्कफ़्लो मायने रखता है। किसी प्रोजेक्ट का सोर्स ट्री एक स्वाभाविक बाइंड माउंट है क्योंकि Mac पर संपादन करना ही लक्ष्य होता है। डेटाबेस की लगातार बदलने वाली कई फ़ाइलों को आमतौर पर Finder में ब्राउज़ करने की आवश्यकता नहीं होती है, इसलिए एक नेम्ड वॉल्यूम एक बेहतर शुरुआती बिंदु है। असामान्य रूप से बड़े रिपॉजिटरी के लिए, Docker Desktop सिंक्रोनाइज़्ड फ़ाइल शेयर को भी एक सब्सक्रिप्शन-सीमित विकल्प के रूप में दस्तावेज़ित करता है जो बाइंड-माउंट परफ़ॉर्मेंस में सुधार कर सकता है; यह फ़ाइल-शेयरिंग व्यवहार को बदलता है, होस्ट-विज़िबल सोर्स और Docker-प्रबंधित वॉल्यूम के बीच के बुनियादी अंतर को नहीं। सिंक्रोनाइज़्ड फ़ाइल शेयर्स
एक प्रोजेक्ट फ़ोल्डर और एक डेटाबेस वॉल्यूम सेट अप करें
Terminal से, अपनी प्रोजेक्ट डायरेक्टरी में जाएं और कोड के लिए बाइंड माउंट का उपयोग करें। यह उदाहरण वर्तमान फ़ोल्डर को एक डिस्पोजेबल Alpine कंटेनर में /workspace पर माउंट करता है; अपने डेवलपमेंट कंटेनर के अनुसार इमेज या कमांड को बदलें।
docker run --rm -it \
--mount "type=bind,source=$PWD,target=/workspace" \
alpine:latest sh
डिफ़ॉल्ट macOS शेल्स में, $PWD वर्तमान डायरेक्टरी तक विस्तारित होता है। पूरे माउंट तर्क (argument) को कोट्स में रखने से विस्तारित होस्ट पाथ एक साथ रहता है, भले ही फ़ोल्डर के नाम में स्पेस हो। Docker का --mount सिंटैक्स स्पष्ट है। होस्ट पाथ मौजूद होना चाहिए: Docker दस्तावेज़ में बताया गया है कि मिसिंग सोर्स पाथ के कारण --mount डिफ़ॉल्ट रूप से विफल हो जाता है। एक बाइंड माउंट राइटेबल होता है जब तक कि उसे रीड-ओनली के रूप में चिह्नित न किया जाए, इसलिए एक कंटेनर प्रोसेस माउंट की गई Mac डायरेक्टरी में फ़ाइलों को बदल सकती है। जब कंटेनर को केवल प्रोजेक्ट को पढ़ने की आवश्यकता हो, तो readonly का उपयोग करें। बाइंड माउंट विकल्प और व्यवहार
उस डेटा के लिए जिसका स्वामित्व कंटेनर के पास है, इसके बजाय एक नेम्ड वॉल्यूम बनाएं और अटैच करें। यह कमांड अपनी मानक डेटा डायरेक्टरी पर वॉल्यूम के साथ PostgreSQL शुरू करती है:
docker volume create project-db
docker run --name project-postgres \
--mount type=volume,source=project-db,target=/var/lib/postgresql/data \
-e POSTGRES_PASSWORD='local-dev-only' \
-d postgres:17
यहाँ project-db स्थायी वॉल्यूम का नाम है, और POSTGRES_PASSWORD केवल उदाहरण के लिए स्थानीय सेटिंग है, न कि प्रोडक्शन सीक्रेट-मैनेजमेंट पैटर्न। कंटेनर को हटाने से नेम्ड वॉल्यूम अपने आप नहीं हटता है। वह स्थायित्व कंटेनर बदलने में मदद करता है, लेकिन इसका यह भी अर्थ है कि पुराना डेटा बना रह सकता है और एक नया रन इसका पुन: उपयोग कर सकता है। वॉल्यूम के नाम और उससे फिर से जुड़ने के लिए आवश्यक कंटेनर कॉन्फ़िगरेशन का रिकॉर्ड रखें।
विज़िबिलिटी, पोर्टेबिलिटी और क्लीनअप की जाँच करें
चुनने से पहले, पूछें: क्या मैं Mac सॉफ़्टवेयर के साथ इन सटीक फ़ाइलों को खोलूँगा या संपादित करूँगा? यदि हाँ, तो अपनी होम डायरेक्टरी के अनावश्यक रूप से बड़े हिस्से को साझा करने के बजाय, उस संकीर्ण (narrowest) फ़ोल्डर को बाइंड-माउंट करें जो कार्य पूरा करता है। Docker नोट करता है कि macOS और Linux फ़ाइल नाम के केस (अपरकेस/लोअरकेस) को अलग तरह से संभालते हैं, जो कंटेनर में केस-सेंसिटिव फ़ाइल नाम की समस्याओं को उजागर कर सकता है। यदि प्रोजेक्ट Linux के अंदर अलग तरह से व्यवहार करता है तो नामों की सावधानीपूर्वक जाँच करें। Docker Desktop फ़ाइल-शेयरिंग नोट्स
यदि फ़ाइलों को कंटेनर सीमा के पीछे रहना चाहिए, तो एक नेम्ड वॉल्यूम चुनें और Docker के वॉल्यूम कमांड के साथ इसे प्रबंधित करें। वॉल्यूम सामान्य प्रोजेक्ट स्थान पर कोई Finder फ़ोल्डर नहीं होता है; Docker Desktop अपने VM वातावरण में अपने Linux डेटा को संग्रहीत करता है। वॉल्यूम हटाने को डेटा हटाने के चरण के रूप में मानें, और महत्वपूर्ण वॉल्यूम सामग्री का अलग से बैकअप लें। Docker का बैकअप मार्गदर्शन नोट करता है कि कंटेनर इमेज में अटैच किए गए वॉल्यूम में संग्रहीत फ़ाइल सिस्टम परिवर्तन शामिल नहीं होते हैं। Docker Desktop बैकअप और रिस्टोर
एक बाइंड माउंट होस्ट पाथ के मौजूद होने पर निर्भर करता है, इसलिए यह विभिन्न डायरेक्टरी लेआउट वाले विभिन्न Mac पर कम पोर्टेबल हो सकता है। एक नेम्ड वॉल्यूम उस प्रोजेक्ट-पाथ निर्भरता से बचाता है, लेकिन इसके डेटा को अभी भी एक स्पष्ट बैकअप या माइग्रेशन योजना की आवश्यकता होती है। इसलिए कई Mac डेवलपमेंट प्रोजेक्ट्स के लिए सरल डिफ़ॉल्ट सोर्स कोड के लिए बाइंड माउंट और डेटाबेस स्थिति के लिए नेम्ड वॉल्यूम है, जिसमें प्रत्येक डेटा लोकेशन प्रोजेक्ट के Compose कॉन्फ़िगरेशन या रन निर्देशों में प्रलेखित (documented) होता है।
स्रोत
बाइंड माउंट्स — Docker
वॉल्यूम्स — Docker
अपनी Docker Desktop सेटिंग्स बदलें — Docker
सिंक्रोनाइज़्ड फ़ाइल शेयर्स — Docker
अपने Docker Desktop डेटा का बैकअप और उसे रिस्टोर कैसे करें — Docker