मुख्य सामग्री पर जाएँ

Docker नेटवर्किंग में महारत: कस्टम ब्रिज से Swarm-रेडी आर्किटेक्चर तक

Docker नेटवर्क्स पर पूर्ण हैंड्स-ऑन गाइड, जिसमें नेटवर्क ड्राइवर, IP प्रबंधन, Swarm ओवरले सेटअप, और स्केलेबल, सुरक्षित कंटेनराइज्ड सिस्टम्स के लिए परफॉर्मेंस ट्यूनिंग शामिल है।
· 12 मि॰ पढ़ें

AI के साथ खोजें

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

इस संदर्भ में सबसे शक्तिशाली टूल्स में से एक docker network create कमांड है, जो DevOps इंजीनियरों और डेवलपर्स को अपनी एप्लिकेशन आवश्यकताओं के अनुरूप कस्टम नेटवर्क परिभाषित करने देता है।

इसीलिए आज मैं आपको चरण-दर-चरण बताऊंगा कि इन Docker नेटवर्क्स को प्रभावी ढंग से कैसे बनाया और प्रबंधित किया जाए। 

यदि आप Docker में नए हैं, तो कुछ हैंड्स-ऑन अनुभव के लिए हमारी स्किल ट्रैक Docker और Kubernetes के साथ Containerization और Virtualization अवश्य देखें। 

Docker Networking क्या है?

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

यह अनुभाग आपको Docker नेटवर्किंग—जो Docker का एक मुख्य घटक है—के बारे में बुनियादी जानकारी देगा, और यह भी कि आपकी एप्लिकेशन आवश्यकताओं के लिए कौन-सा नेटवर्क कॉन्फ़िगरेशन उपयुक्त रहेगा, इसका आकलन कैसे करें। लेकिन शुरू करने से पहले, यदि आप Docker में बिल्कुल नए हैं, तो मैं आपको Introduction to Docker देखने की जोरदार सिफारिश करता/करती हूं, ताकि Docker नेटवर्किंग में गहराई से उतरने से पहले आपकी मजबूत नींव बन सके।

नेटवर्क ड्राइवर: Docker नेटवर्किंग की बुनियाद

Docker, कंटेनर कैसे जुड़ते और संवाद करते हैं, यह बताने के लिए नेटवर्क ड्राइवरों का उपयोग करता है। प्रत्येक ड्राइवर परिभाषित करता है कि वह कंटेनर नेटवर्किंग को कैसे संभालेगा। परिणामस्वरूप, Docker के प्रत्येक मुख्य नेटवर्क ड्राइवर के लिए प्रदर्शन, आइसोलेशन और जटिलता के स्तर अलग-अलग होते हैं।

मुख्य Docker नेटवर्क ड्राइवरों का अवलोकन

यहां वे प्रमुख बिल्ट-इन ड्राइवर हैं जिन्हें Docker सपोर्ट करता है:

  1. Bridge: स्टैंडअलोन कंटेनरों के लिए डिफ़ॉल्ट ड्राइवर। यह होस्ट पर एक आइसोलेटेड आंतरिक नेटवर्क बनाता है, जिससे कंटेनर IP या कंटेनर नामों का उपयोग करके एक-दूसरे से संवाद कर सकते हैं। एकल होस्ट पर विकास और परीक्षण के लिए आदर्श।
  2. Host: होस्ट के नेटवर्क स्टैक को साझा करके आइसोलेशन हटा देता है। कंटेनर सीधे होस्ट के IP और पोर्ट का उपयोग करता है। उच्च-प्रदर्शन एप्लिकेशंस या होस्ट-स्तरीय सेवाओं के साथ अनुकूलता के लिए उपयोगी।
  3. None: कंटेनर के लिए सभी नेटवर्किंग को अक्षम करता है। केवल एक लूपबैक इंटरफेस उपलब्ध होता है। उन कंटेनरों के लिए सर्वोत्तम जो बाहरी कनेक्टिविटी की आवश्यकता नहीं रखते या सख्त सुरक्षा आइसोलेशन चाहते हैं।
  4. Overlay: विभिन्न Docker होस्ट्स पर कंटेनरों के बीच संचार सक्षम करता है। आमतौर पर Docker Swarm और मल्टी-होस्ट डिप्लॉयमेंट्स में उपयोग होता है। यह एक वितरित नेटवर्क बनाता है जो आधारभूत भौतिक संरचना को एब्स्ट्रैक्ट करता है।
  5. Macvlan: प्रत्येक कंटेनर को एक यूनिक MAC एड्रेस असाइन करता है, जिससे वह नेटवर्क पर एक भौतिक डिवाइस जैसा दिखता है। ऐसी लेगेसी एप्लिकेशंस के लिए उपयुक्त जिन्हें फिजिकल नेटवर्क तक प्रत्यक्ष पहुंच चाहिए।
  6. IPvlan: macvlan के समान, लेकिन ट्रैफ़िक को MAC एड्रेस की जगह IP लेयर पर रूट करता है। उच्च-घनत्व वाले वातावरण में बेहतर प्रदर्शन और नियंत्रण प्रदान करता है।

