Docker इमेज को कंटेनर के रूप में चलाएं: एक व्यावहारिक शुरुआती मार्गदर्शिका
यह ट्यूटोरियल आपको docker run का उपयोग करके Docker इमेज को आत्मविश्वास से चलाना सिखाता है, स्पष्ट उदाहरणों, व्यावहारिक टिप्स, और ट्रबलशूटिंग सलाह के साथ।
यदि आप सोच रहे हैं कि Docker इमेज कैसे चलाएं, तो आप अकेले नहीं हैं। चाहे आपने Docker Hub से कोई इमेज पुल की हो या खुद बनाई हो, उसे चलाना ही वह मुख्य कदम है जो आपके एप्लिकेशन को जीवन देता है।
यह ट्यूटोरियल शुरुआती के लिए अनुकूल docker run कमांड और उससे आगे की आपकी गाइड है। आप सीखेंगे:
वास्तव में Docker इमेज और कंटेनर क्या होते हैं।
विभिन्न विकल्पों का उपयोग करके इमेज कैसे चलाएं।
और कंटेनर को प्रो की तरह कैसे रोकें, हटाएं, और ट्रबलशूट करें।
अंत तक, आप अपने स्वयं के कंटेनर लॉन्च करने में आत्मविश्वास महसूस करेंगे और समझेंगे कि आंतरिक रूप से क्या चल रहा है।
Docker इमेज और कंटेनर को समझना
कमांड उदाहरणों में जाने से पहले, आइए सरल शब्दों में Docker इमेज और कंटेनर समझें।
यदि आप पहले से ही इन शब्दों से परिचित हैं, तो बेझिझक अगले सेक्शन पर जाएं!
Docker इमेज क्या है?
Docker इमेज आपके ऐप के लिए एक अपरिवर्तनीय ब्लूप्रिंट है। यह कंटेनर को चलाने के लिए आवश्यक हर चीज़ परिभाषित करती है: कोड, लाइब्रेरी, एनवायरनमेंट, और कॉन्फ़िग। एक बार इमेज होने पर, आप उससे एक या सौ कंटेनर स्पिन-अप कर सकते हैं। यह हर बार एक जैसा रहता है।
तो, इमेज आती कहाँ से हैं? Dockerfile उन्हें बनाता है। Dockerfile में आप बताते हैं कि कौन-सी बेस इमेज उपयोग करनी है, कौन-कौन-सी डिपेंडेंसी इंस्टॉल करनी हैं, और आपका ऐप कैसे चलना चाहिए।
एक बार आपका Dockerfile तैयार हो जाए, तो आप docker build कमांड चलाते हैं। यह कमांड फाइल में दिए चरणों का पालन करती है और उन्हें एक पुन: प्रयोज्य इमेज में बदल देती है।
Docker कंटेनर क्या है?
Docker कंटेनर, Docker इमेज का सक्रिय संस्करण है। यह आपके एप्लिकेशन को उसके अपने आइसोलेटेड एनवायरनमेंट में चलने देता है, जिससे होस्ट सिस्टम की परवाह किए बिना समान व्यवहार सुनिश्चित होता है।
यह “एक बार बनाएं, कहीं भी चलाएं” के सिद्धांत का पालन करता है, इसलिए आपको हर बार मैन्युअली एनवायरनमेंट सेट करने की आवश्यकता नहीं पड़ती।
इमेज बनाम कंटेनर
निम्न तालिका इमेज और कंटेनर की साइड-बाय-साइड तुलना करती है:
इमेज
कंटेनर
इमेज एक मानकीकृत पैकेज है जिसमें कंटेनर चलाने के लिए सभी फाइलें, बायनरी, लाइब्रेरी, और कॉन्फ़िगरेशन शामिल होते हैं।
इमेज का रनटाइम इंस्टांस।
इमेज अपरिवर्तनीय (immutable) होती है। यानी यह तब तक नहीं बदलती जब तक इसे फिर से न बनाया जाए।
कंटेनर परिवर्तनीय (mutable) होता है। आप इसे चलते समय संशोधित कर सकते हैं, नए पैकेज इंस्टॉल कर सकते हैं, या कॉन्फ़िग फाइलें बदल सकते हैं।
Dockerfile (इमेज बनाने के निर्देशों का सेट) एक इमेज बनाता है।
एक इमेज एक कंटेनर बनाती है।
आपका कंप्यूटर इमेज फाइलें स्टोर करता है।
कंटेनर आपकी मेमोरी में चलता है।
यदि आप कंटेनराइजेशन में बिल्कुल नए हैं, तो हमारा Introduction to Docker course आपको हैंड्स-ऑन उदाहरणों के साथ मुख्य अवधारणाओं से परिचित कराता है।
docker run कमांड
जब आप docker run कमांड निष्पादित करते हैं, तो आप Docker को किसी इमेज के आधार पर नया कंटेनर स्पिन-अप करने के लिए कहते हैं।
सरल शब्दों में, आप एक आइसोलेटेड एनवायरनमेंट के अंदर एक प्रोग्राम लॉन्च कर रहे होते हैं। यह प्रोग्राम कुछ भी हो सकता है, एक साधारण वेब ऐप से लेकर कई प्रोसेस वाले पूर्ण सेवाओं तक।
बेसिक सिंटैक्स
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
[OPTIONS] - कंटेनर कैसे चलेगा इसे कस्टमाइज़ करने के लिए अतिरिक्त फ्लैग्स
IMAGE - Docker इमेज का नाम
[COMMAND] - (वैकल्पिक) इमेज के डिफॉल्ट कमांड को ओवरराइड करता है।
[ARG...]- (वैकल्पिक) आर्ग्युमेंट्स।
आम फ्लैग्स और विकल्प
-d: डिटैच्ड मोड: कंटेनर बैकग्राउंड में चलते हैं
-p: पोर्ट मैपिंग: ब्राउज़र से किसी सेवा (जैसे API या वेब ऐप) तक पहुँचने के लिए आपको एक पोर्ट एक्सपोज़ करना होगा। उदाहरण: -p 3000:3000 आपकी मशीन के पोर्ट 3000 को कंटेनर के पोर्ट 3000 से मैप करता है।
--name: Docker कंटेनर को डिफॉल्ट नाम देता है, लेकिन आप इसका उपयोग नया नाम देने के लिए कर सकते हैं।
-v: इसे आप कंटेनर से अलग डेटा रखने के लिए उपयोग करते हैं, ताकि कंटेनर रुकने या डिलीट होने पर भी डेटा बना रहे।
--rm: कंटेनर रुकते ही इसे अपने आप हटा देता है।
-e: इसका उपयोग डेटाबेस पासवर्ड या API कीज़ पास करने के लिए करें, ताकि उन्हें ऐप में हार्डकोड न करना पड़े।
इंटरएक्टिव बनाम डिटैच्ड कंटेनर चलाना
Docker कंटेनर दो तरीकों से चलाता है: इंटरएक्टिव मोड (-it) और डिटैच मोड (-d)। हर मोड का उपयोग आपके लक्ष्य पर निर्भर करता है।
-it: इंटरएक्टिव मोड: यदि आप टर्मिनल का उपयोग करके सीधे कंटेनर के अंदर काम करना चाहते हैं, तो आप -it फ्लैग का उपयोग कर सकते हैं। यह कंटेनर को इंटरएक्टिव मोड में डालता है, ताकि आप कमांड टाइप कर सकें, आउटपुट देख सकें, और रियल-टाइम में काम कर सकें।
-i: इनपुट खुला रखता है ताकि आप कंटेनर में कमांड टाइप कर सकें
-t: कंटेनर के अंदर टर्मिनल-जैसा इंटरफेस देता है
-d: डिटैच्ड मोड: यह कंटेनर को बैकग्राउंड में चलाता है, जिससे आपका टर्मिनल अन्य कार्यों के लिए मुक्त रहता है।
अब जब आप docker run कमांड का सिंटैक्स जानते हैं, यह सेक्शन आपको कस्टम इमेज बनाने और उन्हें चलाने का तरीका दिखाएगा।
Docker Hub से इमेज का उपयोग
Docker Hub कंटेनर इमेज के लिए एक ऑनलाइन लाइब्रेरी की तरह है। आप पहले से बनी इमेज ले सकते हैं या अपनी अपलोड करके दूसरों के साथ साझा कर सकते हैं। यह पब्लिक और प्राइवेट दोनों तरह की रिपॉजिटरी सपोर्ट करता है, इसलिए आप समुदाय के साथ खुलकर इमेज साझा कर सकते हैं या अपनी आंतरिक टीमों के लिए एक्सेस कंट्रोल लागू कर सकते हैं।
कस्टम इमेज चलाना
Docker इमेज चलाने के लिए, आपको पहले Dockerfile का उपयोग करके उसे बनाना होगा। फिर, आप उसे लोकली चला सकते हैं या साझा करने के लिए Docker Hub पर पुश कर सकते हैं।
तो, पहले एक Dockerfile बनाते हैं। यहाँ एक नमूना है:
# Use official Python base image
FROM python:3.11-slim
# Set working directory in the container
WORKDIR /app
# Copy requirements file and install dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copy the rest of the app code
COPY . .
EXPOSE 5000
# Set default command
CMD ["python","app.py"]संचालित द्वारा
ऊपर दिए Dockerfile का क्या मतलब है?
FROM python:3.11-slim: Python 3.11 वर्ज़न के साथ बेस इमेज
WORKDIR /app: कंटेनर के अंदर कार्य-निर्देशिका /app सेट करता है।
COPY requirements.txt . : लोकल मशीन से सभी डिपेंडेंसी को कंटेनर की ऐप डायरेक्टरी में ले जाता है।
RUN pip install --no-cache-dir -r requirements.txt: requirements.txt में दी डिपेंडेंसी इंस्टॉल करता है।
COPY . . : वर्तमान कार्य-निर्देशिका का कोड (ऐप्स, कॉन्फ़िग फाइलें, आदि) कंटेनर की ऐप डायरेक्टरी में कॉपी करता है।
CMD ["python", "app.py"]: इस इमेज से कंटेनर शुरू करते समय app.py चलाता है।
चरण 1. Dockerfile बनाएं
आइए देखें कि इस Dockerfile को बिल्ड करने पर क्या होता है।
कुछ एप्लिकेशन के लिए, आपको किसी विशिष्ट कॉन्फ़िगरेशन के साथ इमेज चलाने की आवश्यकता हो सकती है। यहाँ दो आम उदाहरण हैं।
डेटा को स्थायी बनाना
कंटेनर अस्थायी रूप से डेटा स्टोर करते हैं। एक बार उन्हें डिलीट करने पर डेटा चला जाता है। वॉल्यूम, कंटेनर के बाहर डेटा स्टोर करने का तरीका है ताकि कंटेनर हटाए या रीस्टार्ट होने पर भी वह बना रहे।
वॉल्यूम माउंट करने के लिए, आपको निम्न जैसा कमांड चलाना होगा:
docker run -v my-volume:/app/data my-imageसंचालित द्वारा
/app/data में लिखा डेटा कंटेनर हटने के बाद भी वॉल्यूम में सेव रहता है।
एनवायरनमेंट वेरिएबल्स पास करना
एनवायरनमेंट वेरिएबल्स रनटाइम पर Docker कंटेनर को कॉन्फ़िगरेशन सेटिंग्स पास करते हैं। इससे आप Docker इमेज बदले बिना कंटेनर को कस्टमाइज़ कर सकते हैं।
एनवायरनमेंट वेरिएबल्स पास करने के दो तरीके हैं:
आप -e पैरामीटर का उपयोग करके एनवायरनमेंट वेरिएबल्स पास कर सकते हैं। यहाँ एक उदाहरण कमांड है:
docker run -eENV=production -eDEBUG=False my-imageसंचालित द्वारा
आप सभी एनवायरनमेंट वेरिएबल्स के साथ एक .env फाइल बना सकते हैं और उसे कमांड को पास कर सकते हैं। उदाहरण:
ENV=staging
DEBUG=True
SECRET_KEY=mysecretसंचालित द्वारा
चल रहे कंटेनर प्रबंधित करना
एक बार कंटेनर चल रहा हो, आप उसे देख, रोक, और एक्सेस कर सकते हैं। आइए देखें यह कैसे करें।
सक्रिय कंटेनर देखना
अपने सिस्टम पर चल रहे सभी सक्रिय Docker कंटेनरों की सूची देखने के लिए, docker ps कमांड या docker container ls चलाएँ। यह कमांड कंटेनर ID, इमेज, कमांड, पोर्ट, स्टेटस, और अन्य विवरण दिखाती है।
और आगे बढ़कर अप्रयुक्त कंटेनर, वॉल्यूम, नेटवर्क और इमेज हटाने के लिए, Docker prune गाइड देखें।
कंटेनर लॉग और शेल तक पहुँचना
docker logs - docker logs कमांड निष्पादन समय पर मौजूद लॉग को बैच में प्राप्त करता है।
docker exec - docker exec आपको किसी चल रहे कंटेनर के अंदर बिना उसे रोके या रीस्टार्ट किए नया कमांड चलाने देता है। इसे ऐसे समझें जैसे आप अपने कंटेनर के अंदर नया टर्मिनल खोल रहे हों — ताकि आप इधर-उधर देख सकें, स्क्रिप्ट चला सकें, लॉग जाँच सकें, या डीबग कर सकें।
docker attach - docker attach आपके टर्मिनल को सीधे किसी चल रहे कंटेनर की मुख्य प्रक्रिया से जोड़ता है। इसका मतलब है कि आप कंटेनर का लाइव आउटपुट (लॉग, प्रॉम्प्ट आदि) देख सकते हैं और यदि प्रक्रिया इनपुट स्वीकार करती है तो उससे इंटरैक्ट भी कर सकते हैं।
आम समस्याओं का ट्रबलशूटिंग
आम समस्याओं के सरल समाधान। यहाँ Docker इमेज चलाते समय आने वाली कुछ सामान्य त्रुटियाँ और उन्हें हल करने के तरीके दिए गए हैं।
त्रुटि 1: “Error response from daemon: pull access denied for alpine-python, repository does not exist or may require ‘docker login’: denied: requested access to the resource is denied.”
मतलब: Docker ने एक इमेज पुल करने की कोशिश की, इस मामले में alpine-python इमेज Docker Hub से, लेकिन इमेज मौजूद नहीं है या प्राइवेट है, और आप ऑथेंटिकेटेड नहीं हैं।
कैसे ठीक करें:
Docker Hub पर इमेज का नाम और टैग दोबारा जाँचें।
यदि यह प्राइवेट इमेज है, तो ऑथेंटिकेट करने के लिए docker login चलाएँ।
यदि आप कस्टम रजिस्ट्री से पुल कर रहे हैं, तो सुनिश्चित करें कि इमेज मौजूद है।
त्रुटि 2: “No such image found: <image-name>:<tag>”
मतलब: आपने लोकली कोई इमेज चलाने या टैग करने की कोशिश की, लेकिन इमेज (या दिया गया टैग) आपके सिस्टम पर उपलब्ध नहीं है।
कैसे ठीक करें:
उपलब्ध इमेज देखने के लिए docker images का उपयोग करें।
Docker इमेज चलाना कंटेनरों के उपयोग में सबसे महत्वपूर्ण और सशक्तिकरण वाले चरणों में से एक है, चाहे आप कोई साधारण वेब सर्वर स्पिन-अप कर रहे हों या एक जटिल एप्लिकेशन डिप्लॉय कर रहे हों। कुछ ही कमांड जैसे docker run, docker ps, और docker stop के साथ, अब आप आत्मविश्वास से कंटेनर लॉन्च, प्रबंधित और ट्रबलशूट कर सकते हैं।
यदि आप और आगे बढ़ने के लिए तैयार हैं, तो Dockerfile के साथ अपनी खुद की इमेज बनाकर देखें, उन्नत docker run फ्लैग्स एक्सप्लोर करें, या Docker Compose के साथ कई कंटेनरों का प्रबंधन करना सीखें।
अपनी Docker यात्रा जारी रखने के लिए ये कोर्स देखें:
Intermediate Docker: उन्नत इमेज प्रबंधन, वॉल्यूम्स, और मल्टी-कंटेनर एप्लिकेशन सीखें।
यह आमतौर पर दर्शाता है कि इमेज प्राइवेट है या गलत लिखी गई है। नाम, टैग जाँचें और docker login के साथ Docker Hub में लॉग इन होना सुनिश्चित करें।
कंटेनर रुकने के बाद मैं डेटा को कैसे स्थायी रखूँ?⌄
डेटा को कंटेनर के बाहर स्टोर करने और कंटेनर हटने के बाद भी सुरक्षित रखने के लिए -v फ्लैग से वॉल्यूम माउंट करें।
डेवलपमेंट उद्देश्यों के लिए कंटेनर चलाने का सबसे अच्छा तरीका क्या है?⌄
डेवलपमेंट के लिए -it फ्लैग्स से इंटरएक्टिव मोड उपयोग करें, साथ में वॉल्यूम माउंटिंग और एनवायरनमेंट वेरिएबल्स ताकि लोकल डेवलपमेंट जैसा माहौल बने।
मैं अपनी मशीन पर कौन-से पोर्ट कॉन्फ़्लिक्ट कर रहे हैं, यह कैसे पता करूँ?⌄
कौन-सा प्रोसेस किसी विशेष पोर्ट का उपयोग कर रहा है यह जानने के लिए lsof -i :<port> का उपयोग करें, फिर उसे रोकें या अपने कंटेनर के लिए अलग होस्ट पोर्ट चुनें।
मैं चल रहे Docker कंटेनर से लॉग कैसे देखूँ?⌄
चलते कंटेनर के स्टैंडर्ड आउटपुट और एरर स्ट्रीम से लॉग प्राप्त और समीक्षा करने के लिए docker logs <container_id> कमांड का उपयोग करें।
Srujana चार-वर्षीय कंप्यूटर साइंस डिग्री के साथ एक फ्रीलांस टेक राइटर हैं। डेटा साइंस, क्लाउड कंप्यूटिंग, डेवलपमेंट, प्रोग्रामिंग, सुरक्षा, और अन्य कई विषयों पर लिखना उनके लिए स्वाभाविक है। उन्हें शास्त्रीय साहित्य से प्रेम है और नए स्थानों की खोज करना पसंद है।
यदि आप सोच रहे हैं कि Docker इमेज कैसे चलाएं, तो आप अकेले नहीं हैं। चाहे आपने Docker Hub से कोई इमेज पुल की हो या खुद बनाई हो, उसे चलाना ही वह मुख्य कदम है जो आपके एप्लिकेशन को जीवन देता है।
यह ट्यूटोरियल शुरुआती के लिए अनुकूल
docker runकमांड और उससे आगे की आपकी गाइड है। आप सीखेंगे:अंत तक, आप अपने स्वयं के कंटेनर लॉन्च करने में आत्मविश्वास महसूस करेंगे और समझेंगे कि आंतरिक रूप से क्या चल रहा है।
Docker इमेज और कंटेनर को समझना
कमांड उदाहरणों में जाने से पहले, आइए सरल शब्दों में Docker इमेज और कंटेनर समझें।
यदि आप पहले से ही इन शब्दों से परिचित हैं, तो बेझिझक अगले सेक्शन पर जाएं!
Docker इमेज क्या है?
Docker इमेज आपके ऐप के लिए एक अपरिवर्तनीय ब्लूप्रिंट है। यह कंटेनर को चलाने के लिए आवश्यक हर चीज़ परिभाषित करती है: कोड, लाइब्रेरी, एनवायरनमेंट, और कॉन्फ़िग। एक बार इमेज होने पर, आप उससे एक या सौ कंटेनर स्पिन-अप कर सकते हैं। यह हर बार एक जैसा रहता है।
तो, इमेज आती कहाँ से हैं? Dockerfile उन्हें बनाता है। Dockerfile में आप बताते हैं कि कौन-सी बेस इमेज उपयोग करनी है, कौन-कौन-सी डिपेंडेंसी इंस्टॉल करनी हैं, और आपका ऐप कैसे चलना चाहिए।
एक बार आपका Dockerfile तैयार हो जाए, तो आप
docker buildकमांड चलाते हैं। यह कमांड फाइल में दिए चरणों का पालन करती है और उन्हें एक पुन: प्रयोज्य इमेज में बदल देती है।Docker कंटेनर क्या है?
Docker कंटेनर, Docker इमेज का सक्रिय संस्करण है। यह आपके एप्लिकेशन को उसके अपने आइसोलेटेड एनवायरनमेंट में चलने देता है, जिससे होस्ट सिस्टम की परवाह किए बिना समान व्यवहार सुनिश्चित होता है।
यह “एक बार बनाएं, कहीं भी चलाएं” के सिद्धांत का पालन करता है, इसलिए आपको हर बार मैन्युअली एनवायरनमेंट सेट करने की आवश्यकता नहीं पड़ती।
इमेज बनाम कंटेनर
निम्न तालिका इमेज और कंटेनर की साइड-बाय-साइड तुलना करती है:
इमेज
कंटेनर
इमेज एक मानकीकृत पैकेज है जिसमें कंटेनर चलाने के लिए सभी फाइलें, बायनरी, लाइब्रेरी, और कॉन्फ़िगरेशन शामिल होते हैं।
इमेज का रनटाइम इंस्टांस।
इमेज अपरिवर्तनीय (immutable) होती है। यानी यह तब तक नहीं बदलती जब तक इसे फिर से न बनाया जाए।
कंटेनर परिवर्तनीय (mutable) होता है। आप इसे चलते समय संशोधित कर सकते हैं, नए पैकेज इंस्टॉल कर सकते हैं, या कॉन्फ़िग फाइलें बदल सकते हैं।
Dockerfile (इमेज बनाने के निर्देशों का सेट) एक इमेज बनाता है।
एक इमेज एक कंटेनर बनाती है।
आपका कंप्यूटर इमेज फाइलें स्टोर करता है।
कंटेनर आपकी मेमोरी में चलता है।
यदि आप कंटेनराइजेशन में बिल्कुल नए हैं, तो हमारा Introduction to Docker course आपको हैंड्स-ऑन उदाहरणों के साथ मुख्य अवधारणाओं से परिचित कराता है।
docker run कमांड
जब आप
docker runकमांड निष्पादित करते हैं, तो आप Docker को किसी इमेज के आधार पर नया कंटेनर स्पिन-अप करने के लिए कहते हैं।सरल शब्दों में, आप एक आइसोलेटेड एनवायरनमेंट के अंदर एक प्रोग्राम लॉन्च कर रहे होते हैं। यह प्रोग्राम कुछ भी हो सकता है, एक साधारण वेब ऐप से लेकर कई प्रोसेस वाले पूर्ण सेवाओं तक।
बेसिक सिंटैक्स
docker run [OPTIONS] IMAGE [COMMAND] [ARG...][OPTIONS]- कंटेनर कैसे चलेगा इसे कस्टमाइज़ करने के लिए अतिरिक्त फ्लैग्सIMAGE- Docker इमेज का नाम[COMMAND]- (वैकल्पिक) इमेज के डिफॉल्ट कमांड को ओवरराइड करता है।[ARG...]- (वैकल्पिक) आर्ग्युमेंट्स।आम फ्लैग्स और विकल्प
-d: डिटैच्ड मोड: कंटेनर बैकग्राउंड में चलते हैं-p: पोर्ट मैपिंग: ब्राउज़र से किसी सेवा (जैसे API या वेब ऐप) तक पहुँचने के लिए आपको एक पोर्ट एक्सपोज़ करना होगा। उदाहरण:-p 3000:3000आपकी मशीन के पोर्ट 3000 को कंटेनर के पोर्ट 3000 से मैप करता है।--name: Docker कंटेनर को डिफॉल्ट नाम देता है, लेकिन आप इसका उपयोग नया नाम देने के लिए कर सकते हैं।-v: इसे आप कंटेनर से अलग डेटा रखने के लिए उपयोग करते हैं, ताकि कंटेनर रुकने या डिलीट होने पर भी डेटा बना रहे।--rm: कंटेनर रुकते ही इसे अपने आप हटा देता है।-e: इसका उपयोग डेटाबेस पासवर्ड या API कीज़ पास करने के लिए करें, ताकि उन्हें ऐप में हार्डकोड न करना पड़े।इंटरएक्टिव बनाम डिटैच्ड कंटेनर चलाना
Docker कंटेनर दो तरीकों से चलाता है: इंटरएक्टिव मोड (
-it) और डिटैच मोड (-d)। हर मोड का उपयोग आपके लक्ष्य पर निर्भर करता है।-it: इंटरएक्टिव मोड: यदि आप टर्मिनल का उपयोग करके सीधे कंटेनर के अंदर काम करना चाहते हैं, तो आप-itफ्लैग का उपयोग कर सकते हैं। यह कंटेनर को इंटरएक्टिव मोड में डालता है, ताकि आप कमांड टाइप कर सकें, आउटपुट देख सकें, और रियल-टाइम में काम कर सकें।-i: इनपुट खुला रखता है ताकि आप कंटेनर में कमांड टाइप कर सकें-t: कंटेनर के अंदर टर्मिनल-जैसा इंटरफेस देता है-d: डिटैच्ड मोड: यह कंटेनर को बैकग्राउंड में चलाता है, जिससे आपका टर्मिनल अन्य कार्यों के लिए मुक्त रहता है।मुख्य कमांड और श्रेष्ठ प्रथाएं हमेशा हाथ में रखने के लिए हमारा Docker for Data Science Cheat Sheet देखें।
Docker इमेज पुल करना और चलाना
अब जब आप
docker runकमांड का सिंटैक्स जानते हैं, यह सेक्शन आपको कस्टम इमेज बनाने और उन्हें चलाने का तरीका दिखाएगा।Docker Hub से इमेज का उपयोग
Docker Hub कंटेनर इमेज के लिए एक ऑनलाइन लाइब्रेरी की तरह है। आप पहले से बनी इमेज ले सकते हैं या अपनी अपलोड करके दूसरों के साथ साझा कर सकते हैं। यह पब्लिक और प्राइवेट दोनों तरह की रिपॉजिटरी सपोर्ट करता है, इसलिए आप समुदाय के साथ खुलकर इमेज साझा कर सकते हैं या अपनी आंतरिक टीमों के लिए एक्सेस कंट्रोल लागू कर सकते हैं।
कस्टम इमेज चलाना
Docker इमेज चलाने के लिए, आपको पहले Dockerfile का उपयोग करके उसे बनाना होगा। फिर, आप उसे लोकली चला सकते हैं या साझा करने के लिए Docker Hub पर पुश कर सकते हैं।
तो, पहले एक Dockerfile बनाते हैं। यहाँ एक नमूना है:
ऊपर दिए Dockerfile का क्या मतलब है?
FROM python:3.11-slim: Python 3.11 वर्ज़न के साथ बेस इमेजWORKDIR /app: कंटेनर के अंदर कार्य-निर्देशिका/appसेट करता है।COPY requirements.txt .: लोकल मशीन से सभी डिपेंडेंसी को कंटेनर की ऐप डायरेक्टरी में ले जाता है।RUN pip install --no-cache-dir -r requirements.txt: requirements.txt में दी डिपेंडेंसी इंस्टॉल करता है।COPY . .: वर्तमान कार्य-निर्देशिका का कोड (ऐप्स, कॉन्फ़िग फाइलें, आदि) कंटेनर की ऐप डायरेक्टरी में कॉपी करता है।चरण 1. Dockerfile बनाएं
आइए देखें कि इस Dockerfile को बिल्ड करने पर क्या होता है।
नोट: इस कमांड के काम करने के लिए, पहले आपके सिस्टम में Docker सेटअप होना चाहिए; यह गाइड इसमें आपकी मदद करता है।
जब आप बिल्ड कमांड चलाते हैं, तो पर्दे के पीछे यह होता है:
/appसेट होती है।requirements.txtकंटेनर में कॉपी होती है।pip installका उपयोग करके डिपेंडेंसी इंस्टॉल होती हैं।/appमें कॉपी होता है।my-python-appके रूप में टैग किया जाता है।चरण 2: Dockerfile चलाएं
एक बार आपकी इमेज बन जाए, आप इसे इस तरह चला सकते हैं:
जब आप इसे चलाते हैं तो यह होता है:
my-python-appसे एक नया कंटेनर बनाया जाता है।-p 5000:5000)।CMD ["python", "app.py"] चलाया जाता है और ऐप निष्पादित होता है।-dविकल्प (डिटैच्ड मोड) है।इस समय, आप अपने ब्राउज़र में
http://localhost:5000खोल सकते हैं, और आपको निम्न जैसा कुछ दिखाई देगा, जिसका अर्थ है कि आपका एप्लिकेशन चल रहा है:यदि आप मशीन लर्निंग में काम कर रहे हैं, तो ये ML और AI के लिए शीर्ष Docker इमेज आपका एनवायरनमेंट सेटअप तेज कर सकती हैं।
कॉन्फ़िगरेशन के साथ इमेज चलाना
कुछ एप्लिकेशन के लिए, आपको किसी विशिष्ट कॉन्फ़िगरेशन के साथ इमेज चलाने की आवश्यकता हो सकती है। यहाँ दो आम उदाहरण हैं।
डेटा को स्थायी बनाना
कंटेनर अस्थायी रूप से डेटा स्टोर करते हैं। एक बार उन्हें डिलीट करने पर डेटा चला जाता है। वॉल्यूम, कंटेनर के बाहर डेटा स्टोर करने का तरीका है ताकि कंटेनर हटाए या रीस्टार्ट होने पर भी वह बना रहे।
वॉल्यूम माउंट करने के लिए, आपको निम्न जैसा कमांड चलाना होगा:
/app/dataमें लिखा डेटा कंटेनर हटने के बाद भी वॉल्यूम में सेव रहता है।एनवायरनमेंट वेरिएबल्स पास करना
एनवायरनमेंट वेरिएबल्स रनटाइम पर Docker कंटेनर को कॉन्फ़िगरेशन सेटिंग्स पास करते हैं। इससे आप Docker इमेज बदले बिना कंटेनर को कस्टमाइज़ कर सकते हैं।
एनवायरनमेंट वेरिएबल्स पास करने के दो तरीके हैं:
-eपैरामीटर का उपयोग करके एनवायरनमेंट वेरिएबल्स पास कर सकते हैं। यहाँ एक उदाहरण कमांड है:.envफाइल बना सकते हैं और उसे कमांड को पास कर सकते हैं। उदाहरण:नमूना
.envफाइल:चल रहे कंटेनर प्रबंधित करना
एक बार कंटेनर चल रहा हो, आप उसे देख, रोक, और एक्सेस कर सकते हैं। आइए देखें यह कैसे करें।
सक्रिय कंटेनर देखना
अपने सिस्टम पर चल रहे सभी सक्रिय Docker कंटेनरों की सूची देखने के लिए,
docker psकमांड याdocker container lsचलाएँ। यह कमांड कंटेनर ID, इमेज, कमांड, पोर्ट, स्टेटस, और अन्य विवरण दिखाती है।सभी कंटेनर शामिल करने के लिए — केवल चल रहे ही नहीं — जैसे कि जो एग्जिट हो चुके हैं या बनाए गए हैं पर शुरू नहीं हुए,
-aफ्लैग का उपयोग करें:सिर्फ सबसे हाल में बनाए गए कंटेनर को देखने के लिए,
-l(last) फ्लैग का उपयोग करें:यदि आप सभी कंटेनरों को निर्माण समय के अनुसार सॉर्ट करके देखना चाहते हैं, जिसमें सबसे हाल का पहले सूचीबद्ध हो, तो यह चलाएँ:
कंटेनर रोकना और हटाना
किसी विशिष्ट चल रहे कंटेनर को रोकने के लिए,
docker stopकमांड के बाद कंटेनर ID या नाम का उपयोग करें:सभी चल रहे कंटेनर रोकने के लिए, यह चलाएँ:
$(docker ps -q)सभी चल रहे कंटेनरों के ID की सूची देता है।कंटेनर रुक जाने के बाद, आप उसे इस तरह हटा सकते हैं:
सभी रुके हुए कंटेनर हटाने के लिए, यह चलाएँ:
और आगे बढ़कर अप्रयुक्त कंटेनर, वॉल्यूम, नेटवर्क और इमेज हटाने के लिए, Docker prune गाइड देखें।
कंटेनर लॉग और शेल तक पहुँचना
docker logsकमांड निष्पादन समय पर मौजूद लॉग को बैच में प्राप्त करता है।docker execआपको किसी चल रहे कंटेनर के अंदर बिना उसे रोके या रीस्टार्ट किए नया कमांड चलाने देता है। इसे ऐसे समझें जैसे आप अपने कंटेनर के अंदर नया टर्मिनल खोल रहे हों — ताकि आप इधर-उधर देख सकें, स्क्रिप्ट चला सकें, लॉग जाँच सकें, या डीबग कर सकें।docker attachआपके टर्मिनल को सीधे किसी चल रहे कंटेनर की मुख्य प्रक्रिया से जोड़ता है। इसका मतलब है कि आप कंटेनर का लाइव आउटपुट (लॉग, प्रॉम्प्ट आदि) देख सकते हैं और यदि प्रक्रिया इनपुट स्वीकार करती है तो उससे इंटरैक्ट भी कर सकते हैं।आम समस्याओं का ट्रबलशूटिंग
आम समस्याओं के सरल समाधान। यहाँ Docker इमेज चलाते समय आने वाली कुछ सामान्य त्रुटियाँ और उन्हें हल करने के तरीके दिए गए हैं।
त्रुटि 1: “Error response from daemon: pull access denied for alpine-python, repository does not exist or may require ‘docker login’: denied: requested access to the resource is denied.”
alpine-pythonइमेज Docker Hub से, लेकिन इमेज मौजूद नहीं है या प्राइवेट है, और आप ऑथेंटिकेटेड नहीं हैं।docker loginचलाएँ।त्रुटि 2: “No such image found: <image-name>:<tag>”
docker imagesका उपयोग करें।त्रुटि 3: “manifest for <image>:<tag> not found: manifest unknown: The named manifest is not known to the registry.”
docker pull <image>:<tag>का उपयोग करें।Dockerfileउपयोग करें और इमेज को इस तरह बिल्ड करें:पोर्ट कॉन्फ्लिक्ट और बाइंड फेल्योर
पोर्ट कॉन्फ्लिक्ट तब होते हैं जब एक से अधिक कंटेनर या कोई कंटेनर और कोई अन्य एप्लिकेशन एक ही पोर्ट तक पहुँचने की कोशिश करते हैं।
निष्कर्ष
Docker इमेज चलाना कंटेनरों के उपयोग में सबसे महत्वपूर्ण और सशक्तिकरण वाले चरणों में से एक है, चाहे आप कोई साधारण वेब सर्वर स्पिन-अप कर रहे हों या एक जटिल एप्लिकेशन डिप्लॉय कर रहे हों। कुछ ही कमांड जैसे
docker run,docker ps, औरdocker stopके साथ, अब आप आत्मविश्वास से कंटेनर लॉन्च, प्रबंधित और ट्रबलशूट कर सकते हैं।यदि आप और आगे बढ़ने के लिए तैयार हैं, तो Dockerfile के साथ अपनी खुद की इमेज बनाकर देखें, उन्नत
docker runफ्लैग्स एक्सप्लोर करें, या Docker Compose के साथ कई कंटेनरों का प्रबंधन करना सीखें।अपनी Docker यात्रा जारी रखने के लिए ये कोर्स देखें: