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

2026 के लिए शीर्ष 26 Docker इंटरव्यू प्रश्न और उत्तर

अपने आगामी जॉब इंटरव्यू की तैयारी में मदद के लिए शीर्ष Docker इंटरव्यू प्रश्न और उत्तर जानें!
Laiba Siddiqui
Laiba Siddiqui

अपना निःशुल्क खाता बनाएँ

अभ्यास और ट्रैक अपनी प्रगति को।

Google के साथ जारी रखेंजारी रखकर, आप हमारी उपयोग की शर्तें, हमारी गोपनीयता नीति को स्वीकार करते हैं और यह भी कि आपका डेटा USA में संग्रहीत है।

आधुनिक सॉफ्टवेयर डेवलपमेंट में, खासकर DevOps और CI/CD वर्कफ़्लोज़ में, Docker सबसे लोकप्रिय कंटेनराइज़ेशन टूल बन गया है। यह कंटेनरों के माध्यम से एप्लिकेशन डिप्लॉयमेंट और प्रबंधन को सरल बनाता है, जिससे सॉफ्टवेयर को तेज़ी और लगातार डिलीवर करना संभव होता है। 

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

Docker क्या है? 

Docker एक कंटेनर प्लेटफ़ॉर्म है जिसका उपयोग डेवलपर्स एप्लिकेशन और उनकी सभी डिपेंडेंसियों को पैकेज करने के लिए करते हैं ताकि वे अलग-अलग परिवेशों में सुचारू रूप से चल सकें।

भले ही कंटेनर एक ही OS कर्नेल साझा करते हैं, हर कंटेनर अपने अलग-थलग वातावरण में काम करता है। यह सेटअप कम्पैटिबिलिटी समस्याएं कम करता है, देरी घटाता है, और डेवलपमेंट, टेस्टिंग, और ऑपरेशंस टीमों के बीच संचार को बेहतर बनाता है।

Docker लोगो

Docker लोगो। इमेज स्रोत

2023 में, Docker ने 32% से अधिक हिस्सेदारी के साथ कंटेनराइज़ेशन बाज़ार में बढ़त बनाई। यह आधुनिक सॉफ्टवेयर डेवलपमेंट में इसकी अहमियत को दर्शाता है! यही वजह है कि आप डेटा-संबंधित जॉब इंटरव्यूज़ में अपनी Docker विशेषज्ञता की जाँच की उम्मीद कर सकते हैं।

बेसिक Docker इंटरव्यू प्रश्न

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

Docker इमेज एक ब्लूप्रिंट की तरह होती है जो कंटेनर बनाती है। इसमें एप्लिकेशन चलाने के लिए जरूरी सभी चीजें होती हैं, जैसे: 

  • कोड 
  • लाइब्रेरीज़ 
  • सेटिंग्स 

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

Docker होस्ट वह सिस्टम है जहाँ हम Docker इंस्टॉल करते हैं। यह Docker कंटेनरों को चलाने और प्रबंधित करने वाला प्राथमिक वातावरण होता है। हम Docker होस्ट को लोकल डिवाइस, वर्चुअल या क्लाउड वातावरण में सेट कर सकते हैं।

Docker क्लाइंट और Docker डेमन साथ मिलकर काम करते हैं, लेकिन उनकी भूमिकाएँ अलग होती हैं। Docker क्लाइंट कमांड भेजने वाला टूल है और Docker डेमन उन कमांड्स पर कार्रवाई करने वाला इंजन है। 

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

Docker नेटवर्किंग कंटेनरों को अन्य कंटेनरों और होस्ट्स से कनेक्ट होने और संचार करने देती है। docker network create कमांड हमें यूज़र-डिफाइंड नेटवर्क सेटअप करने देता है।  

  • ब्रिज नेटवर्क: एक ही Docker होस्ट पर मौजूद कंटेनरों के बीच संचार के लिए लोकल नेटवर्क बनाता है।
    • कमांड: docker network create -d bridge my-bridge-network
    • यह my-bridge-network नाम का ब्रिज नेटवर्क सेट करता है, जो एक ही होस्ट के कंटेनरों के लिए होता है।
  • ओवरले नेटवर्क: कई Docker होस्ट्स पर मौजूद कंटेनरों के बीच संचार सक्षम करता है, अक्सर Swarm सेटअप में उपयोग होता है।
    • कमांड: docker network create --scope=swarm --attachable -d overlay my-multihost-network
    • यह Docker Swarm में अलग-अलग होस्ट्स पर चल रहे कंटेनरों के लिए my-multihost-network नाम का अटेचेबल ओवरले नेटवर्क बनाता है।

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

