डॉकर और वर्चुअल मशीनों के बीच अंतर को समझना

डॉकर और वर्चुअल मशीनों के बीच अंतर को समझना
डॉकर और वर्चुअल मशीनों के बीच अंतर को समझना

डॉकर और वर्चुअल मशीन का परिचय

डॉकर और वर्चुअल मशीन (वीएम) दोनों अनुप्रयोगों को तैनात करने के लिए लोकप्रिय उपकरण हैं, लेकिन वे मौलिक रूप से अलग-अलग तरीकों से काम करते हैं। कई डेवलपर्स खुद को इस बात से हैरान पाते हैं कि डॉकर आमतौर पर वीएम से जुड़े ओवरहेड के बिना एक संपूर्ण फाइल सिस्टम, पृथक नेटवर्किंग और अन्य सुविधाएं कैसे प्रदान कर सकता है।

इस लेख का उद्देश्य डॉकर और पारंपरिक आभासी मशीनों के बीच अंतर को स्पष्ट करना है, यह समझाते हुए कि क्यों डॉकर को अक्सर सॉफ़्टवेयर तैनात करने के लिए अधिक हल्का और आसान माना जाता है। हम अंतर्निहित प्रौद्योगिकियों और उत्पादन वातावरण में डॉकर का उपयोग करने के व्यावहारिक लाभों पर विस्तार से चर्चा करेंगे।

आज्ञा विवरण
FROM डॉकर कंटेनर बनाने के लिए उपयोग की जाने वाली आधार छवि निर्दिष्ट करता है।
WORKDIR डॉकर कंटेनर के अंदर कार्यशील निर्देशिका सेट करता है।
COPY होस्ट मशीन से फ़ाइलों या निर्देशिकाओं को डॉकर कंटेनर में कॉपी करता है।
RUN निर्माण प्रक्रिया के दौरान डॉकर कंटेनर में एक कमांड निष्पादित करता है।
EXPOSE डॉकर को सूचित करता है कि कंटेनर रनटाइम पर निर्दिष्ट नेटवर्क पोर्ट पर सुनता है।
CMD प्रारंभ होने पर डॉकर कंटेनर के भीतर चलने के लिए कमांड निर्दिष्ट करता है।
config.vm.box वैग्रांट वर्चुअल मशीन के लिए उपयोग करने के लिए बेस बॉक्स को परिभाषित करता है।
config.vm.network नेटवर्क सेटिंग्स को कॉन्फ़िगर करता है, जैसे होस्ट से वीएम तक पोर्ट अग्रेषित करना।
config.vm.provision निर्दिष्ट करता है कि वर्चुअल मशीन को कैसे व्यवस्थित किया जाए, जैसे सेटअप के दौरान शेल स्क्रिप्ट चलाना।

Dockerfile और Vagrantfile की खोज

दिए गए उदाहरणों में, हमने सबसे पहले दिखाया कि Node.js एप्लिकेशन को तैनात करने के लिए Dockerfile कैसे बनाया जाए। डॉकरफ़ाइल आधार छवि को निर्दिष्ट करके शुरू होती है FROM कमांड, इस मामले में, आधिकारिक Node.js रनटाइम का उपयोग करते हुए। कंटेनर के अंदर कार्यशील निर्देशिका को सेट करना इसके साथ प्राप्त किया जाता है WORKDIR कमांड, जो सुनिश्चित करता है कि बाद के कमांड निर्दिष्ट निर्देशिका में निष्पादित हों। COPY कमांड का उपयोग package.json फ़ाइलों और एप्लिकेशन कोड को कंटेनर में स्थानांतरित करने के लिए किया जाता है। RUN कमांड तब कंटेनर के अंदर आवश्यक निर्भरताएँ स्थापित करता है। हम उस पोर्ट को उजागर करते हैं जिस पर एप्लिकेशन चलता है EXPOSE आदेश, और अंत में, CMD कमांड कंटेनर शुरू होने पर एप्लिकेशन को चलाने के लिए कमांड को परिभाषित करता है।

वैग्रांटफाइल उदाहरण के लिए, कॉन्फ़िगरेशन बेस बॉक्स को निर्दिष्ट करके शुरू होता है config.vm.box कमांड, यहां Ubuntu 20.04 का उपयोग किया गया है। नेटवर्क सेटिंग्स का उपयोग करके कॉन्फ़िगर किया गया है config.vm.network कमांड, जो होस्ट पर पोर्ट 8080 को अतिथि वीएम पर पोर्ट 80 पर अग्रेषित करता है, जिससे वीएम पर चलने वाली सेवाओं तक बाहरी पहुंच की अनुमति मिलती है। config.vm.provision कमांड का उपयोग शेल स्क्रिप्ट को चलाने के लिए किया जाता है जो पैकेज सूची को अद्यतन करता है और Apache2 को स्थापित करता है, VM को आवश्यक सॉफ़्टवेयर के साथ प्रावधानित करता है। ये कमांड वीएम वातावरण स्थापित करने के लिए बुनियादी कदमों को प्रदर्शित करते हैं, जो डॉकर द्वारा प्रदान किए गए कंटेनरीकृत वातावरण की तुलना में अधिक पारंपरिक दृष्टिकोण की पेशकश करते हैं।

