Ubuntu पर Docker कैसे इंस्टॉल करें: पूर्ण शुरुआती‑मैत्रीपूर्ण गाइड (आधिकारिक विधि)

final answer.## 1. परिचय

जब आप Ubuntu पर विकास पर्यावरण सेटअप कर रहे होते हैं, तो “चलो अभी Docker ही इंस्टॉल कर लेते हैं” जैसी स्थितियाँ अधिक सामान्य होती जा रही हैं। वेब एप्लिकेशन, बैच प्रोसेसिंग, टेस्ट डेटाबेस, टेस्ट मिडलवेयर… यदि आप इन्हें हर बार मैन्युअल रूप से इंस्टॉल करते हैं, तो पर्यावरण सेटअप के लिए बहुत अधिक समय और प्रयास खर्च हो जाता है।

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

  • कुछ ही मिनटों में नया विकास पर्यावरण लॉन्च करना
  • सुनिश्चित करना कि सभी टीम सदस्य एक ही पर्यावरण में व्यवहार को दोहरा सकें
  • स्थानीय रूप से उत्पादन‑जैसा सेटअप आसानी से पुनः बनाना

इन लाभों को न्यूनतम प्रयास से प्राप्त किया जा सकता है।

दूसरी ओर, पहली बार Docker उपयोग करने वालों के लिए कई सामान्य अड़चनें होती हैं:

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

जब आप “ubuntu install docker” सर्च करते हैं, तो आपको कई लेख मिलेंगे जो लंबी कमांड सीक्वेंस की सूची देते हैं, लेकिन अक्सर इन चरणों की आवश्यकता क्यों है या एक पूर्ण इंस्टॉलेशन को क्या दर्शाता है यह नहीं बताते।

目次

1-1. इस लेख का लक्ष्य

यह लेख उन पाठकों के लिए है जो Ubuntu पर Docker इंस्टॉल करना चाहते हैं, और यह निम्नलिखित मुख्य बिंदुओं को कवर करता है:

  • Ubuntu पर Docker इंस्टॉल करने की वर्तमान में सामान्य प्रक्रिया
  • आधिकारिक रिपॉज़िटरी का उपयोग करके अधिक प्रबंधनीय इंस्टॉलेशन विधि
  • docker कमांड को sudo के बिना चलाने का तरीका
  • इंस्टॉलेशन‑के‑बाद सत्यापन और आवश्यक बुनियादी कमांड
  • Docker Compose जैसे सामान्यतः उपयोग किए जाने वाले टूल्स का परिचय

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

1-2. लक्षित पाठक और पूर्वापेक्षाएँ

यह लेख उन पाठकों के लिए है जो:

  • बुनियादी Ubuntu संचालन (टर्मिनल खोलना, apt कमांड का उपयोग आदि) समझते हैं
  • पहली बार Docker आज़माने वाले डेवलपर या अभ्यर्थी इंजीनियर हैं
  • मौजूदा टेस्ट पर्यावरण को कंटेनर में माइग्रेट करने पर विचार कर रहे हैं

उन्नत Linux प्रशासन ज्ञान की आवश्यकता नहीं है। जब तक आप टर्मिनल में कमांड टाइप करने में सहज हैं, यह गाइड आपके लिए पर्याप्त होगा।

1-3. लेख की संरचना और पढ़ने का तरीका

यह लेख निम्न क्रम में आगे बढ़ता है:

  • पूर्वापेक्षाओं की जाँच
  • इंस्टॉलेशन विधियाँ (आधिकारिक रिपॉज़िटरी / स्क्रिप्ट‑आधारित)
  • परमिशन सेटिंग्स और सत्यापन
  • Docker Compose की इंस्टॉलेशन
  • ट्रबलशूटिंग और आगे के कदम

आप लेख को शुरू से अंत तक पढ़ सकते हैं, या यदि Docker पहले से इंस्टॉल है, तो केवल “परमिशन” या “Compose” सेक्शन पर ध्यान केंद्रित कर सकते हैं।

2. पूर्वापेक्षाएँ और तैयारी

Docker स्वयं को इंस्टॉल करना अपेक्षाकृत सरल है, लेकिन आपके Ubuntu संस्करण या मौजूदा पर्यावरण के आधार पर कुछ बिंदु हैं जिन्हें पहले जाँचना उपयोगी रहता है। यह सेक्शन सुगम इंस्टॉलेशन के लिए आवश्यक पूर्वापेक्षाएँ और तैयारियों का सार प्रस्तुत करता है।

2-1. समर्थित Ubuntu संस्करण