इंटरमीडिएट Docker इंटरव्यू प्रश्न

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

Dockerfile एक स्क्रिप्ट है जो Docker इमेज बनाने के निर्देशों को परिभाषित करती है। Dockerfile का हर कमांड वातावरण के किसी विशेष हिस्से को सेट करता है। जब हम ये कमांड चलाते हैं, तो Docker इमेज को लेयर-दर-लेयर बनाता है। इसे ऐसे लिख सकते हैं: 

  1. सबसे पहले, एक बेस इमेज चुनें। इसमें ऐप के लिए आवश्यक टूल होते हैं। 
  2. इसके बाद, कंटेनर के अंदर एक वर्किंग डायरेक्टरी निर्दिष्ट करें। यहीं ऐप फाइलें स्टोर और रन होंगी। 
  3. तीसरे चरण में, COPY . . कमांड का उपयोग करके सभी प्रोजेक्ट फाइलें कंटेनर की वर्किंग डायरेक्टरी में कॉपी करें। 
  4. RUN कमांड से डिपेंडेंसीज़ इंस्टॉल करें। 
  5. अपने ऐप के चलने वाले पोर्ट को निर्दिष्ट करने के लिए EXPOSE कमांड का उपयोग करें। 
  6. अब वह कमांड परिभाषित करें जो Docker को कंटेनर शुरू होने पर चलानी चाहिए। 

यहाँ एक Python वेब एप्लिकेशन के लिए एक साधारण Dockerfile का उदाहरण है:

# Step 1: Choose a base image
FROM python:3.9-slim
# Step 2: Specify the working directory
WORKDIR /app
# Step 3: Copy project files into the container
COPY . .
# Step 4: Install dependencies
RUN pip install -r requirements.txt
# Step 5: Expose the port the app runs on
EXPOSE 5000
# Step 6: Define the default command
CMD ["python", "app.py"]

ऊपर दिए गए Dockerfile का उपयोग करके, आप docker build -t my-python-app . से इमेज बना सकते हैं और docker run -p 5000:5000 my-python-app से कंटेनर चला सकते हैं।

Docker Compose एक टूल है जो YAML फाइल (docker-compose.yml) का उपयोग करके मल्टी-कंटेनर Docker एप्लिकेशन परिभाषित और प्रबंधित करता है। यह हमें एक ही फाइल में सर्विसेज़, नेटवर्क्स और वॉल्यूम्‍स कॉन्फ़िगर करने देता है, जिससे जटिल एप्लिकेशनों का प्रबंधन आसान हो जाता है।

Dockerfile से अंतर:

  • Dockerfile का उपयोग एक सिंगल Docker इमेज बनाने के लिए किया जाता है, जिसमें उसकी लेयर्स और डिपेंडेंसियाँ परिभाषित होती हैं।
  • Docker Compose का उपयोग कई कंटेनरों को चलाने और ऑर्केस्टेट करने के लिए होता है, जो एक-दूसरे पर निर्भर हो सकते हैं (जैसे, एक वेब ऐप कंटेनर और एक डेटाबेस कंटेनर)।

उदाहरण के लिए, docker-compose.yml फाइल कुछ ऐसी दिख सकती है:

version: '3.9'
services:
  web:
    build: .
    ports:
      - "5000:5000"
    depends_on:
      - db
  db:
    image: postgres
    volumes:
      - db-data:/var/lib/postgresql/data
volumes:
  db-data:

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

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

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

Docker माउंट्स रियल-टाइम फाइल शेयरिंग के लिए उपयुक्त हैं — लेकिन वे होस्ट OS पर निर्भर रहते हैं, जो सुरक्षा संबंधी मुद्दे पैदा कर सकता है। 

