कोर्स
जब मैंने Docker का इस्तेमाल शुरू किया, तो मुझे जल्दी ही समझ आ गया कि यह कितना शक्तिशाली है। कल्पना कीजिए कि आप अपना डेवलपमेंट वातावरण घंटों के बजाय मिनटों में सेट कर रहे हैं, या अलग-अलग मशीनों पर एप्लिकेशन चला रहे हैं बिना उस क्लासिक "यह मेरी मशीन पर तो चलता है" वाली समस्या के।
Docker एप्लिकेशन और उसकी डिपेंडेंसीज़ को हल्के, पोर्टेबल कंटेनरों में पैकेज करके एप्लिकेशन को बनाना, शिप करना और चलाना सरल बनाता है। चाहे आप डेवलपर हों, डेटा साइंटिस्ट हों या सिस्टम एडमिनिस्ट्रेटर—Docker में महारत हासिल करना आपका सिरदर्द कम कर सकता है और आपके वर्कफ़्लो को अधिक कुशल बना सकता है।
इस ट्यूटोरियल में, मैं आपको बेसिक्स से लेकर—Docker इंस्टॉल करने, प्रमुख अवधारणाओं को समझने और आपका पहला कंटेनराइज़्ड एप्लिकेशन चलाने—तक सब दिखाऊंगा। अंत तक, आप न केवल समझेंगे कि Docker कैसे काम करता है, बल्कि इसे इस्तेमाल करने का हैंड्स-ऑन अनुभव भी होगा, जो उन्नत विषयों के लिए एक मजबूत नींव डालेगा। आइए शुरू करें!
Docker क्या है?
Docker एक ओपन-सोर्स कंटेनरीकरण प्लेटफ़ॉर्म है, जो सॉफ़्टवेयर और उसकी डिपेंडेंसीज़ को कंटेनर नामक एक मानकीकृत यूनिट में पैकेज करके एप्लिकेशन डिप्लॉयमेंट को सरल बनाता है। पारंपरिक वर्चुअल मशीनों के विपरीत, Docker कंटेनर होस्ट OS कर्नेल साझा करते हैं, जिससे वे अधिक कुशल और हल्के होते हैं।
कंटेनर यह सुनिश्चित करते हैं कि कोई एप्लिकेशन डेवलपमेंट, टेस्टिंग और प्रोडक्शन—सभी वातावरणों में—एक ही तरह से चले। इससे कम्पैटिबिलिटी समस्याएं कम होती हैं और विभिन्न प्लेटफ़ॉर्म पर पोर्टेबिलिटी बढ़ती है। अपनी लचीलापन और स्केलेबिलिटी के कारण, Docker आधुनिक DevOps और क्लाउड-नेटिव डेवलपमेंट वर्कफ़्लो में एक अहम उपकरण बन गया है।

Docker का आधिकारिक लोगो।
Docker इंस्टॉल करना
Docker को Windows, macOS और Linux सहित विभिन्न ऑपरेटिंग सिस्टम पर इंस्टॉल किया जा सकता है। हालांकि सभी प्लेटफ़ॉर्म पर कोर फ़ंक्शनैलिटी समान रहती है, इंस्टॉलेशन प्रक्रिया सिस्टम के अनुसार थोड़ी भिन्न होती है। नीचे, आपको अपने पसंदीदा ऑपरेटिंग सिस्टम पर Docker इंस्टॉल करने के लिए चरण-दर-चरण निर्देश मिलेंगे।
Windows पर Docker इंस्टॉल करना
- Windows के लिए Docker Desktop डाउनलोड करें।

Windows के लिए Docker Desktop इंस्टॉलर डाउनलोड करें
- इंस्टॉलर चलाएं और सेटअप निर्देशों का पालन करें।

Windows के लिए Docker Desktop इंस्टॉल करना
- प्रॉम्प्ट होने पर WSL 2 इंटीग्रेशन सक्षम करें।
- PowerShell में
docker –versionचलाकर इंस्टॉलेशन वेरीफ़ाई करें।

PowerShell के जरिए इंस्टॉलेशन के बाद Docker वर्ज़न जांचना
5. रन मेनू से Docker Desktop ऐप शुरू करें।

Windows पर Docker Desktop एप्लिकेशन लॉन्च करना
macOS पर Docker इंस्टॉल करना
- Mac के लिए Docker Desktop डाउनलोड करें।