Docker कई Ubuntu संस्करणों पर काम करता है, लेकिन निम्नलिखित LTS रिलीज़ सबसे अधिक उपयोग में आती हैं:

  • Ubuntu 22.04 LTS (सिफ़ारिश किया गया)
  • Ubuntu 20.04 LTS
  • Ubuntu 24.04 LTS (नवीनतम)

LTS (Long Term Support) रिलीज़ दीर्घकालिक स्थिरता प्रदान करती हैं, जिससे Docker‑आधारित विकास पर्यावरण को बनाए रखना आसान हो जाता है।

Non‑LTS रिलीज़ (जैसे 23.10) भी उपयोग की जा सकती हैं, लेकिन पेशेवर वातावरण में आमतौर पर LTS संस्करणों को प्राथमिकता दी जाती है।

2-2. पूर्व‑इंस्टॉल्ड Docker पैकेज


.Ubuntu के डिफ़ॉल्ट रिपॉज़िटरी में docker.io नाम का पैकेज शामिल है। हालांकि, यह Docker Inc. द्वारा प्रदान किया गया आधिकारिक Docker पैकेज नहीं है, और अपडेट अक्सर पीछे रह जाते हैं। इसलिए, आधिकारिक रिपॉज़िटरी से Docker स्थापित करना दृढ़ता से अनुशंसित है

पहले, यदि आवश्यक हो तो किसी भी मौजूदा Docker‑संबंधित पैकेज की जाँच करें और उन्हें हटाएँ:

sudo apt remove docker docker.io containerd runc

यदि संदेश दर्शाता है कि कुछ भी स्थापित नहीं है, तो कोई कार्रवाई आवश्यक नहीं है।

2-3. APT को अपडेट करना और आवश्यक पैकेज स्थापित करना

Docker की आधिकारिक रिपॉज़िटरी जोड़ने से पहले, APT को अपडेट करें और आवश्यक टूल्स स्थापित करें:

sudo apt update
sudo apt install -y ca-certificates curl gnupg

इन टूल्स की आवश्यकता Docker की GPG कुंजी और रिपॉज़िटरी को सुरक्षित रूप से जोड़ने के लिए होती है।

2-4. व्यवस्थापक विशेषाधिकार (sudo) की पुष्टि करना

Docker स्थापना के लिए sudo विशेषाधिकार आवश्यक हैं। यदि आपके खाते में sudo एक्सेस नहीं है, तो किसी व्यवस्थापक खाते में स्विच करें या अनुमति का अनुरोध करें।

आप निम्नलिखित कमांड के साथ sudo एक्सेस की पुष्टि कर सकते हैं:

sudo -v

यदि आपसे पासवर्ड पूछा जाता है और कमांड सफल होता है, तो आप आगे बढ़ने के लिए तैयार हैं।

2-5. नेटवर्क कनेक्टिविटी की जाँच

Docker स्थापित करने के लिए बाहरी रिपॉज़िटरी तक पहुंच आवश्यक है, इसलिए सक्रिय इंटरनेट कनेक्शन अनिवार्य है। कॉरपोरेट या प्रॉक्सी वातावरण में, एक्सेस प्रतिबंधों के कारण GPG कुंजी प्राप्ति विफल हो सकती है।

ऐसे मामलों में, प्रॉक्सी सेटिंग्स या अलाउलिस्ट कॉन्फ़िगरेशन के बारे में अपने नेटवर्क प्रशासक से परामर्श करें।

2-6. स्थापना विधि चुनना

Docker स्थापित करने के तीन मुख्य तरीके हैं:

  1. आधिकारिक Docker रिपॉज़िटरी के माध्यम से स्थापित करें (सिफ़ारिश किया गया)
  2. get.docker.com इंस्टॉलेशन स्क्रिप्ट का उपयोग करें (तेज़ और आसान)
  3. Docker .deb पैकेज को मैन्युअल रूप से डाउनलोड और स्थापित करें (विशेष मामलों में)

यह लेख मुख्यतः आधिकारिक रिपॉज़िटरी विधि पर केंद्रित है, जो सबसे सामान्य और बनाए रखने में आसान है।

3. Docker स्थापित करना

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

यह विधि apt upgrade के माध्यम से स्थिर अपग्रेड की अनुमति देती है, जिससे यह दीर्घकालिक उपयोग के लिए आदर्श बनती है।

3-1. आधिकारिक Docker रिपॉज़िटरी जोड़ना (सिफ़ारिश किया गया)

