एक बदलाव के लिए, आज हमारे पास Docker कंटेनर ऑटोमेशन फ्रेमवर्क पर एक अपेक्षाकृत छोटा और सरल लेख होगा। हम सीखेंगे कि कंटेनरों के अंदर डेटा कैसे माउंट करें, डेटा कैसे साझा करें, और अपने इंस्टेंस को उपयोगी सिस्टम बनाने के लिए आवश्यक सभी बिट्स और टुकड़े।
अब तक, आपने एक बहुत विस्तृत परिचयात्मक गाइड का आनंद लिया है - और यह एक उदार शब्द है - फिर हम सेवाओं, नेटवर्किंग में डूबे, और कुछ कठिन त्रुटियों को हल किया। यह ट्यूटोरियल परंपरा को जारी रखता है, चरण दर चरण, इसलिए यह सरल और क्रिस्टल क्लियर होना चाहिए। आइए शुरू करें।
मूल बातें
होस्ट डेटा को कंटेनर के अंदर उजागर करने की प्रक्रिया अपेक्षाकृत सरल है, और यह माउंट कमांड जैसा दिखता है। आप एक स्रोत डायरेक्टरी या फाइल प्रदान करते हैं, और इसे एक लक्ष्य डायरेक्टरी या फाइल पर इंगित करते हैं। बहुत कुछ पोर्ट्स की तरह, जिसमें होस्ट और कंटेनर के टुकड़े होते हैं।
docker run -it -v /root/testing:/dedoimedo centos:latest /bin/bash
हम Bash शेल के साथ एक नया कंटेनर चला रहे हैं, और हम होस्ट के /root/testing डायरेक्टरी को कंटेनर के अंदर /dedoimedo के तहत माउंट करने जा रहे हैं। होस्ट पर, स्रोत कुछ भी हो सकता है, जिसमें NFS माउंट शामिल हैं, जो इसे प्रभावी रूप से एक प्यारा रिमोट डेटा शेयरिंग थिंगी में बदल देता है। व्यवहार में, NFS री-एक्सपोर्ट को रोकता है, लेकिन यह वास्तव में धोखा है, क्योंकि आप अभी भी उसी होस्ट पर वही काम कर रहे हैं, तरह के।
कंटेनर के अंदर, अब आप /dedoimedo डायरेक्टरी की सामग्री की जांच कर सकते हैं, और देख सकते हैं कि अंदर क्या संग्रहीत है। हालांकि, एक मानक, डिफ़ॉल्ट CentOS बिल्ड पर, जो हमारा टेस्ट केस है, आप शायद एक त्रुटि से टकराएंगे। और यह प्रासंगिक है, क्योंकि आप एक समान समस्या का सामना कर सकते हैं, और डीबग करने के लिए तैयार और इच्छुक होना चाहिए, साथ ही, यह दिखाता है कि सुरक्षा सुविधाएं कभी-कभी हानिकारक हो सकती हैं।
ls
ls: cannot open directory .: Permission denied
सुरक्षा सुविधाएं। हां, बिल्कुल, SELinux। सौभाग्य से, इस मुद्दे को ठीक किया जा सकता है। आप मॉड्यूल के लिए प्रवर्तन नीति बदल सकते हैं, या एक नया नियम जोड़ सकते हैं जो कंटेनरों को माउंटेड वॉल्यूम तक पहुंचने की अनुमति देगा।
setenforce 0
और नियम, यदि आप उस रास्ते जाना चाहते हैं:
chcon -Rt svirt_sandbox_file_t /<volume>
फिर आप सामग्री देखेंगे, और खेलना, फाइलें लिखना आदि शुरू कर सकते हैं। वास्तव में, अगर हम पहले होस्ट को देखते हैं, तो माउंटेड डायरेक्टरी के अंदर एक नई फाइल बनाते हैं, तो हम नीचे जैसा कुछ देखेंगे, निश्चित रूप से वास्तविक सामग्री को छोड़कर:
कंटेनरों के बीच साझाकरण
बहुत कुछ वैसा ही जैसा हमने नेटवर्किंग के साथ किया था, आप डेटा को कंटेनरों में से एक के अंदर दूसरों के लिए उजागर करना चाह सकते हैं, ताकि वे डेटा वॉल्यूम कंटेनर बन जाएं। यदि आप अपने कंटेनरों की कार्यक्षमता को समूहित करते हैं तो यह बहुत उपयोगी हो सकता है, साथ ही आप महत्वपूर्ण मात्रा में स्थान बचा सकते हैं। इसके अलावा, आप कंटेनरों के बीच वॉल्यूम को चेन भी कर सकते हैं, जो आपको यह सीमित करने की अनुमति देता है कि एक साथ होस्ट डेटा तक कितने अलग-अलग कंटेनरों की पहुंच है। यह उपयोगी हो सकता है यदि आपके पास होस्ट पर एक मजबूत राइट लॉकिंग तंत्र नहीं है, जो UNIX जैसे सिस्टम के लिए लगभग हमेशा सच है।
आइए एक त्वरित उदाहरण करें। हम data-source नाम के साथ एक कंटेनर शुरू करेंगे। यह /data माउंट पॉइंट के साथ शुरू होगा। वैकल्पिक रूप से, हम यह सुनिश्चित कर सकते हैं कि /data होस्ट पर एक डायरेक्टरी से मैप किया गया है, लेकिन अभी के लिए यह ठीक है। फिर, हम एक दूसरा कंटेनर बनाएंगे, जो data-source नाम के कंटेनर से एक वॉल्यूम का उपयोग करेगा।
docker run -ti --name data-source -v /data centos:latest /bin/bash
docker run -ti --volumes-from data-source centos:latest /bin/bash
अब, अगर हम अपने दो कंटेनरों को देखते हैं, तो दोनों के पास /data डायरेक्टरी होगी, सिवाय इसके कि data-source उन सभी कंटेनरों के लिए डेटा का तथाकथित प्रवेश बिंदु होगा जिन्हें -volumes-from विकल्प के साथ चलाया गया है। आप बहुत सारे डेटा स्थान बचा सकते हैं, नियंत्रित कर सकते हैं कि आपके कंटेनर मूल डेटा का उपयोग और उपयोग कैसे करते हैं, और आप कई सॉफ्टवेयर कॉन्फ़िगरेशन को अधिक आसानी से परीक्षण कर सकते हैं। कुल मिलाकर बहुत साफ-सुथरा।
[root@68d3ed5e243a data]# pwd
/data
[root@68d3ed5e243a data]# touch STUFF
[root@68d3ed5e243a data]#
और दूसरा कंटेनर:
[root@7aed935cc156 /]# ls -la /data
total 4
drwxr-xr-x. 2 root root 18 May 1 11:46 .
drwxr-xr-x. 18 root root 4096 May 1 11:45 ..
-rw-r--r--. 1 root root 0 May 1 11:46 STUFF
[root@7aed935cc156 /]#
आगे क्या?
मानो या न मानो, हम इस बिंदु पर रुकेंगे। कुछ अन्य चरण हैं जो हम कर सकते थे, जैसे बैकअप, डेटा हटाना और ऐसे, लेकिन यह एक अलग विषय है। फिलहाल, हमारे पास डेटा वॉल्यूम के साथ काम करना शुरू करने और उन्हें कंटेनरों के अंदर माउंट पॉइंट के रूप में उजागर करने के लिए पर्याप्त है। किसी भी मामले में, एक नियम के रूप में, आप पर्यावरण उपकरण और कॉन्फ़िगरेशन के लिए रीड-ओनली डेटा का उपयोग करना चाह सकते हैं, बड़े डेटा के लिए वॉल्यूम कंटेनर, परीक्षण के लिए छोटे, सरल डायरेक्टरी और माउंट पॉइंट, और ऐसे।
निष्कर्ष
Docker वॉल्यूम हैंडलिंग अपेक्षाकृत सरल है, और मेरा मानना है कि कंटेनर तकनीक के इस पहलू को अभी भी परिपक्वता स्तर तक पहुंचने से पहले बढ़ने की जरूरत है जैसे फ्रेमवर्क के अन्य टुकड़े। यह बहुत फीचर-रिच नहीं है, और डेटा को नियंत्रित करने के अतिरिक्त तरीके होने चाहिए, जिसमें स्नैपशॉट, डेटा वितरण और समानांतरकरण के लिए अंतर्निहित समर्थन, और बहुत कुछ शामिल है।
खैर, बहुत कम से कम, आपने इस ट्यूटोरियल में कुछ नई चीजें सीखी हैं, जिसमें माउंट पॉइंट बनाने और डेटा वॉल्यूम माउंट करने, उन्हें चेन करने, साथ ही रास्ते में कुछ छोटी-मोटी समस्याओं को ठीक करने का तरीका शामिल है। शायद यह गाइड बाकी की तुलना में थोड़ा नग्न लगता है, लेकिन हमें हमेशा भारी, कभी न खत्म होने वाले लेखों की आवश्यकता नहीं होती। कभी-कभी, इसे छोटा और मीठा रखना ठीक है। वास्तव में, उस बमशेल पर, अंत।
चीयर्स।