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

Docker Hello World: शुरुआत करें और सुनिश्चित करें कि सब कुछ काम कर रहा है

docker run hello-world चलाना आपके Docker इंस्टॉलेशन के सही से काम करने की सबसे तेज़ पुष्टि है, यह समझने का तरीका है कि कंटेनर चलाने पर क्या होता है, और वास्तविक एप्लिकेशन बनाने से पहले आम सेटअप समस्याओं का समाधान करने का साधन।
· 7 मि॰ पढ़ें

AI के साथ खोजें

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

अच्छी खबर यह है कि Docker एक बिल्ट-इन टेस्ट इमेज प्रदान करता है, जिसका नाम hello-world है, जो पुष्टि करता है कि सब कुछ काम कर रहा है। अगर Docker ठीक से कॉन्फ़िगर है, तो आपको तुरंत फीडबैक पाने के लिए बस एक कमांड चलानी होती है।

इस लेख में, मैं बताऊंगा कि hello-world इमेज क्या करती है, इसे कैसे चलाना है, आउटपुट का मतलब क्या होता है, और जब कुछ गड़बड़ हो तो आम समस्याओं को कैसे ठीक करना है।

Hello World उदाहरण चलाने के बाद, आप Docker की बुनियादी बातें सीखने के लिए तैयार हैं। हमारा Introduction to Docker कोर्स आपको एक ही दोपहर में गति पकड़ने में मदद करेगा।

Docker Hello World क्या है?

hello-world इमेज आपके इंस्टॉलेशन की जाँच के लिए Docker का आधिकारिक डायग्नोस्टिक टूल है।

Docker इस इमेज को सबसे छोटी संभव कंटेनर के रूप में मेंटेन करता है जो साबित कर सके कि Docker काम कर रहा है। यह एक छोटा-सा निष्पादन योग्य प्रोग्राम है जो एक पुष्टि संदेश प्रिंट करता है और बाहर निकल जाता है। बस इतना ही।

Docker hello-world इसलिए देता है क्योंकि नए उपयोगकर्ताओं को तीन बातों की त्वरित पुष्टि चाहिए:

  • Docker आपके सिस्टम पर सही से इंस्टॉल है
  • आपके पास Docker कमांड चलाने के लिए सही परमिशन हैं
  • Docker डेमॉन सुलभ है और रिक्वेस्ट का जवाब दे रहा है

इसे ऐसे समझें जैसे Python इंस्टॉल करने के बाद python --version चलाना। आप बस यह पक्का कर रहे हैं कि टूल इस्तेमाल के लिए तैयार है — अभी कुछ बना नहीं रहे।

Docker Hello World कैसे चलाएँ

hello-world इमेज चलाने के लिए एक कमांड काफी है।

docker run hello-world

जब आप यह कमांड चलाते हैं, Docker दो काम करता है:

  • जाँचता है कि इमेज लोकली मौजूद है या नहीं। Docker आपके लोकल इमेज कैश में देखता है कि आपने पहले से hello-world डाउनलोड की है या नहीं। अगर इमेज मिल जाती है, तो Docker डाउनलोड छोड़कर सीधे उसे रन कर देता है।

  • अगर इमेज लोकली नहीं मिलती, तो Docker उसे Docker Hub से खींचता है। Docker Hub डिफ़ॉल्ट रजिस्ट्री है जहाँ Docker आधिकारिक इमेज स्टोर करता है। hello-world इमेज बहुत छोटी होती है — बस कुछ किलोबाइट्स, इसलिए डाउनलोड जल्दी हो जाता है।

Docker के पास इमेज आ जाने के बाद, वह उसी इमेज से एक कंटेनर बनाता और चलाता है। कंटेनर अपना बिल्ट-इन प्रोग्राम चलाता है, पुष्टि संदेश प्रिंट करता है, और बाहर निकल जाता है।

Docker Hello World चलाने पर क्या होता है?

जब आप docker run hello-world चलाते हैं, तो यह स्टेप-बाय-स्टेप फ्लो होता है।

पहले, Docker जाँचता है कि इमेज लोकली मौजूद है या नहीं। वह आपके लोकल इमेज कैश में ढूँढता है कि आपने पहले से hello-world डाउनलोड की है या नहीं। अगर इमेज मिल जाती है, तो Docker अगले स्टेप पर बढ़ जाता है। अगर नहीं, तो Docker, Docker Hub से कनेक्ट होकर इमेज पुल करता है।