प्रत्येक ड्राइवर इस बात को प्रभावित करता है कि कंटेनर एक-दूसरे, होस्ट और बाहरी नेटवर्क्स के साथ कैसे इंटरैक्ट करते हैं। 

जानना चाहते हैं कि ये नेटवर्क प्रकार आपस में कैसे काम करते हैं? हमारा Intermediate Docker कोर्स Docker नेटवर्किंग, वॉल्यूम्स और Compose को व्यावहारिक रूप से कवर करता है। इन अंतरों को समझना सुरक्षित और परफॉर्मेंट आर्किटेक्चर डिजाइन करने की कुंजी है।

मुझे कौन-सा नेटवर्क प्रकार उपयोग करना चाहिए?

सही नेटवर्क ड्राइवर का चुनाव आपकी एप्लिकेशन की आर्किटेक्चर और ऑपरेशनल लक्ष्यों पर निर्भर करता है:

  1. Bridge: अधिकांश लोकल डेवलपमेंट परिदृश्यों और एकल होस्ट पर सरल मल्टी-कंटेनर एप्लिकेशंस के लिए अनुशंसित। आइसोलेशन और उपयोग में आसानी का संतुलन देता है।
  2. Host: तब सर्वोत्तम जब कंटेनरों को सीधे होस्ट के नेटवर्क से बाइंड होना हो, जैसे मानक पोर्ट (उदा., पोर्ट 80 या 443) पर सेवाएं एक्सपोज़ करना। सुरक्षा और पोर्ट संघर्षों को लेकर सावधान रहें।
  3. None: सैंडबॉक्स्ड वर्कलोड्स या सुरक्षा-महत्वपूर्ण कार्यों के लिए आदर्श जिनमें किसी भी नेटवर्क एक्सेस की आवश्यकता नहीं होती। स्वचालित वर्कफ़्लोज़ या टेस्टिंग में आम।
  4. Overlay: Docker Swarm या Kubernetes जैसे क्लस्टर्ड वातावरण में आवश्यक, जहां कंटेनर कई होस्ट्स पर फैले होते हैं। क्षैतिज स्केलिंग और सर्विस डिस्कवरी सक्षम करता है।
  5. Macvlan: तब वांछनीय जब कंटेनरों को LAN पर भौतिक डिवाइस जैसा व्यवहार करना हो। जैसे नेटवर्क स्निफिंग, लेगेसी सिस्टम इंटीग्रेशन, या Docker के नेटवर्क स्टैक को बायपास करना।
  6. IPvlan: कड़े नेटवर्किंग आवश्यकताओं वाले वातावरण (जैसे टेल्को या फाइनेंशियल सिस्टम्स) के लिए macvlan से अधिक सूक्ष्म नियंत्रण और बेहतर प्रदर्शन देता है।

नेटवर्क ड्राइवर चुनते समय होस्ट टोपोलॉजी, सुरक्षा आवश्यकताएं और स्केलिंग रणनीति जैसे कारकों पर विचार करें। 

अब भी तय कर रहे हैं कि आपकी वर्कलोड के लिए कौन-सा नेटवर्क उपयुक्त है? वास्तविक डिप्लॉयमेंट्स में Docker की तुलना Kubernetes से इस Kubernetes बनाम Docker गाइड में जानें।

कस्टम Docker नेटवर्क बनाना