Mac के लिए Docker Desktop इंस्टॉलर डाउनलोड करें
- डाउनलोड की गई
.dmgफ़ाइल खोलें और Docker को Applications फ़ोल्डर में ड्रैग करें। - Docker लॉन्च करें और सेटअप पूरा करें।
- टर्मिनल में
docker –versionचलाकर इंस्टॉलेशन वेरीफ़ाई करें।
Linux (Ubuntu) पर Docker इंस्टॉल करना
- पैकेज लिस्ट अपडेट करें:
sudo apt update - डिपेंडेंसीज़ इंस्टॉल करें:
sudo apt install apt-transport-https ca-certificates curl software-properties-common - Docker की आधिकारिक GPG कुंजी जोड़ें:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - - Docker की रिपॉज़िटरी जोड़ें:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" - Docker इंस्टॉल करें:
sudo apt install docker-ce - इंस्टॉलेशन वेरीफ़ाई करें:
docker –version
बेसिक Docker अवधारणाएं
अब जब आपने Docker इंस्टॉल कर लिया है, तो आप कंटेनर चलाना शुरू करने के लिए उत्सुक हो सकते हैं। लेकिन उससे पहले, कुछ प्रमुख अवधारणाओं को समझना ज़रूरी है जो Docker के काम की नींव बनती हैं। ये कॉन्सेप्ट आपको Docker को अधिक प्रभावी ढंग से उपयोग करने और शुरुआती गलतियों से बचने में मदद करेंगे।
Docker के केंद्र में इमेज होती हैं, जो कंटेनरों के लिए ब्लूप्रिंट का काम करती हैं; कंटेनर होते हैं, जो इन इमेज के रनिंग इंस्टेंसेज़ होते हैं; और Docker Hub है, जो इमेज साझा करने और प्रबंधित करने के लिए एक केंद्रीकृत रिपॉज़िटरी है।
आइए इन प्रत्येक कॉन्सेप्ट को विस्तार से समझें।
Docker इमेज
Docker इमेज कंटेनरों के मौलिक बिल्डिंग ब्लॉक्स हैं। ये अपरिवर्तनीय, रीड-ओनली टेम्पलेट होते हैं जिनमें एप्लिकेशन चलाने के लिए आवश्यक सबकुछ शामिल होता है—ऑपरेटिंग सिस्टम, एप्लिकेशन कोड, रनटाइम और डिपेंडेंसीज़।
इमेज एक Dockerfile का उपयोग करके बनाई जाती हैं, जो लेयर दर लेयर इमेज बनाने के निर्देश परिभाषित करता है।
इमेज को Docker Hub जैसे कंटेनर रजिस्ट्रियों में स्टोर किया जा सकता है और वहां से प्राप्त किया जा सकता है।
इमेज के साथ काम करने के लिए कुछ उदाहरण कमांड यहां दिए गए हैं:
docker pull nginx: Docker Hub से नवीनतम Nginx इमेज फ़ेच करें।docker images: लोकल मशीन पर उपलब्ध सभी इमेज की सूची दिखाएं।docker rmi nginx: लोकल मशीन से एक इमेज हटाएं।
Docker कंटेनर
Docker कंटेनर, Docker इमेज का एक रनिंग इंस्टेंस होता है। कंटेनर एक आइसोलेटेड रनटाइम वातावरण प्रदान करते हैं जहां एप्लिकेशन एक-दूसरे या होस्ट सिस्टम में दखल दिए बिना चल सकते हैं। हर कंटेनर का अपना फाइलसिस्टम, नेटवर्किंग और प्रोसेस स्पेस होता है, लेकिन यह होस्ट कर्नेल साझा करता है।
कंटेनरों का एक सरल लाइफ़साइकल होता है जिसमें क्रिएशन, स्टार्ट, स्टॉप और डिलीट शामिल हैं। यहां आम कंटेनर मैनेजमेंट कमांड्स का ब्रेकडाउन है:
- कंटेनर बनाना:
docker createयाdocker run - कंटेनर शुरू करना:
docker start - कंटेनर रोकना:
docker stop - कंटेनर रीस्टार्ट करना:
docker restart - कंटेनर हटाना:
docker rm
एक व्यावहारिक उदाहरण देखते हैं। निम्न कमांड एक Nginx कंटेनर को डिटैच्ड मोड (बैकग्राउंड में चलते हुए) में चलाता है, कंटेनर के अंदर पोर्ट 80 को होस्ट मशीन पर पोर्ट 8080 से मैप करता है:
docker run -d -p 8080:80 nginx
इस कमांड को चलाने के बाद, Docker Nginx इमेज (यदि पहले से उपलब्ध नहीं है) को पुल करेगा, एक कंटेनर बनाएगा और उसे स्टार्ट करेगा।
सभी रनिंग और स्टॉप्ड कंटेनरों की जांच करने के लिए:
docker ps -a
यह सभी कंटेनरों की सूची और उनके स्टेटस तथा असाइन किए गए पोर्ट जैसी जानकारियां दिखाएगा।
Docker Hub
Docker Hub कंटेनर इमेज को ढूंढने, स्टोर करने और वितरित करने के लिए क्लाउड-आधारित रजिस्ट्रि सेवा है। उपयोगकर्ता कस्टम इमेज को Docker Hub पर पुश कर सकते हैं और उन्हें पब्लिक या प्राइवेट रूप में साझा कर सकते हैं।
Docker Hub के साथ इंटरैक्ट करने के लिए कुछ कमांड:
docker login: Docker Hub के साथ ऑथेंटिकेट करें।docker push my-image: कस्टम-बिल्ट इमेज को Docker Hub पर अपलोड करें।docker search ubuntu: ऑफिशियल और कम्युनिटी इमेज खोजें।docker pull ubuntu: Docker Hub से Ubuntu इमेज डाउनलोड करें।
कंटेनरीकरण में नए हैं? Containerization and Virtualization Concepts कोर्स से मजबूत नींव बनाएं।
अपना पहला Docker कंटेनर चलाना
अब जबकि हमने Docker की कोर अवधारणाओं को कवर कर लिया है, अब इन्हें अमल में लाने का समय है! आइए अपना पहला कंटेनर चलाकर सुनिश्चित करें कि Docker सही तरीके से इंस्टॉल हुआ है और अपेक्षित रूप से काम कर रहा है।
अपनी Docker इंस्टॉलेशन टेस्ट करने के लिए, PowerShell (Windows) या Terminal (Mac और Linux) खोलें और चलाएं:
docker run hello-world
यह DockerHub से hello-world इमेज को पुल करता है और इसे एक कंटेनर में रन करता है।