पहले, Docker द्वारा प्रदान की गई आधिकारिक GPG कुंजी को पंजीकृत करें और Docker की रिपॉज़िटरी को APT में जोड़ें।
एक बार यह सही ढंग से कॉन्फ़िगर हो जाए, तो आप Ubuntu की डिफ़ॉल्ट रिपॉज़िटरी से पुराना docker.io पैकेज गलती से स्थापित करने से बच सकते हैं।

3-1-1. GPG कुंजी पंजीकृत करना

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
  • /etc/apt/keyrings/ Ubuntu 22.04 और बाद के संस्करणों के लिए अनुशंसित कुंजी संग्रह स्थान है
  • --dearmor कुंजी को बाइनरी फ़ॉर्मेट में बदलता है

यह चरण APT को आधिकारिक Docker रिपॉज़िटरी पर भरोसा करने की अनुमति देता है।

3-1-2. रिपॉज़िटरी जोड़ना

अगला, Docker की रिपॉज़िटरी को APT की स्रोत सूची में जोड़ें।

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo $VERSION_CODENAME) stable" \
  | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

मुख्य बिंदु:

  • $(. /etc/os-release && echo $VERSION_CODENAME) स्वचालित रूप से सही Ubuntu कोडनेम डालता है (जैसे jammy या focal )
  • केवल स्थिर (stable) रिपॉज़िटरी जोड़ी गई है

3-1-3. रिपॉज़िटरी जानकारी अपडेट करना

रिपॉज़िटरी जोड़ने के बाद, APT इंडेक्स को अपडेट करें।

sudo apt update

इस बिंदु पर, docker-ce (Docker Engine) एक स्थापित करने योग्य पैकेज के रूप में दिखाई देना चाहिए।

3-2. Docker Engine स्थापित करना

अब मुख्य Docker पैकेज स्थापित करें।

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

पैकेज भूमिकाएँ:

  • docker-ce : Docker Engine कोर
  • docker-ce-cli : Docker कमांड‑लाइन इंटरफ़ेस
  • containerd.io : Docker द्वारा उपयोग किया जाने वाला कोर कंटेनर रनटाइम
  • docker-buildx-plugin : मल्टी‑प्लेटफ़ॉर्म बिल्ड जैसी उन्नत बिल्ड सुविधाएँ
  • docker-compose-plugin : Docker Compose V2 ( docker compose कमांड)

इंस्टॉल करने के बाद, Docker डेमन स्वतः शुरू हो जाता है।

3-3. इंस्टॉलेशन की जाँच

Docker की रनटाइम स्थिति जाँचने के लिए नीचे दिया गया कमांड चलाएँ:

sudo systemctl status docker

यदि आपको active (running) दिखता है, तो Docker सही ढंग से काम कर रहा है।

स्थिति दृश्य से बाहर निकलने के लिए q दबाएँ।

3-4. वैकल्पिक: सुविधा के लिए स्क्रिप्ट‑आधारित इंस्टॉलेशन

Docker एक ऑल‑इन‑वन इंस्टॉलेशन स्क्रिप्ट भी प्रदान करता है।

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

फ़ायदे:

  • कम कमांड और तेज़ सेट‑अप
  • सरल या अस्थायी वातावरण के लिए आदर्श

नुकसान:

  • संस्करण नियंत्रण कठिन
  • उत्पादन या दीर्घकालिक उपयोग के लिए अक्सर अनुशंसित नहीं

हालाँकि शुरुआती लोगों के लिए सुविधाजनक है, यह लेख रखरखाव को प्राथमिकता देता है और इसलिए आधिकारिक रिपॉज़िटरी विधि पर केंद्रित है।

3-5. नवीनतम Ubuntu रिलीज़ (जैसे 24.04) के लिए नोट्स

मुख्य Ubuntu रिलीज़ के तुरंत बाद, Docker का आधिकारिक रिपॉज़िटरी नई संस्करण को पूरी तरह समर्थन नहीं कर सकता। ऐसे मामलों में, नीचे दी गई बातों की जाँच करें:

  • GPG कुंजी का स्थान और फ़ॉर्मेट वर्तमान विनिर्देशों से मेल खाता है या नहीं
  • VERSION_CODENAME आधिकारिक रूप से समर्थित है या नहीं
  • apt update के दौरान कोई सिग्नेचर त्रुटि नहीं आती

यदि समर्थन में देरी है, तो अस्थायी रूप से get.docker.com स्क्रिप्ट का उपयोग एक व्यावहारिक समाधान हो सकता है।

4. उपयोगकर्ता अनुमतियाँ और Docker को sudo के बिना चलाना