कस्टम Docker नेटवर्क आपको नियंत्रित करने देते हैं कि कंटेनर आपस में आंतरिक रूप से और बाहरी सिस्टमों से कैसे संवाद करें, जिससे आप सेवाओं को बेहतर आइसोलेट कर सकें, उन्हें पूर्वानुमानित IP दें, या अपनी आर्किटेक्चर को परफॉर्मेंस या सुरक्षा के लिए डिजाइन कर सकें। 

यह अनुभाग कस्टम Docker नेटवर्क बनाते समय बुनियादी से लेकर उन्नत फीचर्स, कमांड्स और कस्टम IP कॉन्फ़िगरेशन तक की प्रक्रिया से आपको गुजारेगा।

बेसिक कमांड संरचना

कस्टम नेटवर्क बनाने के लिए docker network create कमांड का उपयोग करें। यह आपको नेटवर्क ड्राइवर, सबनेट और अन्य विकल्प परिभाषित करने देता है, ताकि कंटेनर संचार पर बेहतर नियंत्रण मिल सके।

यहां डिफ़ॉल्ट bridge ड्राइवर का एक सरल उदाहरण है:

$ docker network create demo-network -d bridge

यह कमांड demo-network नामक एक ब्रिज नेटवर्क बनाता है। पुष्टि के रूप में Docker एक यूनिक नेटवर्क ID लौटाता है। इस बिंदु पर, नेटवर्क मौजूद है लेकिन अभी किसी कंटेनर से जुड़ा नहीं है।

मौजूदा नेटवर्क देखने के लिए:

$ docker network ls

अपने नए नेटवर्क से किसी कंटेनर को जोड़ने के लिए --network फ्लैग का उपयोग करें:

$ docker run -it --rm --name container1 --network demo-network busybox:latest

किसी मौजूदा कंटेनर को किसी नेटवर्क में जोड़ने के लिए:

$ docker network connect demo-network container2

और हटाने के लिए:

$ docker network disconnect demo-network container2

अंत में, जब नेटवर्क की जरूरत न रहे, आप इसे हटा सकते हैं:

$ docker network rm demo-network

सभी अप्रयुक्त नेटवर्क साफ करने के लिए:

$ docker network prune

एडवांस्ड IP एड्रेस मैनेजमेंट

बड़े सिस्टमों या विशिष्ट नेटवर्क नीतियों के साथ काम करते समय, Docker आपको कस्टम नेटवर्क्स के भीतर IP एड्रेस रेंज मैन्युअल रूप से प्रबंधित करने देता है।

आप --subnet और --gateway फ्लैग का उपयोग करके सबनेट और गेटवे परिभाषित कर सकते हैं:

$ docker network create \
  --driver bridge \
  --subnet 192.168.100.0/24 \
  --gateway 192.168.100.1 \
  custom-network

और अधिक नियंत्रण के लिए, उपयोग करें:

  • --ip-range: कंटेनरों के लिए एक IP पूल असाइन करता है जिससे वे डायनेमिक रूप से IP ले सकें, जो पूर्ण सबनेट रेंज से अलग हो।
  • --aux-address: सबनेट के भीतर विशिष्ट IP एड्रेस बाहरी सिस्टमों या दस्तावेज़ीकरण उद्देश्यों के लिए आरक्षित करता है।

उदाहरण के लिए: 

$ docker network create \
  --driver bridge \
  --subnet 192.168.200.0/24 \
  --ip-range 192.168.200.128/25 \
  --aux-address reserved=192.168.200.254 \
  advanced-network

यह सेटअप:

  • डायनेमिक कंटेनर IPs को सबनेट के ऊपरी आधे हिस्से तक सीमित करता है।
  • आरक्षित IP के साथ टकराव को रोकता है।
  • जटिल वातावरण में सुसंगत नेटवर्किंग व्यवहार सुनिश्चित करता है।

यदि आपको अधिक गाइडेड उदाहरण चाहिए, तो आप 10 Docker Project Ideas: Beginner से Advanced तक में उन्नत सेटअप रणनीतियाँ देख सकते हैं।

Swarm मोड नेटवर्किंग