इसके विपरीत, चूँकि Docker वॉल्यूम्‍स स्वतंत्र रूप से काम करते हैं, वे माउंट्स की तुलना में अधिक सुरक्षित होते हैं।

Docker बाइंड माउंट्स और वॉल्यूम्‍स का आरेख

Docker बाइंड माउंट्स और वॉल्यूम्‍स का आरेख। इमेज स्रोत: Docker

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

नहीं, Docker Swarm में नैटिव ऑटोस्केलिंग सपोर्ट नहीं है। ऑटोस्केलिंग पाने के लिए, हमें मॉनिटरिंग टूल्स को इंटीग्रेट करना होता है और स्क्रिप्ट्स की मदद से इंस्टेंसेज़ की संख्या को मैन्युअली एडजस्ट करना होता है। ऐसे करें: 

  • Prometheus या Grafana जैसे मॉनिटरिंग टूल इंस्टॉल करें, जो CPU और मेमोरी जैसी संसाधन खपत को ट्रैक करें।
  • स्केलिंग ट्रिगर्स सेट करें। उदाहरण के लिए, हम परिभाषित कर सकते हैं कि CPU उपयोग 82% से ऊपर जाने पर स्केल-अप ट्रिगर होगा। 
  • इसके बाद, docker service scale कमांड का उपयोग करते हुए एक स्क्रिप्ट लिखें जो रेप्लिकाज की संख्या एडजस्ट करे। उदाहरण के लिए, किसी सर्विस को 5 रेप्लिकाज तक स्केल करने के लिए: docker service scale <service_name>=5

मॉनिटरिंग टूल्स, ट्रिगर्स और स्क्रिप्ट्स को मिलाकर, आप Docker Swarm में एक तरह की ऑटोस्केलिंग लागू कर सकते हैं, भले ही यह बिल्ट-इन न हो।

Docker Compose के साथ सर्विसेज़ को स्केल करने के लिए हम docker-compose up कमांड के साथ --scale फ्लैग का उपयोग कर सकते हैं। यह आमतौर पर स्टेटलेस सर्विसेज़ जैसे वेब सर्वर्स के लिए इस्तेमाल होता है। उदाहरण के लिए, वेब सर्विस को 3 इंस्टेंस तक स्केल करने के लिए:

docker-compose up --scale web=3

यह सुनिश्चित करना महत्वपूर्ण है कि docker-compose.yml फाइल में सर्विसेज़ ठीक से परिभाषित हों और बाहरी लोड बैलेंसर का उपयोग करें या स्केल किए गए इंस्टेंस का समर्थन करें। स्टेटफुल सर्विसेज़ (जैसे, डेटाबेस) को स्केल करना डेटा कंसिस्टेंसी सुनिश्चित करने के लिए अतिरिक्त कॉन्फ़िगरेशन मांगता है।

हाँ, कंटेनर स्वयं रीस्टार्ट हो सकता है। लेकिन इसके लिए हमें एक रीस्टार्ट पॉलिसी सेट करनी होती है। 

Docker में अलग-अलग रीस्टार्ट नीतियाँ होती हैं जो नियंत्रित करती हैं कि कंटेनर कब और कैसे रीस्टार्ट होना चाहिए। डिफ़ॉल्ट पॉलिसी no है, जिसका मतलब है कि कंटेनर रुकने पर रीस्टार्ट नहीं होगा। always पॉलिसी में, कंटेनर रुकते ही Docker उसे अपने-आप रीस्टार्ट कर देता है। 

हम always पॉलिसी ऐसे लागू कर सकते हैं: 

docker run --restart=always <container-name>

एडवांस्ड Docker इंटरव्यू प्रश्न

अब, एडवांस्ड Docker इंटरव्यू प्रश्नों की ओर बढ़ते हैं!