फिर, Docker कंटेनर बनाता है उस इमेज से। इमेज एक टेम्पलेट जैसी होती है — इसमें प्रोग्राम और उसे चलाने के लिए ज़रूरी सब कुछ होता है। कंटेनर उस टेम्पलेट का वास्तविक चल रहा इंस्टेंस होता है।

कंटेनर अपना प्रोग्राम चलाता है, जो आपके टर्मिनल पर एक पुष्टि संदेश प्रिंट करता है। यह संदेश बताता है कि Docker ने अभी क्या किया और पुष्टि करता है कि सब कुछ सही चल रहा है।

आख़िर में, कंटेनर बाहर निकल जाता है। hello-world प्रोग्राम लगातार चलने के लिए बना नहीं है। यह संदेश प्रिंट करता है और तुरंत रुक जाता है। कंटेनर आपके सिस्टम पर बना रहता है, लेकिन रुकी हुई अवस्था में।

यह पूरा प्रोसेस कमांड चलाते ही अपने-आप होता है; आपको इनमें से किसी भी स्टेप को मैन्युअल रूप से मैनेज करने की ज़रूरत नहीं है।

Docker Hello World के आउटपुट को समझना

जब hello-world सफलतापूर्वक चलता है, तो आपको कई पंक्तियों वाला संदेश दिखेगा जो बताता है कि अभी क्या-क्या हुआ।

Docker run hello-world आउटपुट

आउटपुट की शुरुआत इस पुष्टि से होती है कि Docker को लोकली इमेज नहीं मिली, इसलिए उसने उसे Docker Hub से पुल किया। आपको ऐसा कुछ दिखेगा: "Unable to find image 'hello-world:latest' locally" और उसके बाद डाउनलोड प्रोग्रेस बार्स।

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

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

आख़िर में, आप देखेंगे कि कंटेनर बाहर निकल गया। hello-world प्रोग्राम अपना संदेश प्रिंट करके तुरंत रुकने के लिए बनाया गया है — यह कोई लंबा चलने वाली सेवा या एप्लिकेशन नहीं है। Docker के काम करने की पुष्टि होते ही कंटेनर का काम पूरा हो जाता है।

यदि आपको यह पूरा आउटपुट बिना त्रुटि के दिखता है, तो आपका Docker इंस्टॉलेशन सही काम कर रहा है और आप वास्तविक कंटेनर चलाने के लिए तैयार हैं।

Docker Hello World चलाते समय आम समस्याएँ

इतना सरल टेस्ट hello-world भी फेल हो सकता है, अगर Docker सही से सेटअप नहीं है। यहाँ सबसे आम समस्याएँ और उनके समाधान दिए गए हैं।

Docker कमांड नहीं मिला

यदि आपको "docker: command not found" या "docker is not recognized" दिखता है, तो Docker इंस्टॉल नहीं है या आपके सिस्टम के PATH में नहीं है।

Linux पर जाँचें कि Docker इंस्टॉल है या नहीं:

which docker

Image 2 - Docker location

Docker का लोकेशन

अगर यह कुछ नहीं लौटाता, तो आपको Docker इंस्टॉल करना होगा। macOS और Windows पर, सुनिश्चित करें कि Docker Desktop इंस्टॉल है और चल रहा है।

Permission denied त्रुटियाँ

आपको "permission denied while trying to connect to the Docker daemon socket" दिख सकता है।

यह तब होता है जब आपके यूज़र अकाउंट के पास Docker तक पहुँचने की अनुमति नहीं होती। Linux पर, आपको या तो sudo के साथ Docker चलाना होगा या अपने यूज़र को docker ग्रुप में जोड़ना होगा:

sudo usermod -aG docker $USER

परिवर्तन प्रभावी होने के लिए लॉग आउट करके दोबारा लॉग इन करें। macOS और Windows पर Docker Desktop के साथ यह समस्या नहीं होती।

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

अगर आपको "Cannot connect to the Docker daemon" मिलता है, तो Docker सर्विस नहीं चल रही है।

Linux पर, Docker सर्विस शुरू करें:

sudo systemctl start docker

macOS और Windows पर, Docker Desktop खोलें। एप्लिकेशन चलने पर डेमॉन अपने-आप शुरू हो जाता है। तैयार होने पर आपको सिस्टम ट्रे में Docker आइकन दिखेगा।

इमेज पुल करते समय नेटवर्क समस्याएँ

कभी-कभी Docker, Docker Hub से hello-world इमेज डाउनलोड नहीं कर पाता। आपको पुल फेल होने या कनेक्शन टाइमआउट्स से जुड़ी त्रुटियाँ दिखेंगी।

सबसे पहले अपना इंटरनेट कनेक्शन जाँचें। यदि आप किसी कॉर्पोरेट फ़ायरवॉल या प्रॉक्सी के पीछे हैं, तो आपको Docker को उसके लिए कॉन्फ़िगर करना पड़ सकता है। Linux पर, यह /etc/systemd/system/docker.service.d/http-proxy.conf में जाता है। Docker Desktop पर, आप Settings में प्रॉक्सी सेट कर सकते हैं।

यदि ये उपाय काम न करें, तो त्रुटि संदेश आमतौर पर सही दिशा बताता है — उसे ध्यान से पढ़ें।

Docker Hello World के बाद क्या करें

अब जब आपने पुष्टि कर ली है कि Docker काम कर रहा है, तो आगे यह करें।

एक वास्तविक कंटेनर चलाएँ एक इंटरैक्टिव शेल के साथ। Ubuntu कंटेनर पुल करके चलाने की कोशिश करें:

docker run -it ubuntu bash

Image 3 - Ubuntu bash

Ubuntu bash

यहाँ -it फ्लैग आपको कंटेनर के अंदर एक इंटरैक्टिव टर्मिनल देते हैं। आप कमांड चला सकते हैं, पैकेज इंस्टॉल कर सकते हैं, और समझ सकते हैं कि कंटेनर कैसे काम करते हैं। कंटेनर से बाहर निकलने के लिए exit टाइप करें।

उपलब्ध इमेज खोजें Docker Hub पर। आपको PostgreSQL और MySQL जैसे डेटाबेस, Python और Node.js जैसी प्रोग्रामिंग भाषाओं, और Redis तथा Nginx जैसे टूल्स की आधिकारिक इमेज मिलेंगी। ब्राउज़ करें hub.docker.com पर या सीधे कमांड लाइन से खोजें:

docker search python

उपलब्ध Python इमेजें। 

एक Dockerfile के साथ अपनी खुद की इमेज बनाएँ। सरल शुरुआत करें: Dockerfile नाम की फ़ाइल बनाएँ जो आपके एप्लिकेशन कोड को कंटेनर में कॉपी करे और उसे चलाने का तरीका परिभाषित करे। कुछ पंक्तियों वाला एक बेसिक Dockerfile भी आपको सिखाएगा कि निर्देशों से इमेज कैसे बनाई जाती हैं।

निष्कर्ष

docker run hello-world कमांड एक काम बेहतरीन ढंग से करती है: यह साबित करती है कि आपका Docker इंस्टॉलेशन काम कर रहा है।

यह कोई वास्तविक एप्लिकेशन नहीं है। यह आपको कंटेनर बनाना या प्रोडक्शन सेवाएँ डिप्लॉय करना नहीं सिखाएगा। लेकिन यह आपको सुकून देगा कि आपके Docker इंस्टॉलेशन में कोई समस्या नहीं है।

यदि hello-world बिना त्रुटियों के चला और पुष्टि संदेश प्रिंट किया, तो आपका Docker वातावरण सही से सेटअप है, और आप वास्तविक कंटेनरों के साथ काम करने के लिए तैयार हैं।

तो, अब आगे क्या? हमारा Introduction to Docker कोर्स लें। यह आपको वह बुनियादी ज्ञान देगा जिसकी आपको टीम में काम करने के लिए ज़रूरत होगी। उसके बाद, हमारा 10 Docker Project Ideas लेख पढ़कर कुछ उपयोगी बनाइए।

Dario Radečić

लेखक

Dario Radečić

क्रोएशिया में स्थित सीनियर डेटा साइंटिस्ट। 700 से अधिक प्रकाशित लेखों के साथ टॉप टेक राइटर, जिनसे 10M+ व्यूज़ प्राप्त हुए। Machine Learning Automation with TPOT के पुस्तक लेखक।

FAQs

मैं Docker इमेज का आकार कैसे ऑप्टिमाइज़ कर सकता/सकती हूँ?