Docker Swarm मोड, Docker होस्ट्स के क्लस्टर में सेवाओं की ऑर्केस्ट्रेटेड डिप्लॉयमेंट सक्षम करता है। इस ऑर्केस्ट्रेशन का एक महत्वपूर्ण भाग नेटवर्किंग है, जो सुनिश्चित करता है कि अलग-अलग नोड्स पर चल रही सेवाएं एक-दूसरे से निर्बाध और सुरक्षित रूप से संवाद कर सकें।

Swarm-अवेयर नेटवर्क आर्किटेक्चर

Docker Swarm, Docker का नेटिव क्लस्टरिंग समाधान है जो Docker होस्ट्स के पूल को एक एकल वर्चुअल इंजन में बदल देता है। यह आपको कंटेनरों को वितरित सेवाओं के रूप में डिप्लॉय और मैनेज करने देता है। इसकी प्रमुख ताकतों में से एक मल्टी-होस्ट नेटवर्किंग है, जिसके जरिए अलग-अलग मशीनों पर मौजूद सेवाएं ऐसे संचार कर सकती हैं जैसे वे एक ही होस्ट पर हों।

Swarm नेटवर्किंग दो मुख्य प्रकार के ट्रैफ़िक को सपोर्ट करती है:

  • कंट्रोल प्लेन ट्रैफ़िक – Docker नोड्स के बीच एन्क्रिप्टेड मैनेजमेंट संचार।
  • डाटा प्लेन ट्रैफ़िक – कंटेनर-टू-कंटेनर संचार और बाहरी सेवाओं तक पहुंच।

Swarm, इंटर-नोड सर्विस कम्युनिकेशन के लिए ओवरले नेटवर्क्स और रूटिंग मेष का उपयोग करता है ताकि बाहरी ट्रैफ़िक को सर्विस रेप्लिकाज़ में लोड-बैलेंस किया जा सके।

Swarm नेटवर्क बनाना

सर्विस डिस्कवरी और सुरक्षित मल्टी-होस्ट कम्युनिकेशन को सपोर्ट करने के लिए, Docker Swarm swarm स्कोप वाले ओवरले नेटवर्क्स का उपयोग करता है। इन्हें मैन्युअली या सेवाएं लॉन्च करते समय ऑटोमेटिकली बनाया जा सकता है।

यहां swarm-स्कोप्ड ओवरले नेटवर्क बनाने का तरीका है:

$ docker network create \
  --driver overlay \
  --scope swarm \
  my-overlay

यह नेटवर्क एकल होस्ट तक सीमित नहीं है; swarm में भाग लेने वाला कोई भी नोड इसमें कंटेनर कनेक्ट कर सकता है। आप इसे इस तरह इंस्पेक्ट कर सकते हैं:

$ docker network inspect my-overlay

ओवरले नेटवर्क्स को कस्टमाइज़ करना

ओवरले नेटवर्क्स उन्नत कॉन्फ़िगरेशन सपोर्ट करते हैं, जैसे:

$ docker network create \
  --driver overlay \
  --subnet 10.0.9.0/24 \
  --gateway 10.0.9.99 \
  --opt encrypted \
  my-secure-overlay
  • --subnet और --gateway नेटवर्क टोपोलॉजी परिभाषित करते हैं।
  • --opt encrypted कंटेनर ट्रैफ़िक के लिए IPSEC एन्क्रिप्शन सक्षम करता है।
  • --scope swarm स्वॉर्म मोड में ओवरले ड्राइवर के साथ अपने-आप लागू होता है।

--scope और --attachable फ्लैग समझना

  • --scope swarm: इंगित करता है कि नेटवर्क स्वॉर्म के सभी नोड्स पर उपलब्ध है। केवल स्वॉर्म सेवाएं (न कि स्टैंडअलोन कंटेनर) इस नेटवर्क का उपयोग कर सकती हैं, जब तक कि --attachable निर्दिष्ट न हो।
  • --attachable: स्टैंडअलोन कंटेनरों को swarm-स्कोप्ड नेटवर्क में जुड़ने की अनुमति देता है। डिबगिंग या अस्थायी कंटेनर एक्सेस के लिए उपयोगी।

उदाहरण के लिए: 

$ docker network create \
  --driver overlay \
  --attachable \
  my-dev-overlay

यह सेवाओं के अलावा सामान्य कंटेनरों को भी swarm नेटवर्क से जोड़ने देता है।

नेटवर्क कॉन्फ़िगरेशन और वैलिडेशन

आपको सुनिश्चित करना चाहिए कि आपके Docker नेटवर्क सही ढंग से कॉन्फ़िगर किए गए हैं ताकि कंटेनरों के बीच उचित संचार हो, आवश्यक सुरक्षा मिले, और सेवाओं का प्रदर्शन बेहतर रहे। Docker में आपकी नेटवर्क कॉन्फ़िगरेशन की समीक्षा, ट्रबलशूट और वैलिडेट करने के लिए कई टूल्स और कमांड्स हैं।

नेटवर्क कॉन्फ़िगरेशन वेरिफिकेशन

किसी भी Docker नेटवर्क के कॉन्फ़िगरेशन विवरण की जांच करने के लिए docker network inspect कमांड का उपयोग करें। आपको विस्तृत JSON आउटपुट प्राप्त होगा जिसमें शामिल हैं:

  • नेटवर्क ड्राइवर (bridge, overlay, आदि)
  • सबनेट और गेटवे कॉन्फ़िगरेशन
  • स्कोप (local, swarm)
  • कनेक्टेड कंटेनर और उनके IP एड्रेस
  • आंतरिक या बाहरी एक्सेस
  • ड्राइवर-विशिष्ट विकल्प (उदा., ओवरले नेटवर्क्स के लिए VXLAN IDs)

उदाहरण के लिए, आप कुछ ऐसा कर सकते हैं:

$ docker network inspect my-network

इन प्रमुख फ़ील्ड्स पर ध्यान दें:

  • "Driver": सुनिश्चित करता है कि इच्छित नेटवर्क प्रकार बनाया गया है।
  • "IPAM": IP एड्रेस मैनेजमेंट सेटिंग्स, जिनमें कस्टम सबनेट या गेटवे शामिल हैं, की पुष्टि करता है।
  • "Containers": कौन-से कंटेनर जुड़े हैं और उन्हें कौन-से IP असाइन हुए हैं, दिखाता है।
  • "Options": एन्क्रिप्शन (encrypted: true) या MTU साइज जैसी उन्नत कॉन्फ़िगरेशन दिखाता है।

वैलिडेशन तकनीकें

यह सुनिश्चित करने के लिए कि आपका नेटवर्क अपेक्षित रूप से काम कर रहा है:

  1. पहले IPAM कॉन्फ़िगरेशन सत्यापित करें। Docker network inspect आउटपुट में "IPAM" सेक्शन जांचें। सुनिश्चित करें कि सबनेट और गेटवे आपके तय सेटअप से मेल खाते हैं। गलत कॉन्फ़िगर किए गए सबनेट्स कनेक्टिविटी समस्याओं या IP संघर्षों का कारण बन सकते हैं।
  2. फिर VXLAN आइडेंटिफायर्स की जांच करें (केवल ओवरले)। ओवरले नेटवर्क कई होस्ट्स के बीच कंटेनर ट्रैफ़िक को कैप्सुलेट करने के लिए VXLAN का उपयोग करते हैं। "Options" सेक्शन में इस तरह की कीज़ देखें:
"com.docker.network.driver.overlay.vxlanid_list": "4097"

यह पुष्टि करता है कि VXLAN टनल सक्रिय और सही तरीके से कॉन्फ़िगर है। यदि गायब या गलत हो, तो नोड्स के पार सेवाएं पहुंच योग्य नहीं होंगी।

  1. अंत में, इंटर-कंटेनर कनेक्टिविटी टेस्ट करें। एक कंटेनर से, दूसरे को कंटेनर नाम या IP से पिंग करें या एक्सेस करें। यह पुष्टि करता है कि DNS रेज़ोल्यूशन और आंतरिक रूटिंग काम कर रही है:
$ docker exec -it container1 ping container2

DNS व्यवहार जांचें

यूज़र-डिफाइंड नेटवर्क्स से जुड़े कंटेनर Docker के एम्बेडेड DNS सर्वर का उपयोग करते हैं। पुष्टि के लिए, कंटेनर के अंदर /etc/resolv.conf जांचें और सर्विस नामों का रेज़ोल्यूशन टेस्ट करें।