Docker कंटेनर एक लाइफसाइकल से गुजरता है जो बताता है कि कंटेनर किन अवस्थाओं में हो सकता है और हर अवस्था में कैसे काम करता है। Docker कंटेनर लाइफसाइकल के चरण ये हैं: 

  • Create: इस अवस्था में, हम docker create कमांड से किसी इमेज से कंटेनर सेट करते हैं। 
  • Run: यहाँ हम docker start कमांड से कंटेनर चलाते हैं, जो तब तक काम करता है जब तक हम उसे रोक या पॉज़ न कर दें। 
  • Pause: docker pause कमांड से प्रक्रिया को रोका जाता है। इस अवस्था में मेमोरी और डिस्क यथावत रहती हैं। कंटेनर को पुनः शुरू करना हो तो docker unpause कमांड का उपयोग करें। 
  • Stop: कंटेनर निष्क्रिय होने पर stop अवस्था में आता है, जो कई कारणों से हो सकता है: 
    • Immediate stop: docker kill कमांड कंटेनर को बिना क्लीनअप के तुरंत रोक देता है। 
    • Process completion: जब कंटेनर अपना कार्य पूरा कर लेता है, तो वह अपने-आप रुक जाता है। 
    • Out of memory: अत्यधिक मेमोरी उपयोग पर कंटेनर रुक जाता है। 
  • Delete: अंतिम चरण में, हम docker rm कमांड से रुके या बनाए गए कंटेनर को हटा देते हैं।

Docker इमेज रिपॉज़िटरी क्लाइंट्स या कम्युनिटी के साथ एक ही नाम की कई कंटेनर इमेजेज़ को स्टोर और साझा करती है। हम अलग-अलग वर्ज़न को अलग करने के लिए टैग्स लगा सकते हैं। उदाहरण के लिए, app/marketing_campaign:v1 किसी मार्केटिंग ऐप का पहला वर्ज़न होगा, और app/marketing_campaign:v2 दूसरा वर्ज़न।

Docker Hub, जो सबसे लोकप्रिय Docker इमेज रिपॉज़िटरी है, उपयोगकर्ताओं को कंटेनर इमेजेज़ को सार्वजनिक या निजी रूप से होस्ट, शेयर और पुल करने देता है। अन्य विकल्पों में Amazon ECR, Google Artifact Registry, और GitHub Container Registry शामिल हैं।

कंटेनर सुरक्षा बढ़ाने और सामान्य कमजोरियों को कम करने के लिए, मैं ये सर्वोत्तम प्रथाएँ अपनाता/अपनाती हूँ:

  1. हल्की इमेज चुनें: अटैक सरफेस कम करने के लिए Alpine जैसी मिनिमल बेस इमेज का उपयोग करें। 
  2. सिस्टम कॉल्स सीमित करें: चूँकि Docker कंटेनर अनावश्यक कॉल्स तक पहुँच सकते हैं, Seccomp जैसे टूल्स से इन कॉल्स को प्रतिबंधित करें। 
  3. संवेदनशील डेटा सुरक्षित रखें: API कीज़ या पासवर्ड मैनेज करने के लिए Docker secrets का उपयोग करें। ये सीक्रेट्स को एन्क्रिप्ट करते हैं और उन्हें केवल रनटाइम के दौरान उपलब्ध कराते हैं। 

17. Docker कंटेनरों को हेल्थ चेक्स की जरूरत क्यों होती है? 

Docker कंटेनरों के सुचारू रूप से चलने को सुनिश्चित करने के लिए हेल्थ चेक्स पर निर्भर करता है। कोई कंटेनर रनिंग हो लेकिन रिक्वेस्ट प्रोसेस न कर रहा हो, तो यह डिप्लॉयमेंट टीमों के लिए समस्याएँ पैदा कर सकता है। हेल्थ चेक्स ऐसे मुद्दों की रियल-टाइम निगरानी करते हैं और हमें तुरंत सूचित करते हैं।

उदाहरण के लिए, Dockerfile में हेल्थ चेक ऐसे जोड़ा जा सकता है:

HEALTHCHECK --interval=30s --timeout=10s --retries=3 CMD curl -f http://localhost:8080/health || exit 1

यह हेल्थ चेक हर 30 सेकंड में कंटेनर के हेल्थ एंडपॉइंट को पिंग करता है और लगातार तीन प्रयास विफल होने पर कंटेनर को अनहेल्दी मार्क करता है। यह सक्रिय मॉनिटरिंग समस्याओं की पहचान और समाधान में तेजी लाती है।

18. Docker में dangling images क्या होती हैं, और उन्हें कैसे हटाते हैं? 