Alpine Linux जैसे छोटे बेस इमेज से शुरुआत करें, पूर्ण Ubuntu या Debian इमेज की जगह। मल्टी-स्टेज बिल्ड का उपयोग करें ताकि बिल्ड निर्भरताओं को रनटाइम निर्भरताओं से अलग रखा जा सके — इससे आपकी अंतिम इमेज पतली रहती है क्योंकि कंपाइलर और बिल्ड टूल्स शामिल नहीं होते। साथ ही, अपने Dockerfile में RUN कमांड्स को संयोजित करें ताकि लेयरों की संख्या कम हो, और इमेज में अनावश्यक फ़ाइलें कॉपी होने से रोकने के लिए .dockerignore का उपयोग करें।

प्रोडक्शन में Docker इस्तेमाल करने के सर्वोत्तम तरीके क्या हैं?

कंटेनरों को कभी भी root के रूप में न चलाएँ — अपने Dockerfile में एक non-root यूज़र बनाएँ और उसी पर स्विच करें। सुसंगत डिप्लॉयमेंट सुनिश्चित करने के लिए latest की जगह विशिष्ट इमेज टैग्स का उपयोग करें। कंटेनरों के लिए संसाधन सीमाएँ (CPU और मेमोरी) सेट करें ताकि कोई एक कंटेनर होस्ट के सभी संसाधन उपयोग न कर ले। हेल्थ चेक भी महत्वपूर्ण हैं — उन्हें अपने Dockerfile में परिभाषित करें ताकि ऑर्केस्ट्रेशन टूल्स अस्वस्थ कंटेनरों का पता लगाकर उन्हें रीस्टार्ट कर सकें।

मैं Docker को CI/CD पाइपलाइनों के साथ कैसे इंटीग्रेट करूँ?

अधिकांश CI/CD प्लेटफ़ॉर्म, जैसे GitHub Actions, GitLab CI, और Jenkins में Docker सपोर्ट बिल्ट-इन होता है। आम तौर पर आप पाइपलाइन के हिस्से के रूप में अपनी Docker इमेज बनाते हैं, उसे कमिट SHA या वर्ज़न नंबर से टैग करते हैं, फिर Docker Hub या AWS ECR जैसी कंटेनर रजिस्ट्री में पुश करते हैं, और उसके बाद अपने वातावरण में डिप्लॉय करते हैं। कुंजी यह है कि build-tag-push-deploy वर्कफ़्लो को ऑटोमेट किया जाए ताकि हर कोड परिवर्तन एक टेस्टेड, वर्ज़नड कंटेनर इमेज पैदा करे।

Docker में मल्टी-स्टेज बिल्ड उपयोग करने के फायदे क्या हैं?

मल्टी-स्टेज बिल्ड आपको अपने एप्लिकेशन को बनाने के लिए एक सेट के टूल्स और उसे चलाने के लिए दूसरे, छोटे सेट का उपयोग करने देते हैं। उदाहरण के लिए, आप एक स्टेज में Go कंपाइलर सहित टूल्स से Go एप्लिकेशन कंपाइल कर सकते हैं, फिर केवल कंपाइल्ड बाइनरी को अंतिम स्टेज के लिए एक मिनिमल Alpine इमेज में कॉपी कर सकते हैं। इससे इमेज आकार में भारी कमी आती है — एक कंपाइल्ड एप्लिकेशन को बिल्ड टूल्स के लिए 1GB चाहिए हो सकता है, पर चलाने के लिए केवल 20MB। छोटी इमेज का मतलब तेज़ डिप्लॉयमेंट और कम स्टोरेज लागत।

मैं कैसे सुनिश्चित करूँ कि मेरे Docker कंटेनर सुरक्षित रूप से चलें?

डिप्लॉय करने से पहले Docker Scout या Trivy जैसे टूल्स से अपनी इमेजेज़ की कमजोरियों के लिए स्कैन करें। सीक्रेट्स को Dockerfile या environment variables में स्टोर न करें — Docker secrets या बाहरी सीक्रेट मैनेजमेंट टूल्स का उपयोग करें। सुरक्षा पैच पाने के लिए अपनी बेस इमेजेज़ को अद्यतन रखें, और अनावश्यक Linux क्षमताएँ हटाने के लिए --cap-drop फ्लैग से कंटेनर क्षमताओं को सीमित करें। साथ ही, जहाँ संभव हो, read-only फ़ाइलसिस्टम का उपयोग करें और Docker socket को कंटेनरों के अंदर बिल्कुल आवश्यक न हो तो एक्सपोज़ न करें।

विषय