गेटवे रूटिंग वैलिडेट करें

एकाधिक नेटवर्क्स पर मौजूद कंटेनरों के लिए, Docker डिफ़ॉल्ट गेटवे को सबसे उच्च gw-priority के आधार पर चुनता है। सही रूटिंग लागू कराने के लिए, कंटेनर निर्माण के दौरान स्पष्ट प्राथमिकताएं असाइन करें:

$ docker run --network name=public,gw-priority=1 --network private mycontainer

लॉग्स और डायग्नोस्टिक टूल्स का उपयोग करें

कनेक्टिविटी एरर्स के लिए कंटेनर लॉग्स मॉनिटर करें, और लो-लेवल डिबगिंग के लिए कंटेनरों के अंदर curl, dig, और ip a जैसे टूल्स का उपयोग करें।

संक्षेप में, अपने Docker नेटवर्क कॉन्फ़िगरेशन को वैलिडेट करना निर्बाध कंटेनर संचार सुनिश्चित करने में मदद करता है और मल्टी-सर्विस एप्लिकेशंस में अप्रत्याशित विफलताओं को कम करता है। 

और यह हमें अगले अनुभाग तक ले जाता है।

सुरक्षा और प्रदर्शन अनुकूलन

वास्तविक कंटेनर नेटवर्किंग केवल संचार सक्षम करने से अधिक है। कई मामलों में, यह आवश्यक आइसोलेशन प्रदान करते हुए यह भी सुनिश्चित करती है कि प्रदर्शन अधिकतम हो। अपनी आर्किटेक्चर को सुरक्षित करते समय और सेवा प्रदान करते समय, सेगमेंटेशन और थ्रूपुट आपकी मदद कर सकते हैं।

नेटवर्क सेगमेंटेशन रणनीतियाँ

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

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

बिल्ट-इन फ़ायरवॉल नियम और नियंत्रण

डिफ़ॉल्ट रूप से, Docker कंटेनरों और बाहरी दुनिया के बीच संचार एंडपॉइंट्स को प्रतिबंधित करने के लिए iptables नियम लागू करता है। 

इस सेगमेंटेशन का विस्तार करने के कुछ तरीके शामिल हैं:

  • डिफ़ॉल्ट ब्रिज नेटवर्क पर इंटर-कंटेनर कम्युनिकेशन को अक्षम करना:
{
  "icc": false
}
  • इसे Docker डेमन के daemon.json में जोड़ें ताकि कंटेनर तब तक संवाद न कर सकें जब तक वे एक ही यूज़र-डिफाइंड नेटवर्क पर न हों।
  • क्षमताओं और विशेषाधिकारों को सीमित करना जैसे फ्लैग्स --cap-drop, --read-only, और --no-new-privileges का उपयोग करके।
  • Swarm मोड में ओवरले नेटवर्क्स का उपयोग कई होस्ट्स के पार एन्क्रिप्टेड, स्कोप्ड सर्विस कम्युनिकेशन के लिए।

प्रदर्शन अनुकूलन तकनीकें

Docker के साथ अनुकूलन द्वारा आप कई तरीकों से प्रदर्शन में सुधार कर सकते हैं। 

नेटवर्क थ्रूपुट में सुधार

सही नेटवर्क ड्राइवर का चुनाव सीधे प्रदर्शन को प्रभावित करता है। उदाहरण के लिए:

  • जब लो-लेटेंसी, हाई-थ्रूपुट कम्युनिकेशन आवश्यक हो और नेटवर्क आइसोलेशन प्राथमिकता न हो, तो host ड्राइवर का उपयोग करें।
  • स्थानीय, आइसोलेटेड वातावरण के लिए bridge को प्राथमिकता दें।
  • जब कंटेनरों को आपके नेटवर्क पर भौतिक डिवाइस जैसा व्यवहार करना हो, तो macvlan डिप्लॉय करें।

डिफ़ॉल्ट bridge नेटवर्क पर ओवरलोडिंग से बचें, और भारी सेवाओं या तार्किक समूहों के लिए अलग नेटवर्क बनाएं।

iperf3 और मैट्रिक्स के साथ परफॉर्मेंस प्रोफाइलिंग

नेटवर्क प्रदर्शन मापने के लिए, iperf3 जैसे प्रोफाइलिंग टूल्स का उपयोग करें:

# Start server in container1
docker run -it --rm --name server --network my-net networkstatic/iperf3 -s

# Run client in container2
docker run -it --rm --network my-net networkstatic/iperf3 -c server

आप नेटवर्क आँकड़ों की निगरानी इसके जरिए भी कर सकते हैं:

  • docker stats – रियल-टाइम CPU, मेमोरी और नेटवर्क I/O।
  • Prometheus + cAdvisor – टाइम-सीरीज़ मैट्रिक्स और दीर्घकालिक मॉनिटरिंग के लिए।
  • कस्टम स्क्रिप्ट्स या एजेंट्स जो कंटेनरों के भीतर से /proc/net/dev मैट्रिक्स एक्सपोर्ट करते हैं।

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

नेटवर्किंग समस्याओं का ट्रबलशूटिंग

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

नेटवर्क समस्याओं का निदान

मिनिमल कंटेनर में ping, dig, या netstat जैसे टूल्स की कमी हो सकती है, जिससे ट्रबलशूट करना कठिन हो जाता है। कंटेनर को संशोधित करने के बजाय, उसी के नेटवर्क नेमस्पेस को साझा करने वाला एक नया कंटेनर लॉन्च करें:

docker run -it --network container:my-container alpine

फिर नेटवर्क टूल्स इंस्टॉल करें:

apk add --no-cache iproute2 bind-tools net-tools

वैकल्पिक रूप से, nicolaka/netshoot का उपयोग करें, जो डायग्नोस्टिक टूल्स से भरी हुई एक प्रयोजन-निर्मित इमेज है:

docker run -it --rm --network container:my-container nicolaka/netshoot

ip, nslookup, netstat और traceroute जैसे टूल्स रूटिंग या DNS समस्याओं की पहचान करने में मदद करेंगे।

कनेक्टिविटी समस्याओं का समाधान

कुछ आम कारण और उनके समाधान:

  • DNS रेज़ोल्यूशन विफलताएं: Docker के एम्बेडेड DNS का लाभ लेने के लिए सुनिश्चित करें कि कंटेनर यूज़र-डिफाइंड नेटवर्क पर है। /etc/resolv.conf जांचें और नाम रेज़ोल्यूशन टेस्ट करने के लिए dig या nslookup का उपयोग करें।
  • MTU मिसमैच: अलग-अलग नेटवर्क्स या होस्ट्स पर मौजूद कंटेनरों में असंगत MTU के कारण पैकेट ड्रॉप हो सकते हैं। यदि टनलिंग उपयोग में है, तो ओवरले नेटवर्क्स में MTU घटाएं:
docker network create --driver overlay --opt com.docker.network.driver.mtu=1200 my-overlay

विरोधी सबनेट्स

Docker नेटवर्क्स के बीच या आपके होस्ट के फिजिकल नेटवर्क्स के साथ ओवरलैपिंग सबनेट्स से बचें। गैर-विरोधी रेंज परिभाषित करने के लिए --subnet का उपयोग करें।

होस्ट फ़ायरवॉल द्वारा ब्लॉक्ड पोर्ट्स

आवश्यक Docker पोर्ट्स खुले हों, यह सुनिश्चित करें:

  • 2377 (Swarm मैनेजमेंट)
  • 7946 TCP/UDP (कंटेनर डिस्कवरी)
  • 4789 UDP (ओवरले डेटा)

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

निष्कर्ष

Docker Networking कंटेनराइज़्ड आर्किटेक्चर्स का एक बुनियादी घटक है, जो सेवाओं के बीच सुरक्षित, कुशल और स्केलेबल संचार सक्षम करता है—चाहे वे एकल होस्ट पर चलें या वितरित क्लस्टर में। 

विभिन्न नेटवर्क ड्राइवरों के लिए बिल्ट-इन सपोर्ट, कस्टमाइज़ेबल IP मैनेजमेंट और Swarm-नेटिव ओवरले नेटवर्क्स के साथ, Docker डेवलपर्स और DevOps टीमों को वर्कलोड्स को आइसोलेट करने, डाटा फ्लो को नियंत्रित करने और जटिल वातावरण में परफॉर्मेंस को अनुकूलित करने में सक्षम बनाता है।

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