Docker इंस्टॉल करने के बाद, आप तुरंत docker कमांड का उपयोग करना चाह सकते हैं। हालांकि, डिफ़ॉल्ट रूप से आपको हर कमांड के पहले sudo लगाना पड़ता है

यह व्यवहार सुरक्षा कारणों से जानबूझकर किया गया है, पर दैनिक विकास या सीखने के लिए असुविधाजनक है। इसे हल करने के लिए, आप अपने उपयोगकर्ता को docker समूह में जोड़ सकते हैं, जिससे Docker कमांड sudo के बिना चलाए जा सकते हैं।

4-1. sudo के बिना चलाने का महत्व

Ubuntu पर Docker डेमन (dockerd) रूट विशेषाधिकारों के साथ चलता है।
इसलिए, docker कमांड के माध्यम से कंटेनर बनाना या हटाना सामान्यतः रूट एक्सेस की आवश्यकता रखता है।

docker समूह इस आवश्यकता को संभालने के लिए मौजूद है।

  • इस समूह के सदस्य सीधे Docker डेमन तक पहुँच सकते हैं
  • docker run जैसे कमांड sudo के बिना चलाए जा सकते हैं
  • विकास के लिए यह लगभग अनिवार्य है

ध्यान रखें कि docker समूह प्रभावी रूप से रूट के बराबर विशेषाधिकार देता है, इसलिए साझा वातावरण में सावधानी बरतनी चाहिए।
(व्यक्तिगत डेस्कटॉप या WSL2 के लिए यह आमतौर पर समस्या नहीं बनता।)

4-2. अपने उपयोगकर्ता को docker समूह में जोड़ना

वर्तमान में लॉग‑इन किए हुए उपयोगकर्ता को docker समूह में जोड़ें:

sudo usermod -aG docker $USER

यह कमांड उपयोगकर्ता को समूह में जोड़ता है। -aG विकल्प समूह में जोड़ने के लिए है।

4-3. परिवर्तन लागू करना

समूह सदस्यता में बदलाव लॉग‑आउट और फिर लॉग‑इन करने के बाद प्रभावी होते हैं।

परिवर्तन तुरंत लागू करने के लिए आप यह भी चला सकते हैं:

newgrp docker

यह नया शेल सत्र शुरू करता है जिसमें docker समूह की अनुमतियाँ लागू हो गई हैं।

4-4. sudo‑मुक्त निष्पादन की जाँच

अब sudo के बिना Docker आज़माएँ:

docker run hello-world

सफल आउटपुट कुछ इस प्रकार होगा:

  • Hello from Docker!
  • इमेज डाउनलोड हो गई और संदेश प्रदर्शित हुआ

यदि कोई त्रुटि आती है, तो नीचे दी गई बातों की जाँच करें:

  • समूह सदस्यता बदलने के बाद आपने लॉग‑आउट और लॉग‑इन किया है?
  • क्या /usr/bin/docker उपयोग हो रहा है?
  • क्या Docker डेमन चल रहा है (systemctl status docker)?

4-5. सुरक्षा विचार (महत्वपूर्ण)

docker समूह शक्तिशाली विशेषाधिकार प्रदान करता है जो प्रभावी रूप से रूट एक्सेस के बराबर होते हैं।

  • मनमाने फ़ाइलों को पढ़ना
  • होस्ट डायरेक्टरी को कंटेनर में माउंट करना
  • नेटवर्क ऑपरेशन्स करना
  • Docker सॉकेट के माध्यम से सिस्टम‑स्तर का नियंत्रण

इन कारणों से, साझा या उत्पादन वातावरण में इस समूह का उपयोग करते समय विशेष सावधानी बरतें।

.

यह व्यक्तिगत सिस्टमों के लिए स्वीकार्य है, लेकिन साझा सर्वरों पर उपयोगकर्ता प्रबंधन अत्यंत महत्वपूर्ण है।

ऐसे मामलों में, आप रूटलेस Docker पर विचार कर सकते हैं, जिसके बारे में बाद के अनुभागों में चर्चा की गई है।

5. स्टार्टअप और ऑपरेशन सत्यापन

Docker स्थापना और अनुमति कॉन्फ़िगरेशन पूर्ण होने के बाद, अगला कदम सुनिश्चित करना है कि Docker सही ढंग से काम कर रहा है
यह अनुभाग Docker सेवा की स्थिति जांचने और वास्तव में कंटेनर चलाने के तरीकों को समझाता है।

5-1. Docker डेमन स्थिति की जाँच