Docker में dangling images वे अनयूज़्ड इमेज लेयर्स हैं जिनसे अब कोई टैग जुड़ा नहीं होता। अक्सर तब बनती हैं जब आप एक ही नाम और टैग के साथ नई इमेज बनाते हैं, जिससे पुरानी लेयर्स अनरेफ़रेन्स्ड रह जाती हैं। ये इमेज काफी डिस्क स्पेस घेर सकती हैं, इसलिए इन्हें साफ करना जरूरी है। ऐसे करें: 

  1. dangling इमेज ढूँढने के लिए docker images -f dangling=true कमांड चलाएँ। 
  2. फिर, सभी इमेज एक साथ हटाने के लिए docker image prune -f कमांड चलाएँ। 
  3. यदि आप मैन्युअली हटाना चाहते हैं, तो docker rmi -f $(docker images -f dangling=true -q) कमांड का उपयोग करें। 

ये कदम आपके सिस्टम को साफ रखते हैं और स्टोरेज को प्रभावी ढंग से खाली कराते हैं।

Docker और Kubernetes इंटरव्यू प्रश्न

Docker और Kubernetes अक्सर साथ में उपयोग होते हैं, इसलिए Docker इंटरव्यू में कुछ Kubernetes प्रश्न मिलना असामान्य नहीं है, खासकर अगर भूमिका DevOps उन्मुख हो। यहाँ कुछ प्रश्न हैं जो आपसे पूछे जा सकते हैं:

19. Docker और Kubernetes के बीच प्राथमिक अंतर क्या है?

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

अधिक जानें: Kubernetes बनाम Docker ब्लॉग पोस्ट।

20. Docker Swarm की Kubernetes से तुलना कीजिए। 

Kubernetes और Docker Swarm कंटेनरों को मैनेज करते हैं, लेकिन अलग तरीके से काम करते हैं:

  • Kubernetes बड़े और जटिल कंटेनर सेटअप्स को मैनेज करता है। इसकी सेल्फ-हीलिंग और बिल्ट-इन मॉनिटरिंग क्षमताएँ जटिल वातावरण के लिए इसे अधिक उपयुक्त बनाती हैं।
  • Docker Swarm छोटे या कम जटिल सेटअप्स के लिए उपयुक्त है क्योंकि यह Kubernetes जैसी बिल्ट-इन फीचर्स नहीं देता। इसे Docker CLI और Docker Compose जैसे Docker टूल्स के साथ आसानी से इंटीग्रेट किया जा सकता है।

21. Kubernetes बड़ी संख्या में Docker कंटेनरों को कैसे मैनेज करता है?

जहाँ Docker कंटेनर बनाने और चलाने के लिए बढ़िया है, वहीं बड़ी संख्या में कंटेनरों को मैनेज करने के लिए Kubernetes की जरूरत होती है। Kubernetes कंटेनरों को कुशलता से ऑर्केस्ट्रेट करता है, इस तरह:

  • रिसोर्स लिमिट सेट करना: यह प्रत्येक कंटेनर को CPU, मेमोरी आदि आवंटित करता है ताकि ओवरकंसंप्शन न हो।
  • कंटेनर शेड्यूलिंग: यह तय करता है कि हर कंटेनर कहाँ चले, ताकि क्लस्टर के नोड्स में संसाधनों का सर्वोत्तम उपयोग हो।
  • स्वचालित स्केलिंग: वर्कलोड की मांग के आधार पर, यह पॉड्स (एक या अधिक कंटेनरों का समूह) को ऊपर-नीचे स्केल करता है ताकि प्रदर्शन और दक्षता बनी रहे।

इन प्रक्रियाओं को ऑटोमेट करके, Kubernetes हज़ारों कंटेनर मैनेज करते हुए भी निर्बाध संचालन सुनिश्चित करता है। कभी-कभी त्रुटियाँ हो सकती हैं, लेकिन इसकी सेल्फ-हीलिंग क्षमताएँ, जैसे असफल कंटेनर को दोबारा शुरू करना, बाधाओं को कम करती हैं।

22. Kubernetes में Pod क्या है, और यह कंटेनर से कैसे अलग है?

Pod Kubernetes में सबसे छोटी डिप्लॉय करने योग्य इकाई है और एक या अधिक कंटेनरों के समूह का प्रतिनिधित्व करता है जो एक ही नेटवर्क नेमस्पेस, स्टोरेज और कॉन्फ़िगरेशन साझा करते हैं।व्यक्तिगत कंटेनरों के विपरीत, Pods कई कड़ी-से जुड़े कंटेनरों को एक इकाई के रूप में साथ काम करने देते हैं (जैसे, एक वेब सर्वर और एक साइडकार लॉगिंग कंटेनर)।

Kubernetes नोड का अवलोकन, जिसमें pods और कंटेनरों को दर्शाया गया है

Kubernetes नोड का अवलोकन, जिसमें pods और कंटेनरों को दर्शाया गया है। इमेज स्रोत: Kubernetes।

23. Docker और Kubernetes में पासवर्ड जैसे संवेदनशील डेटा को कैसे मैनेज करेंगे?

  • Docker में: हम Docker secrets का उपयोग कर सकते हैं, जो संवेदनशील डेटा को एन्क्रिप्ट करते हैं और रनटाइम पर केवल अधिकृत कंटेनरों को उपलब्ध कराते हैं।
  • Kubernetes में: हम Secrets ऑब्जेक्ट्स का उपयोग करते हैं, जो पासवर्ड, टोकन और API कीज़ जैसे संवेदनशील डेटा को स्टोर करते हैं। Secrets को सुरक्षित रूप से वॉल्यूम के रूप में माउंट किया जा सकता है या एनवायरनमेंट वेरिएबल्स के रूप में पॉड्स को एक्सपोज़ किया जा सकता है।

Kubernetes में उदाहरण:

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  password: cGFzc3dvcmQ=  # Base64-encoded "password"

परिदृश्य-आधारित Docker इंटरव्यू प्रश्न

इंटरव्यूअर वास्तविक समस्याओं से निपटने के आपके तरीके की जाँच करने के लिए परिदृश्य-आधारित और समस्या-समाधान प्रश्न पूछते हैं। आइए कुछ प्रश्न देखें जो आपको अंदाज़ा देंगे: 

24. मान लीजिए आप Maven-आधारित API की एक इमेज बना रहे हैं। आपने पहले ही Dockerfile में बेसिक कॉन्फ़िगरेशन सेट कर दिए हैं। अब, आप देखते हैं कि इमेज का साइज बड़ा है। आप इसे कैसे कम करेंगे? 

उदाहरण उत्तर:

Maven-आधारित API की Docker इमेज का आकार कम करने के लिए, मैं ये कदम उठाऊँगा/उठाऊँगी:

प्रोजेक्ट डायरेक्टरी में .dockerignore फाइल बनाएँ ताकि वे फाइलें और फोल्डर निर्दिष्ट हों जिन्हें Docker build कॉन्टेक्स्ट में शामिल नहीं किया जाना चाहिए। इससे अनावश्यक फाइलें इमेज में जुड़ने से बचती हैं और साइज घटता है। उदाहरण के लिए, मैं .dockerignore में यह जोड़ूँगा/जोड़ूँगी:

.git        # Version control files
target      # Compiled code and build artifacts
.idea       # IDE configuration files

मल्टी-स्टेज बिल्ड्स का उपयोग कर Dockerfile ऑप्टिमाइज़ करें। मैं पहले चरण में Maven प्रोजेक्ट को बिल्ड करूँगा/करूँगी और अंतिम चरण में केवल आवश्यक आर्टिफैक्ट्स (जैसे, कंपाइल्ड JAR फाइलें) कॉपी करूँगा/करूँगी ताकि इमेज हल्की रहे। मल्टी-स्टेज बिल्ड के साथ Dockerfile का उदाहरण:

# Stage 1: Build the application
FROM maven:3.8.5-openjdk-11 AS build
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn clean package
# Stage 2: Create a lightweight runtime image
FROM openjdk:11-jre-slim
WORKDIR /app
COPY --from=build /app/target/my-api.jar .
CMD ["java", "-jar", "my-api.jar"]

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

25. मान लीजिए आपको Jenkins के साथ Docker Hub पर एक Docker कंटेनर इमेज पुश करनी है। आप यह कैसे करेंगे?