क्या आप अपनी Docker और कंटेनराइज़ेशन स्किल्स को और निखारना चाहते हैं? 

यहां कुछ अत्यधिक अनुशंसित संसाधन हैं जिनसे आप अपनी लर्निंग जारी रख सकते हैं:

  • Introduction to Docker: कंटेनर और इमेज मैनेजमेंट की बुनियाद से शुरुआत करें।
  • Intermediate Docker: Docker नेटवर्किंग, वॉल्यूम्स और Docker Compose के साथ मल्टी-कंटेनर ऑर्केस्ट्रेशन में गहराई से उतरें।
  • Introduction to Kubernetes: Kubernetes के साथ बड़े पैमाने पर कंटेनरों को डिप्लॉय और मैनेज करना सीखें।
  • Docker Compose बनाम Kubernetes: एक विस्तृत तुलना: अंतर समझें और तय करें कि आपकी आवश्यकताओं के लिए कौन-सा ऑर्केस्ट्रेशन टूल उपयुक्त है।
  • 10 Docker Project Ideas: Beginner से Advanced तक: वास्तविक दुनिया के प्रोजेक्ट प्रेरणाओं के साथ अपने कौशल लागू करें।

Docker Create Network FAQs

Docker network create कमांड का उपयोग किस लिए होता है?

यह कस्टम Docker नेटवर्क्स को परिभाषित और कॉन्फ़िगर करने के लिए उपयोग किया जाता है, जिससे कंटेनर सुरक्षित और कुशलता से संवाद कर सकें।

Docker नेटवर्क ड्राइवरों के मुख्य प्रकार कौन-से हैं?

मुख्य ड्राइवरों में bridge, host, none, overlay, macvlan और ipvlan शामिल हैं, जो आइसोलेशन और कनेक्टिविटी के अलग-अलग स्तर प्रदान करते हैं।

मुझे Docker में ओवरले नेटवर्क कब उपयोग करना चाहिए?

ओवरले नेटवर्क मल्टी-होस्ट संचार के लिए आदर्श हैं, विशेष रूप से Docker Swarm या Kubernetes वातावरण में।

मैं कैसे वैलिडेट कर सकता/सकती हूं कि कोई Docker नेटवर्क सही तरीके से कॉन्फ़िगर है?

Docker network inspect का उपयोग करें, IPAM और VXLAN सेटिंग्स जांचें, और ping या DNS टूल्स के जरिए कंटेनर कनेक्टिविटी टेस्ट करें।

Docker नेटवर्किंग समस्याओं का निदान करने में कौन-से टूल्स मदद करते हैं?

nicolaka/netshoot, dig, nslookup, iperf3 और कंटेनर लॉग्स जैसे टूल्स DNS विफलताओं या MTU मिसमैच जैसी सामान्य समस्याओं के डिबग में सहायक हैं।

Josep Ferrer

लेखक

Josep Ferrer

जोसेप यूरोपीय परियोजनाओं में विशेषज्ञता रखने वाले फ्रीलांस डेटा साइंटिस्ट हैं, जिन्हें डेटा स्टोरेज, प्रोसेसिंग, उन्नत एनालिटिक्स, और प्रभावशाली डेटा स्टोरीटेलिंग में महारत है। 

एक शिक्षक के रूप में, वे यूनिवर्सिटी ऑफ नवार्रा के मास्टर’s प्रोग्राम में बिग डेटा पढ़ाते हैं और Medium, KDNuggets, तथा DataCamp जैसे प्लेटफ़ॉर्म पर लेखों के माध्यम से अपने विचार साझा करते हैं। जोसेप अपनी न्यूज़लेटर Databites (databites.tech) में भी डेटा और टेक के बारे में लिखते हैं। 

उन्होंने पॉलिटेक्निक यूनिवर्सिटी ऑफ कैटालोनिया से इंजीनियरिंग फिजिक्स में बीएस और पॉम्पेऊ फाब्रा यूनिवर्सिटी से इंटेलिजेंट इंटरएक्टिव सिस्टम्स में एमएस किया है।

विषय