पहले यह सत्यापित करें कि Docker बैकग्राउंड में सही ढंग से चल रहा है।

sudo systemctl status docker

मुख्य स्थिति संकेतक:

  • active (running) → सामान्य रूप से कार्यरत
  • inactive → नहीं चल रहा (हाथ से शुरू करना आवश्यक)
  • failed → कॉन्फ़िगरेशन या निर्भरता त्रुटि

यदि स्थिति inactive या failed है, तो निम्न कमांड से Docker शुरू करें:

sudo systemctl start docker

OS बूट होने पर Docker स्वचालित रूप से शुरू हो, इसके लिए:

sudo systemctl enable docker

5-2. hello-world कंटेनर के साथ ऑपरेशन सत्यापन

Docker स्थापना को सत्यापित करने का सबसे सामान्य तरीका आधिकारिक hello-world इमेज चलाना है।

docker run hello-world

यह कमांड निम्न कार्य करता है:

  1. यदि स्थानीय रूप से उपलब्ध नहीं है तो Docker Hub से इमेज डाउनलोड करता है
  2. इमेज से एक कंटेनर शुरू करता है
  3. एक परीक्षण संदेश प्रदर्शित करता है और समाप्त हो जाता है

यदि सफल होता है, तो आपको नीचे दिखाए गए समान आउटपुट दिखाई देगा:

Hello from Docker!
This message shows that your installation appears to be working correctly.

यदि यह संदेश दिखाई देता है, तो Docker स्थापित और सही ढंग से कार्य कर रहा है।

5-3. बुनियादी Docker कमांड आज़माना

एक बार बुनियादी ऑपरेशन की पुष्टि हो जाने पर, कुछ सामान्य Docker कमांड आज़माएँ।

5-3-1. Docker इमेज सूचीबद्ध करना

docker images

यह स्थानीय रूप से डाउनलोड की गई इमेजों की सूची दिखाता है। यदि hello-world दिखाई देता है, तो सब कुछ अपेक्षित रूप से काम कर रहा है।

5-3-2. चल रहे कंटेनर जांचना

docker ps

यह कमांड वर्तमान में चल रहे कंटेनरों को सूचीबद्ध करता है।
(hello-world कंटेनर तुरंत समाप्त हो जाता है और आमतौर पर दिखाई नहीं देता।)

रुकें हुए कंटेनर भी दिखाने के लिए:

docker ps -a

5-3-3. आधिकारिक इमेज उदाहरण चलाना

एक सरल Nginx वेब सर्वर आज़माने के लिए:

docker run -d -p 8080:80 nginx
  • -d → बैकग्राउंड में चलाएँ
  • -p → होस्ट पोर्ट 8080 को कंटेनर पोर्ट 80 से मैप करें

ब्राउज़र में http://localhost:8080 खोलें, आपको डिफ़ॉल्ट Nginx पेज दिखेगा।

5-4. कंटेनर रोकना और हटाना

आप निम्न कमांड से चल रहे कंटेनर को रोक सकते हैं:

docker stop <container-id>

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

docker rm <container-id>

अप्रयुक्त इमेज हटाने के लिए:

docker rmi <image-id>

ध्यान रखें कि निर्भरताएँ कंटेनर → इमेज → वॉल्यूम क्रम में होती हैं, इसलिए उन्हें सावधानी से हटाएँ।

5-5. त्रुटियों के सामान्य कारण

● अनुमति त्रुटियाँ

Got permission denied while trying to connect to the Docker daemon socket
→ उपयोगकर्ता docker समूह में जोड़ा नहीं गया है

● Docker डेमन नहीं चल रहा है

Cannot connect to the Docker daemon at unix:///var/run/docker.sock
systemctl start docker से Docker शुरू करें

● इमेज डाउनलोड में नेटवर्क समस्याएँ

→ प्रॉक्सी सेटिंग, DNS कॉन्फ़िगरेशन या नेटवर्क प्रतिबंध जांचें

● पुराना docker.io पैकेज अभी भी स्थापित है

→ इसे पूरी तरह अनइंस्टॉल करें और आधिकारिक रिपॉज़िटरी से Docker पुनः स्थापित करें

6. Docker Compose की स्थापना और उपयोग

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

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

6-1. Docker Compose V2 इंस्टॉलेशन की पुष्टि

जब आधिकारिक रिपॉजिटरी से Docker स्थापित किया जाता है, Docker Compose स्वचालित रूप से एक प्लगइन के रूप में स्थापित होता है

निम्नलिखित कमांड के साथ इंस्टॉलेशन की पुष्टि करें:

docker compose version