उदाहरण उत्तर:

मैं Jenkins के साथ Docker Hub पर Docker कंटेनर इमेज इस तरह पुश करूँगा/करूँगी: 

  1. Jenkins पाइपलाइन कॉन्फ़िगर करें: Jenkins में मल्टी-ब्रांच पाइपलाइन जॉब बनाएँ और उसे उस रिपॉज़िटरी से लिंक करें जिसमें Dockerfile और Jenkinsfile हो।
  2. Jenkinsfile में पाइपलाइन परिभाषित करें: Jenkinsfile में ये स्टेप्स शामिल होंगे:
    • Docker इमेज बिल्ड करें
    • Docker Hub में लॉगिन करें (Jenkins में सुरक्षित रूप से स्टोर किए गए क्रेडेंशियल्स का उपयोग करके)
    • इमेज को Docker Hub पर पुश करें
  3. पाइपलाइन चलाएँ: Jenkins जॉब ट्रिगर करें। यह इमेज बनाएगा, Docker Hub में लॉगिन करेगा और इमेज अपने-आप पुश कर देगा।

26. मान लीजिए आपको WordPress Docker कंटेनर को बिना कोई डेटा खोए नए सर्वर पर माइग्रेट करना है। आप यह कैसे करेंगे?

उदाहरण उत्तर: 

मैं WordPress Docker कंटेनर को इस तरह माइग्रेट करूँगा/करूँगी:

  1. WordPress डेटा का बैकअप लें: कंटेनर का परसिस्टेंट डेटा (WordPress फाइलें और डेटाबेस) एक्सपोर्ट करें। आवश्यक वॉल्यूम्‍स का बैकअप लेने के लिए मैं docker cp या वॉल्यूम बैकअप टूल का उपयोग करूँगा/करूँगी, आमतौर पर WordPress फाइलों के लिए html डायरेक्टरी और डेटाबेस वॉल्यूम।
  2. बैकअप फाइलें ट्रांसफ़र करें: मैं scp का उपयोग करके बैकअप फाइलों को सुरक्षित रूप से नए सर्वर पर कॉपी करूँगा/करूँगी।
  3. नए सर्वर पर WordPress सेट करें: नए सर्वर पर नया WordPress कंटेनर और डेटाबेस कंटेनर डिप्लॉय करूँगा/करूँगी।
  4. रीस्टार्ट और वेरिफ़ाई करें: अंत में, मैं बदलाव लागू करने के लिए कंटेनरों को रीस्टार्ट करूँगा/करूँगी और यह सत्यापित करूँगा/करूँगी कि WordPress साइट सही से चल रही है।

वॉल्यूम्‍स का बैकअप लेकर और उन्हें नए सर्वर पर रिस्टोर करके, आप बिना डेटा खोए WordPress माइग्रेट कर सकते हैं। यह तरीका विशिष्ट एक्सटेंशन्स पर निर्भरता से बचाता है और माइग्रेशन प्रक्रिया पर अधिक नियंत्रण देता है।

Docker इंटरव्यू की तैयारी के लिए सुझाव

यदि आप यह गाइड पढ़ रहे हैं, तो आपने अपने आगामी इंटरव्यू में उत्कृष्टता की दिशा में एक महत्वपूर्ण कदम उठा लिया है! लेकिन बिल्कुल शुरुआती लोगों के लिए, इंटरव्यू की तैयारी भारी लग सकती है। इसलिए मैंने कुछ सुझाव इकट्ठे किए हैं:

Docker की बुनियाद में महारत हासिल करें