Node.js एप्लिकेशन परिनियोजन के लिए एक Dockerfile बनाना

यह उदाहरण दर्शाता है कि Node.js एप्लिकेशन के लिए Dockerfile कैसे बनाया जाए, Docker कंटेनर के अंदर ऐप बनाने और चलाने के चरणों को दर्शाया गया है।

# Use an official Node.js runtime as a parent image
FROM node:14

# Set the working directory inside the container
WORKDIR /usr/src/app

# Copy package.json and package-lock.json to the container
COPY package*.json ./

# Install the application dependencies inside the container
RUN npm install

# Copy the rest of the application code to the container
COPY . .

# Expose the port the app runs on
EXPOSE 8080

# Define the command to run the app
CMD ["node", "app.js"]

वैग्रांट का उपयोग करके एक वर्चुअल मशीन स्थापित करना

यह उदाहरण दिखाता है कि एक साधारण वैग्रांटफाइल के साथ वैग्रांट का उपयोग करके एक वर्चुअल मशीन कैसे स्थापित की जाए, जो वीएम वातावरण को परिभाषित और कॉन्फ़िगर करने की प्रक्रिया को प्रदर्शित करता है।

# -*- mode: ruby -*-
# vi: set ft=ruby :

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
  # Use Ubuntu 20.04 as the base box
  config.vm.box = "ubuntu/focal64"

  # Forward port 8080 on the host to port 80 on the guest
  config.vm.network "forwarded_port", guest: 80, host: 8080

  # Provision the VM with a shell script
  config.vm.provision "shell", inline: <<-SHELL
    sudo apt-get update
    sudo apt-get install -y apache2
  SHELL
end

डॉकर और वर्चुअल मशीन को समझना

डॉकर और वर्चुअल मशीन (वीएम) के बीच एक प्रमुख अंतर यह है कि वे सिस्टम संसाधनों का उपयोग कैसे करते हैं। वीएम एक हाइपरवाइजर पर चलते हैं, जो हार्डवेयर का अनुकरण करता है और कई ऑपरेटिंग सिस्टम को एक होस्ट मशीन पर एक साथ चलाने की अनुमति देता है। इसके लिए प्रत्येक वीएम को एक पूर्ण अतिथि ऑपरेटिंग सिस्टम, पुस्तकालयों का अपना सेट और बायनेरिज़ शामिल करना आवश्यक है। यह न केवल महत्वपूर्ण सिस्टम संसाधनों का उपभोग करता है बल्कि तैनाती और रखरखाव के समग्र आकार और जटिलता को भी बढ़ाता है।

इसके विपरीत, डॉकर कंटेनरीकरण तकनीक का लाभ उठाता है, जो कई कंटेनरों को एक ही ऑपरेटिंग सिस्टम कर्नेल साझा करने की अनुमति देता है। प्रत्येक कंटेनर उपयोगकर्ता स्थान में एक पृथक प्रक्रिया के रूप में चलता है। इसका मतलब यह है कि वीएम की तुलना में कंटेनर शुरू करने के लिए बहुत हल्के और तेज़ होते हैं, क्योंकि उन्हें पूरे ओएस को बूट करने की आवश्यकता नहीं होती है। डॉकर एक स्तरित फाइल सिस्टम के माध्यम से फाइल सिस्टम अलगाव को प्राप्त करता है, जहां प्रत्येक कंटेनर की आधार छवि के शीर्ष पर अपनी फाइल सिस्टम परत होती है। नेटवर्क अलगाव को नेमस्पेस का उपयोग करके नियंत्रित किया जाता है, जिससे डॉकर को वीएम से जुड़े ओवरहेड के बिना प्रत्येक कंटेनर के लिए पृथक नेटवर्किंग वातावरण प्रदान करने की अनुमति मिलती है।