यदि सही तरीके से स्थापित हुआ है, तो आपको लगभग इस प्रकार का आउटपुट दिखना चाहिए:

Docker Compose version v2.x.x

यदि आपको docker: 'compose' is not a docker command जैसी त्रुटि मिलती है, तो प्लगइन को मैन्युअल रूप से स्थापित करें:

sudo apt install docker-compose-plugin

6-2. Docker Compose के लाभ

Docker Compose के मुख्य लाभ इस प्रकार हैं:

  • एकाधिक कंटेनरों का एकीकृत प्रबंधन (स्टार्ट, स्टॉप, रीस्टार्ट)
  • कोड के रूप में कॉन्फ़िगरेशन, जिससे पुनरुत्पादक वातावरण सुनिश्चित होते हैं
  • एप्लिकेशन, API और डेटाबेस सेटअप को आसानी से साझा करना
  • एक ही docker compose up कमांड से विकास वातावरण लॉन्च करना

यह Docker Compose को एप्लिकेशन विकास के लिए लगभग अनिवार्य बनाता है।

6-3. Compose कॉन्फ़िगरेशन फ़ाइल की बुनियादी संरचना

Docker Compose सेवाओं को परिभाषित करने के लिए docker-compose.yml (या compose.yaml) नामक फ़ाइल का उपयोग करता है।
एक न्यूनतम उदाहरण के रूप में, Nginx लॉन्च करने वाली सरल कॉन्फ़िगरेशन बनाएं।

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"

फ़ाइल वाले डायरेक्टरी में निम्नलिखित कमांड चलाएँ:

docker compose up -d

Nginx बैकग्राउंड में शुरू हो जाएगा। पुष्टि के लिए अपने ब्राउज़र में http://localhost:8080 खोलें।

6-4. उदाहरण: मल्टी‑कंटेनर सेटअप (वेब + डेटाबेस)

Compose की वास्तविक शक्ति तब दिखती है जब एक साथ कई कंटेनरों का प्रबंधन किया जाता है।
उदाहरण के लिए, एक वेब एप्लिकेशन को MySQL के साथ चलाने के लिए नीचे दिया गया कॉन्फ़िगरेशन उपयोग किया जा सकता है:

services:
  app:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - db-data:/var/lib/mysql

volumes:
  db-data:

व्याख्या:

  • depends_on सुनिश्चित करता है कि डेटाबेस एप्लिकेशन से पहले शुरू हो
  • volumes डेटाबेस डेटा को स्थायी बनाते हैं
  • कई सेवाओं को एक ही YAML फ़ाइल में प्रबंधित किया जाता है

यह विकास वातावरण के लिए अत्यंत व्यावहारिक पैटर्न है।

6-5. अक्सर उपयोग किए जाने वाले Docker Compose कमांड

इन कमांड्स को याद रखना उपयोगी है:

CommandDescription
docker compose up -dStart containers in the background
docker compose downStop and remove containers and networks
docker compose buildBuild images using Dockerfile
docker compose psList containers managed by Compose
docker compose logs -fView logs (optionally per service)

Compose का उपयोग करके आप समान वातावरण को बार‑बार पुनः बनाते रह सकते हैं, जिससे यह टीम विकास के लिए आदर्श बन जाता है।

6-6. विकास में Compose के अनुशंसित उपयोग केस

  • एक‑कमांड स्थानीय वातावरण सेटअप
  • प्रोडक्शन के करीब वातावरण में परीक्षण
  • डेटाबेस, कैश और मैसेज क्यू जैसी संयुक्त सेवाओं को लॉन्च करना
  • वॉल्यूम के साथ डेटा को स्थायी बनाना
  • .env पर्यावरण वेरिएबल्स के साथ कॉन्फ़िगरेशन प्रबंधन
  • जटिल माइक्रोसर्विस आर्किटेक्चर का समर्थन

एक बार जब आप Docker और Compose में सहज हो जाते हैं, तो वातावरण सेटअप का समय काफी घट जाता है, जिससे विकास दक्षता में उल्लेखनीय सुधार होता है।

7. सुरक्षा और संचालन संबंधी विचार

Docker एक अत्यंत शक्तिशाली और सुविधाजनक टूल है, लेकिन “कंटेनराइज़्ड” होना स्वचालित रूप से “सुरक्षित” नहीं बनाता।
Ubuntu पर Docker का नियमित उपयोग करते समय कुछ महत्वपूर्ण सुरक्षा और संचालन बिंदु हैं जिन्हें आपको समझना चाहिए।

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