Docker इंटरव्यू में उत्कृष्टता के लिए, इसके कोर कॉन्सेप्ट्स की ठोस समझ से शुरुआत करें। 

  • जानें कि Docker इमेजेज़ कंटेनरों के लिए ब्लूप्रिंट कैसे होती हैं, और कंटेनर बनाना, चलाना और प्रबंधित करना अभ्यास करें ताकि उनके हल्के, आइसोलेटेड परिवेश से परिचित हो सकें। 
  • परसिस्टेंट डेटा को प्रभावी रूप से संभालने के लिए Docker वॉल्यूम्‍स की खोज करें, और ब्रिज, होस्ट और ओवरले नेटवर्क्स के साथ प्रयोग करके नेटवर्किंग में गहराई से जाएँ ताकि कंटेनर संचार को सरल बना सकें। 
  • Dockerfiles का अध्ययन करें ताकि समझ सकें कि इमेजेज़ कैसे बनती हैं, और FROM, RUN, और CMD जैसे प्रमुख निर्देशों पर फोकस करें। 
  • इसके अतिरिक्त, Docker Compose के साथ हाथ आज़माएँ ताकि मल्टी-कंटेनर एप्लिकेशन मैनेज कर सकें और यह समझें कि Docker रजिस्ट्रियाँ, जैसे Docker Hub, इमेजेज़ को कैसे स्टोर और शेयर करती हैं।

DataCamp आपके सीखने की यात्रा में मार्गदर्शन के लिए बहुत से अन्य संसाधन देता है: 

Docker के साथ हाथों-हाथ अनुभव लें

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

अपने अनुभव का दस्तावेज़ बनाएं

इंटरव्यू में अपने Docker अनुभव पर चर्चा करने के लिए तैयार रहें। इन उदाहरणों की तैयारी करें:

  • प्रोजेक्ट्स: वे Dockerized एप्लिकेशन हाइलाइट करें जिन्हें आपने बनाया या जिनमें योगदान दिया।
  • चुनौतियाँ: सामने आई समस्याएँ बताइए, जैसे कंटेनरों को डीबग करना या इमेजेज़ को ऑप्टिमाइज़ करना, और आपने उन्हें कैसे सुलझाया।
  • ऑप्टिमाइज़ेशन: बताएँ कि आपने बिल्ड टाइम्स कैसे सुधारे, इमेज साइज कैसे घटाए, या Docker Compose से वर्कफ़्लो कैसे सरल किए।
  • कोलैबोरेशन: यदि आपने टीम में काम किया, तो बताइए कि Docker से सहयोग, टेस्टिंग या डिप्लॉयमेंट प्रक्रियाएँ कैसे बेहतर हुईं।

आपके वास्तविक उदाहरण आपके व्यावहारिक ज्ञान और समस्या-समाधान कौशल को दर्शाएँगे!

निष्कर्ष

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

यदि आप शुरुआती हैं, तो हमारे Introduction to Docker course से शुरुआत करें। अंततः, इंटरव्यू में सफलता सिद्धांत ज्ञान, हाथों-हाथ अनुभव और अपने समस्या-समाधान दृष्टिकोण को स्पष्ट रूप से व्यक्त करने की क्षमता के संयोजन से आएगी!

FAQs

क्या Docker उपयोग करने के लिए मुझे Kubernetes सीखना चाहिए?

नहीं, Docker का उपयोग करने के लिए आपको Kubernetes सीखने की जरूरत नहीं है। Docker का काम Kubernetes से बिल्कुल अलग है। यह एक सिंगल मशीन पर कंटेनर बनाने, चलाने और प्रबंधित करने के लिए उपयोग होता है। 

क्या Docker के लिए कोडिंग ज़रूरी है?

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

Docker इंटरव्यू की तैयारी में कितना समय लगेगा?

यदि आप पूरी तरह समर्पित हैं, तो Docker इंटरव्यू की तैयारी में 3 से 4 सप्ताह लग सकते हैं। कम-से-कम एक सप्ताह Docker की बुनियाद को दें। फिर Docker Compose और मल्टी-कंटेनर सेटअप्स पर जाएँ। अंतिम 2 सप्ताह मल्टी-स्टेज बिल्ड्स और कंटेनर ऑप्टिमाइज़ेशन पर फोकस करें। साथ ही, वास्तविक उदाहरणों वाला एक पोर्टफोलियो बनाएं।

Laiba Siddiqui

लेखक

Laiba Siddiqui

मैं एक कंटेंट स्ट्रैटेजिस्ट हूँ जिसे जटिल विषयों को सरल बनाना पसंद है। मैंने Splunk, Hackernoon, और Tiiny Host जैसी कंपनियों को अपने दर्शकों के लिए आकर्षक और सूचनात्मक सामग्री बनाने में मदद की है।

विषय