हमारे उपयोगकर्ताओं द्वारा पूछे जाने वाले कुछ सबसे सामान्य प्रश्न डॉकर में मारियाडीबी समर्थन के बारे में हैं, और विशेष रूप से इसका उपयोग विशिष्ट विकास या उत्पादन परिनियोजन में कैसे किया जा सकता है। लेखों की यह श्रृंखला कुछ Docker और MariaDB उपयोग मामलों को कवर करने का प्रयास करेगी।
MariaDB के लिए Docker को क्यों चुनें?
- डॉकर कंटेनरों का उपयोग किसी भी वातावरण में अनुप्रयोगों का परीक्षण, परिनियोजन और रिलीज करने के लिए किया जा सकता है।
- डॉकर परिनियोजन को आसानी से स्वचालित किया जा सकता है, परिनियोजन वातावरण बना सकते हैं और उन्हें मंचन और उत्पादन में आसानी से पुन:प्रस्तुत कर सकते हैं।
- डॉकर हल्का वर्चुअलाइजेशन है। हाइपरविजर की आवश्यकता नहीं है, और एक मारियाडीबी डॉकर कंटेनर को बिना किसी ध्यान देने योग्य ओवरहेड के सामान्य मारियाडीबी इंस्टॉलेशन के समान ही प्रदर्शन करना चाहिए।
- डॉकर अज्ञेयवादी है - एक बार जब आप अपने ओएस पर डॉकर स्थापित कर लेते हैं, तो कंटेनर चलाने के निर्देश बिल्कुल समान होते हैं, चाहे आप CentOS, डेबियन या उबंटू, या यहां तक कि मैक ओएस एक्स और विंडोज चला रहे हों।
डॉकर कंटेनरों के बारे में कुछ महत्वपूर्ण बिंदु
- डॉकर कंटेनर अपरिवर्तनीय हैं। प्रारंभ के बाद उन्हें आसानी से संशोधित नहीं किया जा सकता (जब तक कि आप इसे संलग्न नहीं करते और सब कुछ तोड़ नहीं देते)।
- डिफ़ॉल्ट रूप से और उपरोक्त के कारण, डेटा स्थायी नहीं होता है। इसका समाधान करने के लिए डॉकर डेटा वॉल्यूम का उपयोग करता है। मारियाडीबी कंटेनर डेटा को संरक्षित करने के लिए वॉल्यूम का उपयोग करता है (इसके बारे में बाद में)।
डॉकर में मारियाडीबी राज्य
डॉकर टीम और समुदाय के कई प्रयासों के लिए धन्यवाद, मारियाडीबी को हमेशा कुछ वर्षों से डॉकर में बहुत अच्छी तरह से समर्थन मिला है। आज तक, डॉकर तीनों मारियाडीबी रिलीज का समर्थन करता है:5.5, 10.0 और 10.1। मारियाडीबी डॉकटर कंटेनर में निम्नलिखित विशेषताएं हैं:
- MariaDB रूट पासवर्ड को पर्यावरण चर के माध्यम से सेट या जेनरेट किया जा सकता है।
- उपरोक्त प्रक्रिया के माध्यम से एक नया उपयोगकर्ता और एक खाली डेटाबेस बनाया जा सकता है।
- उदाहरण में एक डिफ़ॉल्ट /var/lib/mysql लगातार डेटा वॉल्यूम है, जिसे आप docker को आंतरिक रूप से प्रबंधित करने या अपनी पसंद की निर्देशिका में माउंट करने दे सकते हैं।
- कंटेनर इंस्टेंस को मौजूदा डेटा वॉल्यूम (उदाहरण के लिए बैकअप) पर माउंट किया जा सकता है।
- नेटवर्क पोर्ट को होस्ट की ओर से मनमाने पोर्ट से जोड़ा जा सकता है।
- मारियाडीबी नॉलेज बेस में डॉकटर के बारे में एक विस्तृत दस्तावेज़ीकरण लेख है। इसे पढ़ें!
डॉकर केस #1:मल्टी टेनेंसी
मारियाडीबी और डॉकर के लिए एक सामान्य उपयोग का मामला एक ही भौतिक मेजबानों पर मारियाडीबी के कई उदाहरण चला रहा है। MySQL सैंडबॉक्स और अन्य जैसे समाधान पहले से मौजूद हैं, हालांकि उनमें से कोई भी डॉकर द्वारा प्रदान की जाने वाली लचीलापन, उपयोग में आसानी और शक्ति प्रदान नहीं करता है।
अपनी बात को स्पष्ट करने के लिए आइए मारियाडीबी के तीन अलग-अलग उदाहरणों को शुरू करें, जिनमें से प्रत्येक एक अलग प्रमुख संस्करण चला रहे हैं:
docker run -d -p 3301:3306 -v ~/mdbdata/mdb55:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=admin --name mdb55 mariadb:5.5
docker run -d -p 3302:3306 -v ~/mdbdata/mdb10:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=admin --name mdb10 mariadb:10.0
docker run -d -p 3303:3306 -v ~/mdbdata/mdb11:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=admin --name mdb11 mariadb:10.1
डॉकर स्वचालित रूप से आधिकारिक मारियाडब छवियों को रिपॉजिटरी से खींचेगा और उन्हें लॉन्च करेगा। अब हम दिए गए पोर्ट और पासवर्ड का उपयोग करके इनमें से किसी भी उदाहरण से आसानी से जुड़ सकते हैं:
$ mysql -u root -padmin -h 127.0.0.1 -P3302 Welcome to the MariaDB monitor. Commands end with ; or g. Your MariaDB connection id is 2 Server version: 10.0.22-MariaDB-1~jessie mariadb.org binary distribution
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
ध्यान दें कि हमारा प्रत्येक इंस्टेंस ~/mdbdata के अंतर्गत स्थित एक स्थायी डेटा वॉल्यूम का उपयोग करेगा निर्देशिका - डॉकर स्वचालित रूप से हमारे लिए यह निर्देशिका ट्री बनाएगा।
अब जब हमने ऐसा कर लिया है, तो आइए डॉकर की उन्नत सुविधाओं में तल्लीन करें। डॉकर लिनक्स नियंत्रण समूहों (सीग्रुप्स) का समर्थन करता है, जिसका उपयोग संसाधन उपयोग को सीमित करने, खाते या अलग करने के लिए किया जा सकता है। मान लें कि हम चाहते हैं कि हमारा मारियाडीबी 10.1 इंस्टेंस (नाम mdb11 ) दो अन्य उदाहरणों की तुलना में उच्च CPU प्राथमिकता रखने के लिए। इस मामले में हम mdb10 . के CPU शेयरों को कम कर सकते हैं और mdb55 . प्रत्येक इंस्टेंस में डिफ़ॉल्ट रूप से 1024 अधिकतम CPU शेयर होते हैं, तो चलिए अपने mdb55 को फिर से बनाते हैं और mdb10 512 CPU वाले कंटेनर प्रत्येक शेयर करते हैं।
प्रस्तावना में हमने कहा था कि डॉकर कंटेनर अपरिवर्तनीय हैं। यदि हम अपने कंटेनरों के मापदंडों को बदलना चाहते हैं तो हमें उन्हें हटाना होगा। यह कोई समस्या नहीं है क्योंकि हमने ~/mdbdata में लगातार डेटा वॉल्यूम को परिभाषित किया है, इसलिए हमारे डेटाबेस की वास्तविक सामग्री तब बनी रहेगी जब हम कंटेनरों को फिर से बनाएंगे।
docker rm -f mdb55 mdb10
docker run -d -p 3301:3306 --cpu-shares=512 -v ~/mdbdata/mdb55:/var/lib/mysql --name mdb55 mariadb:5.5
docker run -d -p 3302:3306 --cpu-shares=512 -v ~/mdbdata/mdb10:/var/lib/mysql --name mdb10 mariadb:10.0
हमने दो मारियाडीबी उदाहरणों को 512 सीपीयू शेयरों के साथ फिर से बनाया है। हालांकि यह एक सॉफ्ट लिमिट है, और इसे केवल तभी लागू किया जाता है जब प्रोसेस सीपीयू साइकिल के लिए प्रतिस्पर्धा करता है। यदि अन्य इंस्टेंस निष्क्रिय हैं, तो कोई भी इंस्टेंस सभी CPU के 100% तक उपयोग करने में सक्षम है। व्यवहार में, इसका मतलब यह है कि यदि सभी तीन उदाहरण एक साथ सीपीयू का उपयोग करते हैं, तो दो पहले कंटेनरों में से प्रत्येक, जिसमें प्रत्येक में 512 शेयर हैं, (mdb55 और mdb10 ) सभी CPU के 25% तक उपयोग करने में सक्षम होगा, जबकि तीसरा कंटेनर, जिसमें 1024 शेयर हैं, सभी CPU के 50% तक उपयोग करने में सक्षम होंगे।
एक अन्य विकल्प इंस्टेंस को एक विशिष्ट सीपीयू कोर से बांधना है, तो चलिए कंटेनरों को फिर से बनाते हैं और ऐसा करते हैं:
docker rm -f mdb55 mdb10 mdb11
docker run -d -p 3301:3306 --cpuset-cpus=0 -v ~/mdbdata/mdb55:/var/lib/mysql --name mdb55 mariadb:5.5
docker run -d -p 3302:3306 --cpuset-cpus=1 -v ~/mdbdata/mdb10:/var/lib/mysql --name mdb10 mariadb:10.0
docker run -d -p 3303:3306 --cpuset-cpus=2-3 -v ~/mdbdata/mdb10:/var/lib/mysql --name mdb11 mariadb:10.1
ऊपर के उदाहरण में, 4 CPU कोर सिस्टम दिया गया है, मेरे कंटेनर mdb55 और mdb10 प्रत्येक एक अलग, एकल CPU कोर पर चलेगा जबकि mdb11 दोनों शेष कोर होंगे।
हम अपने कंटेनर डिस्क और मेमोरी संसाधनों तक पहुंचने के तरीके को भी नियंत्रित कर सकते हैं, जो निश्चित रूप से एक व्यस्त सिस्टम पर उपयोगी है - उदाहरण के लिए, आप अपने लोड परीक्षण उदाहरणों की सभी डिस्क का उपयोग करके एक भगोड़ा विकास क्वेरी नहीं चाहते हैं। जबकि मेमोरी लिमिट सीधी होती है, ब्लॉक IO शेयर उसी तरह काम करते हैं जैसे CPU शेयर करते हैं, सिवाय इसके कि डिफ़ॉल्ट ब्लॉक IO शेयर 10 से 1000 रेंज में 500 का होता है।
आइए हमारे दो पहले कंटेनरों को 512M मेमोरी और 250 ब्लॉक IO शेयरों तक सीमित करें:
docker rm -f mdb55 mdb10
docker run -d -p 3301:3306 --blkio-weight=250 --memory=512M -v ~/mdbdata/mdb55:/var/lib/mysql --name mdb55 mariadb:5.5
docker run -d -p 3302:3306 --blkio-weight=250 --memory=512M -v ~/mdbdata/mdb10:/var/lib/mysql --name mdb10 mariadb:10.0
इसी तरह हमने सीपीयू शेयर उदाहरण में देखा है, यदि तीन उदाहरण आईओ के लिए प्रतिस्पर्धा करते हैं, तो दो पहले कंटेनरों में से प्रत्येक उपलब्ध आईओ क्षमता के 25% तक सीमित होगा, तीसरा कंटेनर शेष क्षमता तक सीमित होगा, उदा। 50%।
डॉकर रनटाइम बाधाओं के लिए और भी बहुत कुछ है जो हम इस लेख में यहां बात कर रहे हैं। सभी संभावित विकल्पों के बारे में जानने के लिए कृपया व्यापक डॉकर रन संदर्भ पढ़ें।