MongoDB का उपयोग करने का मुख्य लाभ यह है कि इसका उपयोग करना आसान है। कोई भी आसानी से MongoDB स्थापित कर सकता है और मिनटों में उस पर काम करना शुरू कर सकता है। डॉकर इस प्रक्रिया को और भी आसान बनाता है।
डॉकर के बारे में एक अच्छी बात यह है कि बहुत कम प्रयास और कुछ कॉन्फ़िगरेशन के साथ, हम एक कंटेनर को स्पिन कर सकते हैं और किसी भी तकनीक पर काम करना शुरू कर सकते हैं। इस लेख में, हम डॉकर का उपयोग करके एक MongoDB कंटेनर को स्पिन करेंगे और सीखेंगे कि एक होस्ट सिस्टम से एक कंटेनर में स्टोरेज वॉल्यूम कैसे संलग्न करें।
डॉकर पर MongoDB परिनियोजित करने के लिए आवश्यक शर्तें
इस ट्यूटोरियल के लिए हमें केवल डॉकर को सिस्टम में स्थापित करने की आवश्यकता होगी।
एक MongoDB छवि बनाना
सबसे पहले एक फोल्डर बनाएं और उस फोल्डर के अंदर Dockerfile नाम से एक फाइल बनाएं:
$ mkdir mongo-with-docker
$ cd mongo-with-docker
$ vi Dockerfile
इस सामग्री को अपने Dockerfile में पेस्ट करें:
FROM debian:jessie-slim
RUN apt-get update && \
apt-get install -y ca-certificates && \
rm -rf /var/lib/apt/lists/*
RUN gpg --keyserver ha.pool.sks-keyservers.net --recv-keys 0C49F3730359A14518585931BC711F9BA15703C6 && \
gpg --export $GPG_KEYS > /etc/apt/trusted.gpg.d/mongodb.gpg
ARG MONGO_PACKAGE=mongodb-org
ARG MONGO_REPO=repo.mongodb.org
ENV MONGO_PACKAGE=${MONGO_PACKAGE} MONGO_REPO=${MONGO_REPO}
ENV MONGO_MAJOR 3.4
ENV MONGO_VERSION 3.4.18
RUN echo "deb http://$MONGO_REPO/apt/debian jessie/${MONGO_PACKAGE%-unstable}/$MONGO_MAJOR main" | tee "/etc/apt/sources.list.d/${MONGO_PACKAGE%-unstable}.list"
RUN echo "/etc/apt/sources.list.d/${MONGO_PACKAGE%-unstable}.list"
RUN apt-get update
RUN apt-get install -y ${MONGO_PACKAGE}=$MONGO_VERSION
VOLUME ["/data/db"]
WORKDIR /data
EXPOSE 27017
CMD ["mongod", "--smallfiles"]
फिर अपनी खुद की MongoDB डॉकर छवि बनाने के लिए इस कमांड को चलाएँ:
docker build -t hello-mongo:latest .
डॉकर फ़ाइल सामग्री को समझना
डॉकर फ़ाइल में प्रत्येक पंक्ति की संरचना इस प्रकार है:
INSTRUCTIONS arguments
- FROM:बेस इमेज जिससे हम कंटेनर बनाना शुरू करेंगे
- RUN:यह आदेश मूल छवि में MongoDB स्थापित करने के लिए सभी निर्देशों को निष्पादित करता है।
- ARG:डॉकर बिल्ड के लिए कुछ डिफ़ॉल्ट मान संग्रहीत करता है। ये मान कंटेनर के लिए उपलब्ध नहीं हैं। --build-arg तर्क का उपयोग करके छवि की निर्माण प्रक्रिया के दौरान ओवरराइड किया जा सकता है।
- ENV:ये मान निर्माण चरण के दौरान और कंटेनर लॉन्च करने के बाद भी उपलब्ध हैं। docker run कमांड को -e तर्क पास करके ओवरराइड किया जा सकता है।
- वॉल्यूम:कंटेनर में डेटा/डीबी वॉल्यूम संलग्न करता है।
- WORKDIR:किसी भी RUN या CMD कमांड को निष्पादित करने के लिए कार्य निर्देशिका सेट करता है।
- EXPOSE:सिस्टम (दुनिया के बाहर) को होस्ट करने के लिए कंटेनर के पोर्ट को एक्सपोज़ करता है।
- सीएमडी:कंटेनर में मोंगोड इंस्टेंस शुरू करता है।
छवि से MongoDB कंटेनर प्रारंभ करना
आप निम्न आदेश जारी करके MongoDB कंटेनर प्रारंभ कर सकते हैं:
docker run --name my-mongo -d -v /tmp/mongodb:/data/db -p 27017:27017 hello-mongo
- --नाम:कंटेनर का नाम।
- -d:कंटेनर को बैकग्राउंड (डेमॉन) प्रक्रिया के रूप में शुरू करेगा। कंटेनर को अग्रभूमि प्रक्रिया के रूप में चलाने के लिए इस तर्क को निर्दिष्ट न करें।
- -v:होस्ट सिस्टम के /tmp/mongodb वॉल्यूम को कंटेनर के /data/db वॉल्यूम में अटैच करें।
- -p:होस्ट पोर्ट को कंटेनर पोर्ट से मैप करें।
- अंतिम तर्क छवि का नाम/आईडी है।
यह जांचने के लिए कि कंटेनर चल रहा है या नहीं, निम्न आदेश जारी करें:
docker ps
इस कमांड का आउटपुट निम्न जैसा दिखना चाहिए:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a7e04bae0c53 hello-mongo "mongod --smallfiles" 7 seconds ago Up 6 seconds 0.0.0.0:27017->27017/tcp my-mongo
होस्ट से MongoDB एक्सेस करना
एक बार कंटेनर के उठने और चलने के बाद, हम इसे उसी तरह एक्सेस कर सकते हैं जैसे रिमोट मोंगोडीबी इंस्टेंस तक पहुंचना। आप इस उदाहरण से जुड़ने के लिए कम्पास या रोबोमोंगो जैसी किसी भी उपयोगिता का उपयोग कर सकते हैं। अभी के लिए, मैं कनेक्ट करने के लिए mongo कमांड का उपयोग करूंगा। अपने टर्मिनल में निम्न कमांड चलाएँ:
mongo 27017
यह मोंगो शेल खोलेगा जहाँ आप किसी भी मोंगो कमांड को निष्पादित कर सकते हैं। अब हम एक डेटाबेस बनाएंगे और उसमें कुछ डेटा जोड़ेंगे।
use mydb
db.myColl.insert({“name”: “severalnines”})
quit()
अब यह जांचने के लिए कि हमारी वॉल्यूम मैपिंग सही है या नहीं, हम कंटेनर को फिर से शुरू करेंगे और जांचेंगे कि इसमें हमारा डेटा है या नहीं।
Docker restart <container_id>
अब फिर से मोंगो शेल से कनेक्ट करें और इस कमांड को रन करें:
db.myColl.find().pretty()
आपको यह परिणाम देखना चाहिए:
{ "_id" : ObjectId("5be7e05d20aab8d0622adf46"), "name" : "severalnines" }
इसका मतलब है कि हमारा कंटेनर डेटाबेस डेटा को पुनरारंभ करने के बाद भी जारी रखता है। वॉल्यूम मैपिंग के कारण यह संभव है। कंटेनर हमारे सभी डेटा को होस्ट सिस्टम में /tmp/mongodb डायरेक्टरी में स्टोर करेगा। इसलिए जब आप कंटेनर को पुनरारंभ करते हैं, तो कंटेनर के अंदर का सभी डेटा मिटा दिया जाएगा और एक नया कंटेनर होस्ट tmp/mongodb निर्देशिका से डेटा तक पहुंच जाएगा।
MongoDB कंटेनर शेल एक्सेस करना
$ docker exec -it <container-name> /bin/bash
MongoDB कंटेनर लॉग एक्सेस करना
$ docker logs <container-name>
दूसरे कंटेनर से MongoDB कंटेनर से कनेक्ट करना
आप किसी अन्य कंटेनर से MongoDB कंटेनर से कनेक्ट कर सकते हैं --link तर्क का उपयोग करके जो निम्न संरचना का अनुसरण करता है।
--link <Container Name/Id>:<Alias>
जहां उपनाम लिंक नाम के लिए उपनाम है। हमारे Mongo कंटेनर को एक्सप्रेस-मोंगो कंटेनर से जोड़ने के लिए इस कमांड को चलाएँ।
docker run --link my-mongo:mongo -p 8081:8081 mongo-express
यह कमांड डॉकरहब से मोंगो-एक्सप्रेस छवि को खींचेगा और एक नया कंटेनर शुरू करेगा। मोंगो-एक्सप्रेस मोंगोडीबी के लिए एक व्यवस्थापक यूआई है। अब इस इंटरफेस को एक्सेस करने के लिए http://localhost:8081 पर जाएं।
Mongo-express Admin UIनिष्कर्ष
इस लेख में, हमने सीखा कि कैसे एक MongoDB छवि को खरोंच से तैनात किया जाए और Docker का उपयोग करके एक MongoDB कंटेनर कैसे बनाया जाए। हमने कुछ महत्वपूर्ण अवधारणाओं जैसे वॉल्यूम मैपिंग और लिंक का उपयोग करके किसी अन्य कंटेनर से MongoDB कंटेनर से कनेक्ट करना भी सीखा।
डॉकर कई MongoDB इंस्टेंस को तैनात करने की प्रक्रिया को आसान बनाता है। हम किसी भी संख्या में कंटेनर बनाने के लिए उसी MongoDB छवि का उपयोग कर सकते हैं जिसका उपयोग प्रतिकृति सेट बनाने के लिए किया जा सकता है। इस प्रक्रिया को और भी आसान बनाने के लिए, हम एक YAML फ़ाइल (कॉन्फ़िगरेशन फ़ाइल) लिख सकते हैं और सभी कंटेनरों को एकल कमांड के साथ परिनियोजित करने के लिए docker-compose उपयोगिता का उपयोग कर सकते हैं।