7-1. docker समूह के पास “वास्तविक रूप से रूट” विशेषाधिकार होते हैं

पहले कॉन्फ़िगर किया गया docker समूह वास्तव में बहुत मजबूत विशेषाधिकार प्रदान करता है।
docker समूह के सदस्य Docker सॉकेट के माध्यम से होस्ट OS को नियंत्रित कर सकते हैं, जो प्रभावी रूप से रूट‑स्तर की पहुँच के बराबर है।

● ध्यान देने योग्य मुख्य बिंदु

  • साझा सर्वरों पर docker समूह में मनमाने उपयोगकर्ताओं को न जोड़ें
  • “sudo की आवश्यकता नहीं” की सुविधा के अलावा प्रभावों को समझें
  • कड़ी सुरक्षा नीतियों वाले संगठनों में, प्रशासनिक अनुमोदन आवश्यक हो सकता है

यह व्यक्तिगत Ubuntu मशीनों या विकास पीसी पर शायद ही कभी समस्या बनती है, लेकिन उत्पादन सर्वरों पर सावधानीपूर्वक निर्णय आवश्यक है।

7-2. Rootless Docker पर विचार (उन्नत विकल्प)

Docker एक सुविधा प्रदान करता है जिसे rootless mode कहा जाता है, जो Docker daemon को रूट के बजाय सामान्य उपयोगकर्ता खाते के तहत चलाने की अनुमति देता है।

लाभ

  • होस्ट OS विशेषाधिकार जोखिम को काफी हद तक कम करता है
  • कठोर सुरक्षा आवश्यकताओं वाले वातावरण में Docker का अधिक सुरक्षित उपयोग संभव बनाता है

हानियाँ

  • कुछ नेटवर्किंग सुविधाओं पर प्रतिबंध है
  • शुरुआती लोगों के लिए कॉन्फ़िगरेशन अधिक जटिल है
  • व्यवहार मानक Docker से अलग हो सकता है

Rootless mode अधिकांश विकास उपयोग मामलों के लिए आवश्यक नहीं है, लेकिन यह एंटरप्राइज़ या अनुपालन‑केंद्रित वातावरण में एक व्यवहार्य विकल्प हो सकता है।

7-3. अप्रयुक्त इमेज और कंटेनरों की सफाई

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

● अप्रयुक्त संसाधनों को हटाने के लिए कमांड

अप्रयुक्त इमेज हटाना

docker image prune

कंटेनर और नेटवर्क एक साथ हटाना

docker system prune

आक्रामक सफाई (सावधानी से उपयोग करें)

docker system prune -a

-a विकल्प सभी अप्रयुक्त इमेज को हटा देता है, इसलिए इसे सावधानी से उपयोग करें।

7-4. उत्पादन में “latest” टैग का उपयोग न करें

विकास के दौरान nginx:latest जैसे टैग सुविधाजनक होते हैं, लेकिन उत्पादन में उनका उपयोग अनुशंसित नहीं है।

कारण

  • latest के पीछे का सटीक संस्करण गारंटीकृत नहीं है
  • अप्रत्याशित अपडेट रनटाइम विफलताएँ पैदा कर सकते हैं
  • पुनरुत्पादनशीलता की हानि अस्थिर डिप्लॉयमेंट्स का कारण बनती है

सिफारिश किया गया तरीका: संस्करणों को स्पष्ट रूप से पिन करें

उदाहरण

image: nginx:1.25

स्पष्ट संस्करण निर्धारण उत्पादन वातावरण के लिए एक मूलभूत नियम है।

7-5. Dockerfiles में आधिकारिक बेस इमेज का उपयोग करें

Dockerfiles बनाते समय, इन दिशानिर्देशों का पालन करें:

  • आधिकारिक इमेज (लाइब्रेरी इमेज) को प्राथमिकता दें
  • अज्ञात या अविश्वसनीय लेखकों द्वारा रखी गई इमेज से बचें
  • Alpine जैसी हल्की OS इमेज का उपयोग करते समय, असुरक्षा समर्थन स्थिति की जाँच करें

अविश्वसनीय इमेज में मैलवेयर हो सकता है। विकास वातावरण में भी, संभव हो तो उनसे बचें।

7-6. नेटवर्क और पोर्ट एक्सपोज़र के साथ सावधान रहें

जब कंटेनर होस्ट OS पर पोर्ट एक्सपोज़ करते हैं, तो वे सिस्टम के बाहर से सुलभ हो सकते हैं।