Docker hello-world इमेज उदाहरण
अब, एक कदम आगे बढ़ते हैं और एक वास्तविक एप्लिकेशन चलाते हैं—Nginx वेब सर्वर। निम्न कमांड चलाएं:
docker run -d -p 8080:80 nginx
ऊपर दिया गया कमांड यह करता है:
-dफ़्लैग कंटेनर को डिटैच्ड मोड में चलाता है, यानी यह बैकग्राउंड में चलता है।-p 8080:80फ़्लैग कंटेनर के अंदर पोर्ट 80 को आपकी लोकल मशीन के पोर्ट 8080 से मैप करता है, जिससे आप वेब सर्वर एक्सेस कर सकें।
कमांड सफलतापूर्वक चलने के बाद, ब्राउज़र खोलें और जाएं: http://localhost:8080

localhost:8080 पर वेब सर्वर एक्सेस करना
आपको डिफ़ॉल्ट Nginx वेलकम पेज दिखना चाहिए, जो पुष्टि करता है कि आपका वेब सर्वर कंटेनर के अंदर चल रहा है!
आप अपने Docker Desktop में भी एक कंटेनर रनिंग देखेंगे:

पोर्ट 8080 पर चल रहा Nginx कंटेनर
अपनी पहली Docker इमेज बनाना
अब तक, हम Docker Hub से प्री-बिल्ट इमेज चला रहे थे। लेकिन अगर आपको अपने एप्लिकेशन के अनुरूप कस्टम वातावरण चाहिए? यही वह जगह है जहां अपनी स्वयं की Docker इमेज बनाना काम आता है।
Docker इमेज बनाना एक Dockerfile लिखने में शामिल होता है—एक स्क्रिप्ट जो इमेज-बिल्डिंग को ऑटोमेट करती है। यह विभिन्न वातावरणों में निरंतरता और पोर्टेबिलिटी सुनिश्चित करता है। एक बार इमेज बन जाने पर, इसे कंटेनर के रूप में चलाया जा सकता है ताकि एप्लिकेशन एक आइसोलेटेड वातावरण में निष्पादित हों।
इस सेक्शन में, हम Dockerfile लिखने की बुनियादी बातें, एक कस्टम इमेज बनाना और इसे कंटेनर के रूप में चलाना सीखेंगे।
Dockerfile बेसिक्स
Dockerfile एक स्क्रिप्ट है जिसमें निर्देशों की एक श्रृंखला होती है जो परिभाषित करती है कि Docker इमेज कैसे बनाई जाती है। यह इमेज निर्माण की प्रक्रिया को ऑटोमेट करता है और वातावरणों में निरंतरता सुनिश्चित करता है। Dockerfile में हर निर्देश इमेज में एक नई लेयर बनाता है। यहां एक साधारण Python Flask ऐप के लिए उदाहरण Dockerfile का ब्रेकडाउन दिया गया है:
# Base image containing Python runtime
FROM python:3.9
# Set the working directory inside the container
WORKDIR /app
# Copy the application files from the host to the container
COPY . /app
# Install the dependencies listed in requirements.txt
RUN pip install -r requirements.txt
# Define the command to run the Flask app when the container starts
CMD ["python", "app.py"]
ऊपर दिए गए कमांड में:
-v my-volume:/app/datamy-volumeस्टोरेज को कंटेनर के अंदर/app/dataडायरेक्टरी पर माउंट करता है।/app/dataमें स्टोर कोई भी डेटा कंटेनर रुकने या हटने पर भी बना रहेगा।
ऊपर दिए गए Dockerfile का ब्रेकडाउन:
FROM python:3.9: Python 3.9 प्री-इंस्टॉल्ड बेस इमेज निर्दिष्ट करता है।WORKDIR /app: कंटेनर के अंदर वर्किंग डायरेक्टरी/appसेट करता है।COPY . /app: होस्ट की करंट डायरेक्टरी से सभी फाइलों को कंटेनर में/appपर कॉपी करता है।RUN pip install -r requirements.txt: कंटेनर के अंदर सभी आवश्यक डिपेंडेंसीज़ इंस्टॉल करता है।CMD ["python", "app.py"]: कंटेनर शुरू होने पर निष्पादित होने वाला कमांड परिभाषित करता है।
इमेज बनाना और चलाना
एक बार Dockerfile परिभाषित होने के बाद, आप निम्न कमांड्स का उपयोग करके इमेज बना और चला सकते हैं:
स्टेप 1: इमेज बनाएं
docker build -t my-flask-app .
ऊपर दिया गया कमांड:
- करंट डायरेक्टरी (
.) को बिल्ड कॉन्टेक्स्ट के रूप में उपयोग करता है। Dockerfileपढ़ता है और उसके निर्देशों को निष्पादित करता है।- परिणामी इमेज को
my-flask-appके रूप में टैग (-t) करता है।
स्टेप 2: इमेज को कंटेनर के रूप में चलाएं
docker run -d -p 5000:5000 my-flask-app
ऊपर दिया गया कमांड:
- कंटेनर को डिटैच्ड मोड (
-d) में चलाता है। - कंटेनर के अंदर पोर्ट 5000 को होस्ट पर पोर्ट 5000 से मैप करता है (
-p 5000:5000)।
चलने के बाद, आप ब्राउज़र में http://localhost:5000 पर जाकर Flask एप्लिकेशन एक्सेस कर सकते हैं।
Docker वॉल्यूम और पर्सिस्टेंस
डिफ़ॉल्ट रूप से, Docker कंटेनर के अंदर का डेटा अस्थायी होता है—जैसे ही कंटेनर रुकता है या हटाया जाता है, डेटा गायब हो जाता है। कंटेनर रीस्टार्ट्स के बीच डेटा को पर्सिस्ट करने और इसे कई कंटेनरों के बीच साझा करने के लिए, Docker वॉल्यूम प्रदान करता है—पर्सिस्टेंट स्टोरेज को कुशलतापूर्वक प्रबंधित करने के लिए एक बिल्ट-इन मैकेनिज्म।
कंटेनर के फाइलसिस्टम के अंदर डेटा स्टोर करने के विपरीत, वॉल्यूम Docker द्वारा अलग से मैनेज किए जाते हैं, जिससे वे अधिक कुशल, लचीले और बैकअप में आसान होते हैं।
अगले सेक्शन में, हम Docker वॉल्यूम बनाना और इस्तेमाल करना सीखेंगे ताकि आपके कंटेनरों में डेटा पर्सिस्टेंस सुनिश्चित हो सके।
Docker वॉल्यूम बनाना और उपयोग करना
स्टेप 1: एक वॉल्यूम बनाएं
वॉल्यूम इस्तेमाल करने से पहले, हमें एक बनाना होगा। निम्न कमांड चलाएं:
docker volume create my-volume
यह my-volume नाम का एक नेम्ड वॉल्यूम बनाता है, जिसे Docker किसी विशिष्ट कंटेनर से अलग मैनेज करेगा।स्टेप 2: कंटेनर में वॉल्यूम का उपयोग करें
अब, एक कंटेनर शुरू करते हैं और उसके अंदर वॉल्यूम माउंट करते हैं:
docker run -d -v my-volume:/app/data my-app
ऊपर दिए गए कमांड में:
-v my-volume:/app/datamy-volumeस्टोरेज को कंटेनर के अंदर/app/dataडायरेक्टरी पर माउंट करता है।/app/dataमें स्टोर कोई भी डेटा कंटेनर रुकने या हटने पर भी बना रहेगा।
मल्टी-कंटेनर एप्लिकेशन के लिए Docker Compose
अब तक, हम सिंगल-कंटेनर एप्लिकेशन के साथ काम कर रहे थे, लेकिन अधिकांश वास्तविक-जीवन एप्लिकेशन को साथ मिलकर काम करने के लिए कई कंटेनरों की आवश्यकता होती है। उदाहरण के लिए, किसी वेब एप्लिकेशन को एक बैकएंड सर्वर, एक डेटाबेस और एक कैशिंग लेयर की ज़रूरत हो सकती है—हर एक अपने अलग कंटेनर में चलता है। अलग-अलग docker run कमांड्स से इन कंटेनरों को मैन्युअली मैनेज करना जल्दी ही परेशानीभरा हो सकता है।
यहीं पर Docker Compose काम आता है।
Docker Compose क्या है?
Docker Compose एक टूल है जो मल्टी-कंटेनर एप्लिकेशन के प्रबंधन को सरल बनाता है। कई docker run कमांड चलाने की बजाय, आप पूरे एप्लिकेशन स्टैक को एक docker-compose.yml फ़ाइल में परिभाषित कर सकते हैं और उसे एक ही कमांड से डिप्लॉय कर सकते हैं।
Docker Compose फ़ाइल लिखना
अब, एक वास्तविक उदाहरण बनाते हैं—एक साधारण Node.js एप्लिकेशन जो MongoDB डेटाबेस से कनेक्ट होता है। दो कंटेनरों को अलग-अलग मैनेज करने की बजाय, हम उन्हें एक docker-compose.yml फ़ाइल में परिभाषित करेंगे।
यहां बताया गया है कि हम Docker Compose में अपना मल्टी-कंटेनर सेटअप कैसे परिभाषित करते हैं:
version: '3'
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- database
database:
image: mongo
volumes:
- db-data:/data/db
volumes:
db-data:
ऊपर दी गई फ़ाइल का ब्रेकडाउन:
version: '3': Docker Compose का वर्ज़न निर्दिष्ट करता है।services:: व्यक्तिगत सर्विसेज (कंटेनर) परिभाषित करता है।web:: Node.js वेब एप्लिकेशन परिभाषित करता है।database:: MongoDB डेटाबेस कंटेनर परिभाषित करता है।volumes:: MongoDB डेटा पर्सिस्टेंस के लिए एक नेम्ड वॉल्यूम (db-data) बनाता है।
मल्टी-कंटेनर एप्लिकेशन चलाना
जब docker-compose.yml फ़ाइल तैयार हो जाए, तो हम पूरे एप्लिकेशन स्टैक को एक ही कमांड से लॉन्च कर सकते हैं:
docker-compose up -d
यह कमांड वेब और डेटाबेस दोनों कंटेनरों को डिटैच्ड मोड (-d) में शुरू करता है।
सभी सर्विसेज को बंद करने के लिए, इसका उपयोग करें:
docker-compose down
यह सभी कंटेनरों को रोकता और हटाता है, जबकि वॉल्यूम और नेटवर्क सेटिंग्स को संरक्षित रखता है।
Docker नेटवर्किंग बेसिक्स
अब तक, हमने कंटेनरों को चलाने और स्टोरेज को मैनेज करने पर ध्यान दिया है, लेकिन जब कंटेनरों को एक-दूसरे से संवाद करने की आवश्यकता हो तो क्या होता है? अधिकांश वास्तविक-जीवन एप्लिकेशन में कंटेनर अलग-थलग काम नहीं करते—उन्हें डेटा का आदान-प्रदान करना पड़ता है, चाहे वह वेब सर्वर का डेटाबेस से बात करना हो या माइक्रोसर्विसेज का आपस में इंटरेक्ट करना।
Docker विभिन्न उपयोग मामलों के लिए कई नेटवर्किंग विकल्प प्रदान करता है—आइसोलेटेड इंटरनल नेटवर्क से लेकर एक्सटर्नल एक्सेस तक।
क्या आप अपनी Docker स्किल्स को अगले स्तर पर ले जाने के लिए तैयार हैं? Intermediate Docker में नामांकन करें और मल्टी-स्टेज बिल्ड्स, उन्नत नेटवर्किंग और बहुत कुछ एक्सप्लोर करें!
Docker नेटवर्किंग क्या है?
Docker नेटवर्किंग एक बिल्ट-इन फीचर है जो कंटेनरों को एक-दूसरे से संवाद करने की अनुमति देता है, चाहे वे एक ही होस्ट पर हों या एक डिस्ट्रिब्यूटेड वातावरण में कई होस्ट्स पर। यह विभिन्न डिप्लॉयमेंट परिदृश्यों के लिए नेटवर्क आइसोलेशन, सेगमेंटेशन और कनेक्टिविटी विकल्प प्रदान करता है।
Docker कई नेटवर्क प्रकारों को सपोर्ट करता है, जिनमें से प्रत्येक अलग उपयोग मामलों को सर्व करता है:
- ब्रिज (डिफ़ॉल्ट): एक ही होस्ट पर कंटेनर इंटरनल वर्चुअल नेटवर्क के जरिए संवाद करते हैं। प्रत्येक कंटेनर को ब्रिज नेटवर्क के भीतर अपना निजी IP पता मिलता है और वे कंटेनर नामों के जरिए एक-दूसरे तक पहुंच सकते हैं।
- उदाहरण:
docker network create my-bridge-network - एक ही होस्ट पर कई कंटेनर सुरक्षित रूप से चलाने के लिए आदर्श, बिना सर्विसेज को बाहरी रूप से एक्सपोज़ किए।
- होस्ट: कंटेनर होस्ट की नेटवर्किंग स्टैक साझा करते हैं और सीधे होस्ट के IP पते और पोर्ट का उपयोग करते हैं।
- उदाहरण:
docker run --network host nginx - जब आपको उच्च प्रदर्शन चाहिए और नेटवर्क आइसोलेशन की ज़रूरत नहीं है—जैसे मॉनिटरिंग एजेंट्स या लो-लेटेंसी एप्लिकेशन—तब उपयोगी।
- ओवरले: डिस्ट्रिब्यूटेड नेटवर्क बनाकर अलग-अलग होस्ट्स पर कंटेनर कम्युनिकेशन सक्षम करता है।
- उदाहरण:
docker network create --driver overlay my-overlay-network - Docker Swarm जैसे ऑर्केस्ट्रेटेड डिप्लॉयमेंट्स के लिए डिज़ाइन किया गया, जहां सर्विसेज कई नोड्स में फैली होती हैं।
- Macvlan: प्रत्येक कंटेनर को एक यूनिक MAC पता असाइन करता है, जिससे वह नेटवर्क पर एक फिजिकल डिवाइस की तरह दिखाई देता है।
- उदाहरण:
docker network create -d macvlan --subnet=192.168.1.0/24 my-macvlan - जब कंटेनरों को डायरेक्ट नेटवर्क एक्सेस चाहिए—जैसे लेगसी सिस्टम्स के साथ एकीकरण या फिजिकल नेटवर्क्स के साथ इंटरेक्शन—तब उपयोग किया जाता है।
कस्टम नेटवर्क पर कंटेनर चलाना
आइए देखते हैं कि कस्टम ब्रिज नेटवर्क कैसे सेटअप और इस्तेमाल करें ताकि कंटेनर आपस में संवाद कर सकें।
स्टेप 1: एक कस्टम नेटवर्क बनाएं
कंटेनर चलाने से पहले, हमें एक डेडिकेटेड नेटवर्क बनाना होगा:
docker network create my-custom-network
यह कमांड एक आइसोलेटेड नेटवर्क बनाता है, जिसमें कंटेनर इंटर-कंटेनर कम्युनिकेशन के लिए शामिल हो सकते हैं।
स्टेप 2: नेटवर्क पर कंटेनर चलाएं
अब, दो कंटेनर शुरू करते हैं और उन्हें हमारे नए बनाए नेटवर्क से जोड़ते हैं:
docker run -d --network my-custom-network --name app1 my-app
docker run -d --network my-custom-network --name app2 my-app
--network my-custom-networkफ़्लैग कंटेनर को निर्दिष्ट नेटवर्क से अटैच करता है।--nameफ़्लैग यूनिक कंटेनर नाम असाइन करता है, जिससे रेफरेंस करना आसान हो जाता है।
अब app1 और app2 अपने कंटेनर नामों का उपयोग करके संवाद कर सकते हैं। आप एक कंटेनर के अंदर से ping कमांड का उपयोग करके कनेक्टिविटी टेस्ट कर सकते हैं:
docker exec -it app1 ping app2
यदि सब कुछ सही सेटअप है, तो आपको रिस्पॉन्स दिखाई देगा जो पुष्टि करेगा कि कंटेनर संवाद कर सकते हैं।
Docker नेटवर्क का निरीक्षण
नेटवर्क कॉन्फ़िगरेशन और कनेक्टेड कंटेनरों की जांच करने के लिए, इसका उपयोग करें:
docker network inspect my-custom-network
यह कमांड नेटवर्क का विवरण प्रदान करता है, जिसमें IP रेंज, कनेक्टेड कंटेनर और कॉन्फ़िगरेशन शामिल हैं।
पोर्ट्स को एक्सपोज़ और पब्लिश करना
जब ऐसे कंटेनर चलते हैं जिन्हें बाहरी रूप से एक्सेस करने की आवश्यकता होती है, तो आप विशिष्ट पोर्ट्स को एक्सपोज़ कर सकते हैं।
उदाहरण के लिए, एक Nginx वेब सर्वर चलाने और उसे आपकी लोकल मशीन के पोर्ट 8080 पर एक्सपोज़ करने के लिए, यह कमांड उपयोग करें:
docker run -d -p 8080:80 nginx
यह कंटेनर के अंदर पोर्ट 80 को होस्ट के पोर्ट 8080 से मैप करता है, जिससे सेवा इस पते पर उपलब्ध हो जाती है: http://localhost:8080।
Docker नेटवर्किंग के लिए सर्वश्रेष्ठ प्रथाएं
- कस्टम नेटवर्क का उपयोग करें: अनपेक्षित कंटेनर-टू-कंटेनर एक्सेस को कम करने के लिए प्रोडक्शन डिप्लॉयमेंट में डिफ़ॉल्ट ब्रिज नेटवर्क उपयोग करने से बचें।
- DNS-आधारित डिस्कवरी का लाभ उठाएं: IP पते हार्डकोड करने के बजाय, डायनेमिक सर्विस डिस्कवरी के लिए कंटेनर नामों का उपयोग करें।
- बाहरी एक्सपोज़र सीमित करें: सर्विस एक्सेस को नियंत्रित करने के लिए फायरवॉल या नेटवर्क नीतियों का उपयोग करें।
- ट्रैफ़िक मॉनिटर करें: नेटवर्क ट्रैफ़िक का विश्लेषण और विसंगतियां पहचानने के लिए
docker network inspect, Wireshark या Prometheus जैसे टूल का उपयोग करें। - ओवरले नेटवर्क्स को ऑप्टिमाइज़ करें: यदि डिस्ट्रिब्यूटेड सेटअप में डिप्लॉय कर रहे हैं, तो लो-लेटेंसी के लिए होस्ट-लोकल रूटिंग विकल्पों का लाभ उठाकर ओवरले नेटवर्क्स को ट्यून करें।
Docker के लिए सर्वश्रेष्ठ प्रथाएं और अगले कदम
अब जब आपने Docker की बुनियादी बातें सीख ली हैं, तो अब अपने कौशल को बेहतर बनाने और बेहतरीन प्रथाएं अपनाने का समय है, जो आपको सुरक्षित, कुशल और मेंटेन करने योग्य कंटेनराइज़्ड एप्लिकेशन बनाने में मदद करेंगी।
निम्न सर्वश्रेष्ठ प्रथाएं आपके Docker वर्कफ़्लो को सुव्यवस्थित करेंगी और आम गलतियों से बचाएंगी।
- ऑफिशियल बेस इमेज का उपयोग करें: सुरक्षा और स्थिरता सुनिश्चित करने के लिए हमेशा आधिकारिक और अच्छी तरह से मेंटेन की गई बेस इमेज को प्राथमिकता दें। ऑफिशियल इमेज ऑप्टिमाइज़्ड, नियमित रूप से अपडेटेड होती हैं और उनमें कमजोरियां होने की संभावना कम होती है।
- इमेज को छोटा रखें: मिनिमल बेस इमेज चुनकर इमेज साइज़ कम करें (जैसे,
python:3.9की बजायpython:3.9-slim)। अनावश्यक डिपेंडेंसीज़ और फाइलें हटाएं ताकि स्टोरेज और पुल टाइम्स ऑप्टिमाइज़ हों। - मल्टी-स्टेज बिल्ड्स का उपयोग करें: बिल्ड और रनटाइम डिपेंडेंसीज़ को अलग करके Dockerfiles को ऑप्टिमाइज़ करें। मल्टी-स्टेज बिल्ड्स सुनिश्चित करते हैं कि फाइनल इमेज में केवल आवश्यक आर्टिफैक्ट्स शामिल हों, जिससे साइज़ और अटैक सरफेस कम होता है।
- इमेज को सही ढंग से टैग करें:
latestके बजाय हमेशा वर्ज़न वाले टैग (जैसे,my-app:v1.0.0) का उपयोग करें ताकि इमेज पुल करते समय अनपेक्षित अपडेट से बचा जा सके। - कमजोरियों के लिए इमेज स्कैन करें: डिप्लॉयमेंट से पहले
docker scan,TrivyयाClairजैसे सिक्योरिटी स्कैनिंग टूल्स का उपयोग करें और कमजोरियों को दूर करें। - एनवायरनमेंट वेरिएबल्स को सुरक्षित रूप से मैनेज करें: संवेदनशील क्रेडेंशियल्स को इमेज के अंदर स्टोर करने से बचें। Docker secrets, एनवायरनमेंट वेरिएबल्स, या AWS Secrets Manager और HashiCorp Vault जैसे बाहरी सीक्रेट मैनेजमेंट टूल्स का उपयोग करें।
- .dockerignore फाइलों का उपयोग करें: अनावश्यक फाइलों (जैसे,
.git, node_modules,venv) को बाहर रखें ताकि बिल्ड कॉन्टेक्स्ट साइज़ कम हो और संवेदनशील फाइलें इमेज में गलती से शामिल न हों। - लॉगिंग और मॉनिटरिंग सक्षम करें: कंटेनर लॉग्स और मॉनिटरिंग के लिए Prometheus, Grafana और Fluentd जैसे टूल्स का उपयोग करें।
docker logsसे लॉग्स जांचें और बेहतर ऑब्ज़र्वेबिलिटी के लिए स्ट्रक्चर्ड लॉगिंग सक्षम करें।
एक बार जब आप Docker की बेसिक्स में महारत हासिल कर लेते हैं, तो एक्सप्लोर करने के लिए कई उन्नत विषय होते हैं। आगे बढ़ने के लिए कुछ क्षेत्र यहां दिए गए हैं:
- Docker Swarm और Kubernetes: Docker Swarm (बिल्ट-इन क्लस्टरिंग) और Kubernetes (एंटरप्राइज़-ग्रेड ऑर्केस्ट्रेशन, ऑटो-स्केलिंग और सर्विस डिस्कवरी के साथ) को प्रोडक्शन-ग्रेड ऑर्केस्ट्रेशन के लिए एक्सप्लोर करें।
- कंटेनर सुरक्षा की सर्वश्रेष्ठ प्रथाएं: कंटेनराइज़्ड एप्लिकेशन को सुरक्षित करने के लिए CIS Docker Benchmark दिशानिर्देशों का पालन करें और Role-Based Access Control (RBAC) लागू करें।
- Docker के साथ CI/CD पाइपलाइंस: GitHub Actions, GitLab CI या Jenkins का उपयोग करके इमेज बिल्ड्स, सिक्योरिटी स्कैन और डिप्लॉयमेंट्स को ऑटोमेट करें।
- क्लाउड-नेटिव डेवलपमेंट: AWS ECS, Azure Container Instances और Google Cloud Run जैसे क्लाउड प्लेटफ़ॉर्म पर Docker का लाभ उठाएं, ताकि स्केलेबल और मैनेज्ड डिप्लॉयमेंट्स हो सकें।
- डेटा पर्सिस्टेंस रणनीतियां: स्टोरेज मैनेजमेंट को ऑप्टिमाइज़ करने के लिए Docker वॉल्यूम, बाइंड माउंट्स और tmpfs के बीच के अंतर समझें।
निष्कर्ष
Docker ने डेवलपर्स के लिए एप्लिकेशन को बनाना, शिप करना और चलाना पूरी तरह बदल दिया है, जिससे यह आधुनिक सॉफ़्टवेयर डेवलपमेंट के लिए अनिवार्य टूल बन गया है।
इस ट्यूटोरियल में, हमने कवर किया:
- Docker क्या है और यह क्यों महत्वपूर्ण है
- इंस्टॉल करना और अपना पहला कंटेनर कैसे चलाना है
- इमेज, कंटेनर और नेटवर्किंग जैसी प्रमुख अवधारणाएं
- Docker वॉल्यूम के साथ पर्सिस्टेंट स्टोरेज
- Docker Compose के साथ मल्टी-कंटेनर एप्लिकेशन
- सुरक्षा, प्रदर्शन और स्केलेबिलिटी के लिए सर्वश्रेष्ठ प्रथाएं
लेकिन यह तो बस शुरुआत है! यदि आप अपनी Docker विशेषज्ञता को गहरा करना चाहते हैं, तो आप beginner-level Introduction to Docker कोर्स कर सकते हैं। और अधिक गहन ज्ञान के लिए, Intermediate Docker कोर्स लें, जो मल्टी-स्टेज बिल्ड्स, Docker नेटवर्किंग टूल्स और Docker Compose को कवर करता है। अंत में, आप Docker सर्टिफ़िकेशन भी हासिल कर सकते हैं—रुचि हो तो The Complete Docker Certification (DCA) Guide for 2025 देखें!
FAQs
Docker वर्चुअल मशीन (VM) से कैसे अलग है?
Docker कंटेनर होस्ट OS कर्नेल साझा करते हैं, जिससे वे हल्के और तेज़ होते हैं, जबकि वर्चुअल मशीन (VMs) को एक पूर्ण गेस्ट OS की आवश्यकता होती है, जिससे वे भारी और धीमे होते हैं। माइक्रोसर्विसेज और रैपिड स्केलिंग के लिए कंटेनर बेहतर होते हैं, जबकि एक ही हार्डवेयर पर अलग-अलग OS वातावरण चलाने के लिए VMs अधिक उपयुक्त हैं।
Docker CE और Docker EE में क्या अंतर है?
Docker Community Edition (CE) फ्री, ओपन-सोर्स वर्ज़न है, जो व्यक्तिगत डेवलपर्स और छोटे प्रोजेक्ट्स के लिए उपयुक्त है। Docker Enterprise Edition (EE) एक पेड वर्ज़न है, जिसमें अतिरिक्त सुरक्षा, मैनेजमेंट और सपोर्ट फीचर्स होते हैं, जो बड़े पैमाने पर एंटरप्राइज़ डिप्लॉयमेंट्स के लिए आदर्श है।
क्या Docker WSL 2 के बिना Windows पर चल सकता है?
हां, Windows के लिए Docker Desktop दो मोड प्रदान करता है: WSL 2-आधारित बैकएंड (अनुशंसित) और Hyper-V बैकएंड। WSL 2 बैकएंड बेहतर प्रदर्शन और Windows के साथ बेहतर इंटीग्रेशन देता है, जबकि Hyper-V तब एक विकल्प है जब WSL 2 उपलब्ध न हो।
मल्टी-आर्क Docker इमेज क्या हैं?
मल्टी-आर्क इमेज एक ही Docker इमेज को कई आर्किटेक्चर (जैसे, x86, ARM) को सपोर्ट करने की अनुमति देती हैं। इससे वही इमेज अलग-अलग हार्डवेयर प्लेटफ़ॉर्म पर बिना किसी संशोधन के चल सकती है, जो IoT डिवाइसेज़ और क्लाउड वातावरण के लिए उपयोगी है।
Docker सुरक्षा कैसे संभालता है?
Docker सुरक्षा को namespace isolation, control groups (cgroups) और seccomp प्रोफ़ाइल्स के माध्यम से सुदृढ़ करता है। इसके अतिरिक्त, सर्वोत्तम प्रथाओं में नॉन-रूट यूज़र के रूप में कंटेनर चलाना, मिनिमल बेस इमेज का उपयोग करना, इमेज वेरिफिकेशन के लिए कंटेंट ट्रस्ट सक्षम करना, और docker scan या Trivy जैसे टूल्स से इमेज स्कैन करना शामिल है।
