← सभी प्रश्न
डॉकर क्या है और यह कैसे काम करता है?
अक्सरआरंभिकDevOps

डॉकर क्या है और यह कैसे काम करता है?

संक्षिप्त उत्तर
डॉकर पैकेजिंग और कंटेनर के रूप में एप्लिकेशन चलाने के लिए एक खुला मंच है: पृथक प्रक्रियाएं जो होस्ट के लिनक्स कर्नेल को साझा करती हैं (नेमस्पेस और सीग्रुप के माध्यम से) पूर्ण वर्चुअल मशीन की आवश्यकता के बजाय। यह क्लाइंट-सर्वर मॉडल का उपयोग करता है: docker क्लाइंट dockerd डेमॉन को REST API पर कमांड भेजता है, जो छवियाँ बनाता है और उनसे कंटेनर चलाता है।

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

कंटेनर बनाम वर्चुअल मशीनें। एक वीएम हार्डवेयर को वर्चुअलाइज करता है और एक संपूर्ण अतिथि ओएस को अपने कर्नेल के साथ शिप करता है। कंटेनर एक पृथक प्रक्रिया है जो होस्ट के कर्नेल का उपयोग करती है। परिणामस्वरूप, कंटेनर हल्के होते हैं, एक सेकंड के अंश में शुरू होते हैं, और कम संसाधनों का उपयोग करते हैं। लेकिन एक कंटेनर हल्का वीएम नहीं है: यह होस्ट कर्नेल से बंधा होता है, और इसकी अलगाव सीमा वीएम की तुलना में कमजोर होती है। एक वीएम में हार्डवेयर-प्रबलित अलगाव होता है, जबकि साझा कर्नेल में भेद्यता को संभावित रूप से एक कंटेनर से बचाया जा सकता है - यह गति और घनत्व के लिए व्यापार-बंद है। होस्ट को कंटेनर प्रकार से मेल खाना चाहिए: लिनक्स कंटेनर को लिनक्स कर्नेल की आवश्यकता होती है, विंडोज कंटेनर को विंडोज कर्नेल की आवश्यकता होती है। MacOS और Windows पर, Docker डेस्कटॉप पारदर्शी रूप से एक छोटा Linux VM चलाता है (उदाहरण के लिए WSL2 के माध्यम से), इसलिए वहां Linux कंटेनर उस VM के कर्नेल को साझा करते हैं, आपके OS के कर्नेल को नहीं।

आर्किटेक्चर (क्लाइंट-सर्वर)। डॉकर के दस्तावेज़ के अनुसार:

  • docker क्लाइंट उपयोगकर्ताओं द्वारा डॉकर के साथ इंटरैक्ट करने का प्राथमिक तरीका है; docker run जैसे कमांड डेमॉन को भेजे जाते हैं।
  • dockerd डेमॉन कंटेनरों के निर्माण, संचालन और वितरण का "भारी भार उठाता है" और छवियों, कंटेनरों, नेटवर्क और वॉल्यूम जैसी वस्तुओं का प्रबंधन करता है।
  • क्लाइंट UNIX सॉकेट या नेटवर्क इंटरफ़ेस के माध्यम से REST API पर डेमॉन से बात करता है, ताकि वे विभिन्न मशीनों पर चल सकें।
  • एक रजिस्ट्री छवियों को संग्रहीत करती है; डिफ़ॉल्ट सार्वजनिक डॉकर हब है।

छवियां और कंटेनर। एक आसान सादृश्य: एक छवि एक वर्ग (या डिस्क पर एक प्रोग्राम) की तरह है, और एक कंटेनर इसका एक उदाहरण है (एक चल रही प्रक्रिया); आप एक छवि से कई कंटेनर प्रारंभ कर सकते हैं.

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

आइसोलेशन कैसे काम करता है (हुड के नीचे)। डॉकर्ड सीधे कर्नेल को कॉल नहीं करता है - यह कंटेनर जीवनचक्र प्रबंधन को कंटेनरड को सौंपता है, जो ओसीआई रनटाइम को आमंत्रित करता है; डॉकर में डिफ़ॉल्ट runc है, लेकिन रनटाइम प्लग करने योग्य है (crun, gVisor, Kata, आदि)। वास्तविक अलगाव लिनक्स कर्नेल सुविधाओं से आता है:

  • नेमस्पेस संसाधनों को अलग करता है (मैन7 पेज के अनुसार 8 प्रकार हैं: पीआईडी, नेटवर्क, माउंट, यूटीएस, आईपीसी, उपयोगकर्ता, सीग्रुप, समय)। एक प्रक्रिया केवल अपने स्वयं के पीआईडी, अपने स्वयं के नेटवर्क स्टैक इत्यादि को "देखती" है।
  • सीग्रुप (नियंत्रण समूह) संसाधन उपयोग (सीपीयू, मेमोरी, आई/ओ) के लिए सीमा और खाता।

सामान्य अनुवर्ती. छवि परतें कैश्ड हैं; docker compose मल्टी-कंटेनर ऐप्स चलाता है; डेटा वॉल्यूम के माध्यम से बना रहता है (डिफ़ॉल्ट रूप से एक कंटेनर अल्पकालिक होता है); और OCI छवि प्रारूप (छवि-कल्पना), रनटाइम (रनटाइम-कल्पना), और रजिस्ट्री वितरण प्रोटोकॉल (वितरण-कल्पना) को मानकीकृत करता है - ये तीन विनिर्देश पारिस्थितिकी तंत्र को अंतर-संचालनीय बनाए रखते हैं।

Dockerकंटेनर

अभी डाउनलोड करें और अपने कामों के लिए मुफ़्त में आज़माएँ!

Windows के लिए डाउनलोड करें
10 15 मुफ़्त क्रेडिट • क्रेडिट कार्ड की आवश्यकता नहींसंस्करण: लोड हो रहा है…

बिना इंस्टॉल किए - डाउनलोड करो और चलाओ। बिना रजिस्ट्रेशन - Google से लॉग इन।