सावधानियाँ

  • अनावश्यक -p 80:80 मैपिंग से बचें
  • स्थानीय उपयोग के लिए, केवल localhost से बाइंड करें, जैसे -p 127.0.0.1:8080:80
  • UFW जैसे फ़ायरवॉल सेटिंग्स के साथ संयोजन करें
  • उत्पादन में, बेहतर सुरक्षा के लिए रिवर्स प्रॉक्सी (जैसे Nginx) का उपयोग करें

VPS या क्लाउड‑आधारित Ubuntu सर्वरों पर पोर्ट प्रबंधन विशेष रूप से महत्वपूर्ण है।

7-7. विफलताओं के दौरान लॉग प्रबंधन

Docker लॉग निम्न कमांड से देखे जा सकते हैं:

docker logs <container-name>

बड़े मात्रा में लॉग जल्दी डिस्क स्पेस खा सकते हैं, इसलिए log drivers और log rotation को कॉन्फ़िगर करने पर विचार करें।

8. सामान्य समस्याएँ और ट्रबलशूटिंग

हालांकि Docker एक शक्तिशाली टूल है, पर्यावरण अंतर या कॉन्फ़िगरेशन त्रुटियों के कारण Ubuntu पर अप्रत्याशित त्रुटियाँ हो सकती हैं। यह अनुभाग शुरुआती से मध्यवर्ती स्तर तक की सामान्य समस्याओं और उनके समाधान का सारांश प्रस्तुत करता है।

8-1. Docker Daemon से कनेक्ट नहीं हो पा रहा है

● त्रुटि संदेश

Cannot connect to the Docker daemon at unix:///var/run/docker.sock.

● कारण और समाधान

  1. Docker daemon चल नहीं रहा है : sudo systemctl start docker
  2. docker समूह में परिवर्तन लागू नहीं हुए : लॉग आउट करें और फिर लॉग इन करें, या newgrp docker चलाएँ
  3. /var/run/docker.sock की अनुमति समस्या : सुनिश्चित करें कि उपयोगकर्ता docker समूह में है

8-2. Permission Denied त्रुटियाँ

● सामान्य त्रुटि

Got permission denied while trying to connect to the Docker daemon socket

● समाधान

कारण लगभग हमेशा docker समूह कॉन्फ़िगरेशन की कमी होता है।

sudo usermod -aG docker $USER

फिर लॉग आउट करें और फिर लॉग इन करें।

.### 8-3. APT रिपॉजिटरी जोड़ते समय GPG त्रुटियाँ

● त्रुटि उदाहरण

NO_PUBKEY XXXXXXXX

या

The following signatures couldn't be verified

● कारण और समाधान

  • GPG कुंजी सही ढंग से पंजीकृत नहीं थी
  • नेटवर्क प्रतिबंधों के कारण curl विफल हुआ

कुंजी को फिर से पंजीकृत करें:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
 | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

फिर sudo apt update कमांड फिर से चलाएँ।

8-4. पोर्ट बाइंडिंग टकराव

● त्रुटि उदाहरण

Bind for 0.0.0.0:80 failed: port is already allocated.

● कारण

  • पोर्ट पहले से ही होस्ट पर किसी अन्य प्रक्रिया द्वारा उपयोग में है
  • कोई अन्य Docker कंटेनर वही पोर्ट उपयोग कर रहा है

● समाधान

जाँचें कि कौन सी प्रक्रिया पोर्ट का उपयोग कर रही है:

sudo lsof -i -P -n | grep :80

चल रहे कंटेनरों की जाँच करें:

docker ps

पोर्ट मैपिंग बदलें:

-p 8080:80

8-5. इमेज डाउनलोड विफलताएँ

● सामान्य कारण

  • नेटवर्क प्रतिबंध (कॉरपोरेट वातावरण)
  • DNS कॉन्फ़िगरेशन समस्याएँ
  • Docker Hub तक पहुँच अवरुद्ध

● समाधान

  • DNS सर्वर बदलें (जैसे 1.1.1.1 या 8.8.8.8)
  • प्रॉक्सी कॉन्फ़िगरेशन सत्यापित करें
  • यदि पर्यावरण की आवश्यकता हो तो VPN का उपयोग करें

8-6. डिस्क स्पेस समाप्ति त्रुटियाँ

● सामान्य संदेश

no space left on device

● समाधान

अप्रयुक्त संसाधनों को हटाएँ:

docker system prune -a

इमेज, कंटेनर और वॉल्यूम की समीक्षा करें:

docker images
docker ps -a
docker volume ls

डिस्क स्पेस समाप्ति Docker संचालन संबंधी सबसे सामान्य समस्याओं में से एक है।