डॉकर और वर्चुअल मशीनों के बारे में अक्सर पूछे जाने वाले प्रश्न

  1. डॉकर और वीएम के बीच प्राथमिक अंतर क्या है?
  2. डॉकर होस्ट ओएस कर्नेल को साझा करने के लिए कंटेनरीकरण का उपयोग करता है, जिससे यह हल्का और तेज हो जाता है, जबकि वीएम को पूर्ण अतिथि ओएस और हाइपरवाइजर की आवश्यकता होती है।
  3. डॉकर कंटेनरों को अधिक कुशल क्यों माना जाता है?
  4. कंटेनर होस्ट ओएस कर्नेल को साझा करते हैं और न्यूनतम ओवरहेड रखते हैं, जिससे तेज़ स्टार्टअप समय और कुशल संसाधन उपयोग की अनुमति मिलती है।
  5. डॉकर फ़ाइल सिस्टम अलगाव कैसे प्राप्त करता है?
  6. डॉकर एक स्तरित फाइल सिस्टम का उपयोग करता है, जहां प्रत्येक कंटेनर में आधार छवि के शीर्ष पर अपनी फाइल सिस्टम परत होती है।
  7. वीएम के संदर्भ में हाइपरवाइजर क्या है?
  8. हाइपरवाइज़र एक ऐसा सॉफ़्टवेयर है जो हार्डवेयर का अनुकरण करता है, जिससे कई ऑपरेटिंग सिस्टम एक ही होस्ट मशीन पर एक साथ चल सकते हैं।
  9. डॉकर नेटवर्किंग अलगाव को कैसे संभालता है?
  10. डॉकर प्रत्येक कंटेनर के लिए पृथक नेटवर्किंग वातावरण प्रदान करने के लिए नेमस्पेस का उपयोग करता है।
  11. वीएम की तुलना में डॉकर छवि पर सॉफ़्टवेयर परिनियोजित करना आसान क्यों है?
  12. डॉकर छवियां सभी निर्भरताओं और कॉन्फ़िगरेशन को समाहित करती हैं, जिससे विभिन्न वातावरणों में स्थिरता सुनिश्चित होती है।
  13. डॉकर के लिए कुछ सामान्य उपयोग के मामले क्या हैं?
  14. डॉकर का उपयोग आमतौर पर माइक्रोसर्विसेज आर्किटेक्चर, निरंतर एकीकरण/निरंतर तैनाती (सीआई/सीडी), और पृथक विकास वातावरण के लिए किया जाता है।
  15. क्या डॉकर कंटेनर किसी ओएस पर चल सकते हैं?
  16. डॉकर कंटेनर किसी भी ओएस पर चल सकते हैं जो डॉकर का समर्थन करता है, लेकिन वे होस्ट ओएस कर्नेल साझा करते हैं।
  17. डॉकर में आधार छवि क्या है?
  18. एक आधार छवि डॉकर कंटेनरों के निर्माण के लिए शुरुआती बिंदु है, जिसमें अक्सर ओएस और बुनियादी निर्भरताएं शामिल होती हैं।

डॉकर बनाम वर्चुअल मशीन का सारांश

डॉकर और वर्चुअल मशीनों की तुलना करने में, प्राथमिक अंतर उनके संसाधन उपयोग और तैनाती दक्षता में निहित है। वर्चुअल मशीनें पूर्ण अतिथि ऑपरेटिंग सिस्टम और हाइपरवाइजर के साथ काम करती हैं, जिससे संसाधन की खपत अधिक होती है। इसके विपरीत, डॉकर कंटेनर होस्ट ओएस कर्नेल को साझा करते हैं, जिसके परिणामस्वरूप अधिक हल्का और चुस्त समाधान प्राप्त होता है। डॉकर एक स्तरित फ़ाइल सिस्टम और नेटवर्किंग नेमस्पेस के माध्यम से पृथक वातावरण प्राप्त करता है, जिससे यह संबंधित ओवरहेड के बिना वीएम को समान कार्यक्षमता प्रदान करने की अनुमति देता है। यह विभिन्न उत्पादन परिवेशों में डॉकर छवियों पर सॉफ़्टवेयर परिनियोजन को अधिक कुशल, सुसंगत और प्रबंधन में आसान बनाता है।

डॉकर और वर्चुअल मशीनों पर अंतिम विचार

निष्कर्ष में, डॉकर द्वारा कंटेनरीकरण का उपयोग संसाधन उपयोग को कम करके और तैनाती प्रक्रियाओं को सरल बनाकर पारंपरिक आभासी मशीनों पर एक महत्वपूर्ण लाभ प्रदान करता है। होस्ट ओएस कर्नेल को साझा करके और पृथक फ़ाइल सिस्टम और नेटवर्किंग का उपयोग करके, डॉकर आधुनिक एप्लिकेशन परिनियोजन के लिए एक मजबूत लेकिन हल्का समाधान प्रदान करता है। इन अंतरों को समझने से डेवलपर्स को कुशल और स्केलेबल एप्लिकेशन प्रबंधन सुनिश्चित करते हुए, उनकी आवश्यकताओं के लिए सही टूल चुनने में मदद मिल सकती है।