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

Docker Compose गाइड: मल्टी‑कंटेनर डेवलपमेंट को सरल बनाएं

कुशल मल्टी‑कंटेनर एप्लिकेशन डेवलपमेंट के लिए Docker Compose में महारत हासिल करें। बेस्ट प्रैक्टिस, स्केलिंग, ऑर्केस्ट्रेशन और वास्तविक उदाहरण सीखें।

AI के साथ खोजें

Docker Compose मल्टी‑कंटेनर Docker एप्लिकेशनों के प्रबंधन को सरल बनाता है, जिससे डेवलपर्स जटिल ऐप्स को आसानी से लिख और चला सकते हैं।

माइक्रोसर्विसेज या मल्टी‑सर्विस आर्किटेक्चर पर काम करने वाले इंटरमीडिएट DevOps इंजीनियर, बैकएंड डेवलपर्स, और क्लाउड‑नेटिव डेवलपर्स को अक्सर अनेक परस्पर जुड़े कंटेनरों को मैनेज करने की चुनौती का सामना करना पड़ता है। Docker Compose इन जटिलताओं को संबोधित करता है और डेवलपमेंट व टेस्टिंग वर्कफ़्लो को सुव्यवस्थित करता है। 

इस लेख में, आप Docker Compose का उपयोग करने के लिए आवश्यक हर चीज़ सीखेंगे। यदि आप Docker के साथ अभी शुरुआत कर रहे हैं, तो हमारा Docker for Beginners Guide देखें। 

Docker Compose क्या है?

Docker Compose एक ऐसा टूल है जिसे एक ही YAML कॉन्फ़िगरेशन फ़ाइल के माध्यम से मल्टी‑कंटेनर Docker एप्लिकेशनों को परिभाषित और ऑर्केस्ट्रेट करने के लिए डिज़ाइन किया गया है। 

Compose के साथ, आप आसानी से सेवाएँ, नेटवर्क, वॉल्यूम, एन्वायरनमेंट सेटिंग्स और डिपेंडेंसियाँ निर्दिष्ट कर सकते हैं। यह लोकल डेवलपमेंट, टेस्टिंग सेटअप, रैपिड प्रोटोटाइपिंग और छोटे प्रोडक्शन वातावरण के लिए आदर्श है।

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

आप सोच रहे होंगे कि सीधे Kubernetes का उपयोग क्यों न करें। सबसे पहले, छोटे प्रोजेक्ट्स और लोकल टेस्टिंग के लिए यह अनावश्यक रूप से भारी है। जैसा कि आप हमारे Kubernetes vs. Docker tutorial में जानेंगे, Kubernetes क्लस्टरों में कई कंटेनरों को मैनेज करने के लिए अधिक उपयुक्त है। हमारा Containerization and Virtualization with Docker and Kubernetes course Docker और Kubernetes के साथ एप्लिकेशन बनाने और डिप्लॉय करने पर और गहराई से जाता है। 

मैनुअल Docker कमांड्स के मुकाबले Docker Compose क्यों?

कई कंटेनरों को अलग‑अलग मैनेज करना इन कारणों से जल्दी ही अव्यवस्थित हो सकता है:

  • जटिल निर्भरता क्रम,
  • असंगत वातावरण, और
  • स्केलेबिलिटी समस्याएँ। 

मैनुअल कमांड्स के साथ, मानवीय त्रुटि, कॉन्फ़िगरेशन ड्रिफ्ट, और अक्षम वर्कफ़्लो का जोखिम रहता है। 

Docker Compose एक YAML फ़ाइल में सभी एप्लिकेशन सेवाओं और डिपेंडेंसियों को परिभाषित करके इन समस्याओं को हल करने में मदद करता है। यह स्थिरता, स्केलेबिलिटी, और निर्भरता प्रबंधन की सुगमता लाता है, जिससे गलतियाँ काफी घटती हैं और उत्पादकता बढ़ती है।

Compose कंटेनरों को मैन्युअल रूप से बनाकर उन्हें जोड़ने की तुलना में तेज़ है। इसके अलावा, Compose सभी कंटेनरों के बीच संचार के लिए एक डिफ़ॉल्ट नेटवर्क बनाता है। साथ ही, यह वॉल्यूम्स को मैनेज करता है, जिससे सेवा के बदले जाने या रीस्टार्ट होने पर उनका ऑटोमैटिक री‑अटैचमेंट सुनिश्चित होता है। 

आप हमारे How to Containerize an Application Using Docker ट्यूटोरियल में Docker और Kubernetes के साथ मशीन लर्निंग एप्लिकेशनों को कंटेनराइज़ करना सीख सकते हैं। 

Docker और Docker Compose में क्या अंतर है?

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

Docker एकल कंटेनरों को संभालता है, लेकिन Docker Compose आपको उन्हें एक एकीकृत सेवा में स्टैक करने देता है। उदाहरण के लिए, एक ऐसा एप्लिकेशन जिसमें बैकएंड, फ्रंटएंड, डेटाबेस, कैशिंग आदि शामिल हों। 

आप Docker Compose के बिना भी अपने कंटेनर बना और चला सकते हैं। हालाँकि, सब कुछ एक ही docker-compose.yml फ़ाइल में समेटना कई कंटेनरों को मैनेज करना आसान बनाता है। यह किसी भी वातावरण में एक ही कमांड से आपका एप्लिकेशन स्पिन‑अप करना भी संभव बनाता है। 

आगामी इंटरव्यू में सफलता के लिए Docker और Docker Compose को समझना महत्वपूर्ण है। सुनिश्चित करें कि आप तैयार हैं—हमारे Top 26 Docker Interview Questions and Answers for 2025 देखें। 

Docker Compose की नींव

व्यावहारिक विवरणों में जाने से पहले Docker Compose के कोर सिद्धांतों और सिंटैक्स को समझना आवश्यक है। Compose उपयोग करने से पहले, हमारा Install Docker on Ubuntu: From Setup to First Container गाइड फॉलो करके Docker इंस्टॉल होना सुनिश्चित करें। 

अवधारणात्मक ढाँचा

Docker Compose लोकल डेवलपमेंट और सरल डिप्लॉयमेंट के लिए कंटेनर ऑर्केस्ट्रेशन की जटिलता को एब्स्ट्रैक्ट करता है। YAML‑फॉर्मेटेड compose फ़ाइल के साथ, आप आवश्यक सेवाओं की घोषणा करते हैं, उनकी डिपेंडेंसियाँ परिभाषित करते हैं, नेटवर्क, वॉल्यूम, एन्वायरनमेंट वेरिएबल्स आदि निर्दिष्ट करते हैं। Compose इन सेवाओं को स्टार्ट, स्टॉप, स्केल और परस्पर जोड़ने का काम कुशलता से मैनेज करता है।

कोर Compose सिंटैक्स

Docker Compose सरल YAML सिंटैक्स पर आधारित है। मुख्य घटक शामिल हैं:

  • services कंटेनराइज़्ड एप्लिकेशनों को परिभाषित करने के लिए
  • images या build कॉन्टेक्स्ट कंटेनर निर्दिष्ट करने के लिए
  • ports सेवाओं को एक्सपोज़ करने के लिए
  • volumes स्थायी डेटा स्टोरेज के लिए
  • networks इंटर‑सर्विस कम्यूनिकेशन के लिए

सेवा परिभाषा और एप्लिकेशन आर्किटेक्चर

Compose फ़ाइलें एप्लिकेशन की सेवाओं और कनेक्शनों का प्रतिनिधित्व करती हैं।

सेवाओं को परिभाषित करना

सेवाएँ Compose फ़ाइल का केंद्र हैं। आप कई सेवाओं (जैसे वेब फ्रंटएंड, डेटाबेस, कैशिंग सेवाएँ) को स्पष्ट रूप से परिभाषित और नामित कर सकते हैं, कंटेनर स्टार्टअप क्रम को नियंत्रित करने के लिए depends_on जैसे सरल कीवर्ड के माध्यम से डिपेंडेंसियाँ निर्दिष्ट कर सकते हैं।

नेटवर्किंग की मूल बातें

Docker Compose परिभाषित सेवाओं के बीच संचार को आसान बनाने के लिए स्वतः डिफ़ॉल्ट नेटवर्क बनाता है। डेवलपर्स आवश्यकता पड़ने पर अधिक आइसोलेशन या विस्तृत नेटवर्किंग आवश्यकताओं के लिए कस्टम नेटवर्क भी निर्दिष्ट कर सकते हैं।

वॉल्यूम प्रबंधन

वॉल्यूम कंटेनर जीवनचक्र से परे डेटा परसिस्टेंस सक्षम करते हैं। आप नेम्ड वॉल्यूम निर्दिष्ट कर सकते हैं या होस्ट डायरेक्टरीज़ को कंटेनरों में माउंट कर सकते हैं, जिससे डेटाबेस, लॉग्स या अन्य स्टेटफुल डेटा लगातार बना रहे।

एन्वायरनमेंट वेरिएबल्स

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

Docker Compose स्केलिंग और ऑर्केस्ट्रेशन

Docker Compose बेसिक स्केलिंग और ऑर्केस्ट्रेशन को भी सुव्यवस्थित करता है, जो त्वरित लोड‑टेस्टिंग परिदृश्यों या समानांतर सेवाओं के आकलन के लिए विशेष रूप से उपयोगी है।

सेवाओं को स्केल करना

Compose का "--scale" फ्लैग आपको सेवाओं की कई प्रतियाँ जल्दी से स्पिन‑अप करने देता है। इससे लोड बैलेंसिंग का आकलन या समवर्ती अनुरोधों को संभालना जैसे टेस्टिंग परिदृश्य सरल हो जाते हैं।

उदाहरण के लिए, Flask एप्लिकेशन कंटेनर को स्केल करना केवल एक कमांड से किया जा सकता है:

docker-compose up --scale flaskapp=4

Docker Compose बनाम Docker Swarm और Kubernetes

जहाँ Docker Compose लोकल डेवलपमेंट और छोटे‑स्तर के सेटअप में उत्कृष्ट है, वहीं यह मल्टी‑होस्ट, प्रोडक्शन‑स्केल ऑर्केस्ट्रेशन में सीमित है। अनेक होस्ट्स पर जटिल, प्रोडक्शन‑ग्रेड परिदृश्यों के लिए Docker Swarm या Kubernetes जैसे अधिक मज़बूत ऑर्केस्ट्रेटर उपयुक्त हैं, क्योंकि वे Compose में उपलब्ध नहीं उन्नत लोड बैलेंसिंग, सेल्फ‑हीलिंग, उन्नत नेटवर्किंग और बड़े पैमाने पर स्केलेबिलिटी प्रदान करते हैं।

हमारा Docker Compose vs. Kubernetes ब्लॉग पोस्ट Docker Compose और Kubernetes के प्रमुख अंतर पर अधिक विस्तार से जाता है।  

फ़ीचर

Docker Compose

Docker Swarm

Kubernetes

प्राथमिक उपयोग मामला

लोकल डेवलपमेंट, सरल मल्टी‑कंटेनर ऐप्स

छोटे से मध्यम आकार के प्रोडक्शन क्लस्टर

बड़े पैमाने का, प्रोडक्शन‑ग्रेड ऑर्केस्ट्रेशन

मल्टी‑होस्ट सपोर्ट

सपोर्टेड नहीं

बिल्ट‑इन

नेटिव सपोर्ट

स्केलेबिलिटी

केवल मैनुअल स्केलिंग

मध्यम, इंटीग्रेटेड क्लस्टरिंग के साथ

उच्च, भारी वर्कलोड के लिए डिज़ाइन

लोड बैलेंसिंग

कोई बिल्ट‑इन लोड बैलेंसर नहीं

लोड बैलेंसिंग के साथ आंतरिक रूटिंग

उन्नत सर्विस डिस्कवरी और लोड बैलेंसिंग

सेल्फ‑हीलिंग

कोई सेल्फ‑हीलिंग नहीं

बेसिक रिस्टार्ट‑ऑन‑फेल्योर

उन्नत ऑटो‑रिकवरी और रोलिंग अपडेट्स

नेटवर्किंग

बेसिक ब्रिज नेटवर्क्स

नोड्स के बीच ओवरले नेटवर्क्स

समृद्ध नेटवर्किंग मॉडल (CNI)

लर्निंग कर्व

सीखने में आसान

मध्यम जटिलता

कठिन, अनेक कॉम्पोनेंट्स और कॉन्फ़िग्स के साथ

इकोसिस्टम इंटीग्रेशन

सीमित टूलिंग

मध्यम CLI/GUI टूल्स

विस्तृत इकोसिस्टम (Helm, ऑपरेटर्स, आदि)

रिसोर्स ओवरहेड

न्यूनतम

हल्का

भारी, अधिक सिस्टम संसाधन चाहिए

स्टेट प्रबंधन

बिल्ट‑इन स्टेट अवेयरनेस नहीं

Raft के माध्यम से बेसिक

डिक्लेरेटिव, पूर्ण स्टेट प्रबंधन

डिप्लॉयमेंट शैली

YAML‑आधारित (docker-compose.yml)

YAML + CLI

YAML (Deployment, Service, आदि)

किसके लिए सर्वश्रेष्ठ

डेव मशीनें, CI पाइपलाइंस, त्वरित डेमो

छोटी टीमें, प्रोड में सरल सेवाएँ

जटिल ऐप्स, माइक्रोसर्विसेज, एंटरप्राइज़ इन्फ्रा

कुशल Compose उपयोग के लिए ऑप्टिमाइज़ेशन तकनीकें

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

प्रभावी बिल्ड रणनीतियाँ

Dockerfiles में मल्टी‑स्टेज बिल्ड्स का उपयोग Docker इमेज साइज घटाने में मदद करता है, जबकि बिल्ड कैशिंग का स्पष्ट लाभ उठाना डेवलपमेंट और CI प्रक्रियाओं को उल्लेखनीय रूप से तेज़ करता है।

हेल्थ चेक्स और रिस्टार्ट पॉलिसीज़

Compose आपको एप्लिकेशन की विश्वसनीयता बनाए रखने के लिए स्पष्ट कंटेनर हेल्थ चेक्स परिभाषित करने देता है। रिस्टार्ट पॉलिसीज़ विफल कंटेनरों को स्वतः रिस्टार्ट होने में मदद करती हैं, जिससे रेज़िलिएंस बढ़ता है।

रिसोर्स लिमिट्स का प्रबंधन

Compose YAML परिभाषाओं में सीधे CPU और मेमोरी लिमिट्स सेट करने से आप संसाधन आवंटन नियंत्रित कर सकते हैं, जिससे पूर्वानुमेयता और संसाधन दक्षता बढ़ती है।

रिसोर्स लिमिट्स के लिए एक उदाहरण स्निपेट:

services:
  flaskapp:
    image: flask
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 512M

व्यावहारिक उदाहरण: मल्टी‑कंटेनर एप्लिकेशन

यहाँ एक वास्तविक‑दुनिया का सरलीकृत उदाहरण है जिसमें Python Flask एप्लिकेशन Redis के साथ जोड़ा गया है:

services:
  redis:
    image: redis:7
    container_name: redis
    ports:
      - "6379:6379"
    restart: always
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 30s
      timeout: 5s
      retries: 3
  web:
    build: .
    container_name: flask_app
    command: gunicorn app:app --worker-class gevent --bind 0.0.0.0:5000 --timeout 3000
    ports:
      - "5000:5000"
    depends_on:
      - redis
    environment:
      - REDIS_URL=redis://redis:6379/0
    env_file:
      - .env
    volumes:
      - ./shorts:/app/shorts
      - ./temp_uploads:/app/temp_uploads
      - ./uploads:/app/uploads
    restart: always

  worker:
    build: .
    container_name: celery_worker
    command: celery -A celery_worker.celery worker --loglevel=info
    depends_on:
      - redis
    environment:
      - REDIS_URL=redis://redis:6379/0
    env_file:
      - .env
    volumes:
      - ./shorts:/app/shorts
      - ./temp_uploads:/app/temp_uploads
      - ./uploads:/app/uploads
    restart: always

Docker Compose फ़ाइल तीन सेवाओं के साथ एक मल्टी‑कंटेनर ऐप परिभाषित करती है:

  1. redis
  2. web (Gunicorn के साथ Flask ऐप)
  3. worker (Celery वर्कर)

redis सेवा के लिए:

  • आधिकारिक Redis 7 इमेज का उपयोग करता है।
  • कंटेनर का नाम redis रखता है।
  • कंटेनर के अंदर पोर्ट 6379 को होस्ट के 6379 से मैप करता है।
  • क्रैश होने पर हमेशा रिस्टार्ट होता है (restart: always)।
  • एक healthcheck परिभाषित करता है जो हर 30 सेकंड में redis-cli ping चलाता है, 5 सेकंड बाद टाइमआउट होता है, और कंटेनर को अनहेल्दी घोषित करने से पहले 3 बार रिट्राई करता है।

वेब सेवा के लिए:

  • वर्तमान डायरेक्टरी से इमेज बिल्ड करता है (build: .)।
  • कंटेनर का नाम flask_app रखता है।
  • कमांड चलाता है gunicorn app:app, gevent वर्कर्स का उपयोग करते हुए, 0.0.0.0:5000 पर बाइंड करता है, और 3000 सेकंड का लंबा टाइमआउट सेट करता है
  • कंटेनर पोर्ट 5000 को होस्ट के 5000 से मैप करता है।
  • redis सेवा पर निर्भरता घोषित करता है, जिससे Redis पहले स्टार्ट हो।
  • एन्वायरनमेंट वेरिएबल REDIS_URL सेट करता है जो आंतरिक Redis कंटेनर की ओर इंगित करता है।
  • अतिरिक्त एन्वायरनमेंट वेरिएबल्स को .env फ़ाइल से लोड करता है।
  • तीन लोकल फ़ोल्डर्स को कंटेनर में माउंट करता है:
    • ./shorts से /app/shorts,
    • ./temp_uploads से /app/temp_uploads 
    • ./uploads से /app/uploads
  • क्रैश होने पर हमेशा रिस्टार्ट के लिए कॉन्फ़िगर किया गया है।

worker सेवा के लिए:

  • इमेज भी वर्तमान डायरेक्टरी से बनाता है (build: .), और web सेवा वाले उसी Dockerfile का पुन: उपयोग करता है।
  • कंटेनर का नाम रखता है: celery_worker।
  • कमांड celery -A celery_worker.celery worker --loglevel=info चलाता है, जो बैकग्राउंड जॉब्स प्रोसेस करने के लिए एक Celery वर्कर शुरू करता है।
  • redis सेवा पर निर्भरता घोषित करता है, जिससे Redis पहले स्टार्ट हो।
  • उसी REDIS_URL एन्वायरनमेंट वेरिएबल को सेट करता है ताकि Redis ब्रोकर्स से कनेक्ट हो सके।
  • अन्य एन्वायरनमेंट वेरिएबल्स को .env फ़ाइल से लोड करता है।
  • उसी तीन फ़ोल्डर्स को web सेवा की तरह माउंट करता है, जिससे वेब ऐप और वर्कर दोनों फ़ाइलें और अपलोड्स साझा कर सकें।
  • क्रैश होने पर हमेशा रिस्टार्ट के लिए कॉन्फ़िगर किया गया है।

हमारे 10 Docker Project Ideas ट्यूटोरियल से और Docker प्रोजेक्ट आइडियाज़ देखें। 

मल्टी‑कंटेनर एप्लिकेशन बनाना और चलाना

Docker Compose नियमित कंटेनर कार्यों के लिए एक सीधा टूलसेट प्रदान करता है:

इमेज बनाना

परिभाषित Dockerfiles के अनुसार कंटेनर इमेज जनरेट करने के लिए docker compose build का उपयोग करें। Docker इमेज बनाने पर अधिक जानकारी हम अपने How to Learn Docker from Scratch: A Guide for Data Professionals ट्यूटोरियल में कवर करते हैं। 

सेवाएँ चलाना

docker compose up का उपयोग करने पर Compose फ़ाइल में परिभाषित सभी सेवाएँ शुरू हो जाती हैं। डिटैच्ड मोड के लिए, docker compose up -d का उपयोग करें। हमारा Introduction to Docker course बैकग्राउंड में कंटेनर चलाने पर और विस्तार से बताता है। 

चल रहे कंटेनर देखना

सक्रिय कंटेनरों और उनकी स्थिति देखने के लिए, सभी चल रही सेवाओं को सूचीबद्ध करने हेतु docker compose ps का उपयोग करें।

सेवाएँ रोकना

docker compose down का उपयोग चल रही सेवाओं को रोकने के लिए करें। 

लॉग्स देखना

docker compose logs का उपयोग लॉग्स जाँचने के लिए करें। आप किसी कंटेनर को निर्दिष्ट करके उसके लॉग्स docker logs container_name से देख सकते हैं। लॉग्स स्ट्रीम करने के लिए, docker compose -f container_name का उपयोग करें। 

हमारा Top 18 Docker Commands to Build, Run, and Manage Containers गाइड और Docker कमांड्स को ब्रेकडाउन करता है ताकि आप अलग‑अलग वातावरणों में आत्मविश्वास के साथ एप्लिकेशन मैनेज कर सकें। 

Docker Compose के उन्नत उपयोग मामले 

Compose वर्कफ़्लो जटिल डेवलपमेंट सेटअप या भिन्न वातावरण कॉन्फ़िगरेशनों के अनुरूप ढल जाते हैं।

मल्टी‑एन्वायरनमेंट कॉन्फ़िगरेशन

एकाधिक Compose फ़ाइलें या ओवरराइड फ़ाइलें अलग‑अलग वातावरण सेटअप (डेवलपमेंट, टेस्टिंग, प्रोडक्शन) को सुगम बनाती हैं। इससे परिभाषाएँ मेंटेनेबल और रीडेबल रहती हैं, और बिना अव्यवस्थित कॉन्फ़िगरेशन के त्वरित बदलाव संभव होते हैं।

डिपेंडेंसी प्रबंधन

जहाँ depends_on बेसिक स्टार्टअप ऑर्डरिंग संभालता है, वहीं जटिल परिदृश्यों में इनिशियलाइज़ेशन स्क्रिप्ट्स (जैसे "wait-for-it") शामिल की जा सकती हैं, ताकि कंटेनर केवल विशिष्ट स्थितियों के पूरा होने पर ही शुरू हों, जैसे कि डेटाबेस रेडी होना।

CI/CD के साथ एकीकरण

Compose सतत एकीकरण वर्कफ़्लो में आसानी से इंटीग्रेट होता है, टेस्टिंग के लिए संपूर्ण वातावरण सेटअप को ऑटोमेट करता है। GitLab CI और GitHub Actions जैसे प्लेटफ़ॉर्म Compose इंटीग्रेशन के लिए नेटिव या सरल तरीके प्रदान करते हैं, जिससे ऑटोमेटेड टेस्टिंग सुव्यवस्थित होती है।

सर्वोत्तम प्रथाएँ और आम चुनौतियाँ

Compose परिभाषाओं को सोच‑समझकर व्यवस्थित और संरचित करके आप सामान्य गलतियों से बच सकते हैं और मेंटेनेबल कॉन्फ़िगरेशन बना सकते हैं।

Compose फ़ाइल संगठन

अपनी Compose फ़ाइलों को स्पष्ट और मॉड्यूलर रखें। सरल प्रोजेक्ट्स के लिए एक ही फ़ाइल पर्याप्त हो सकती है, लेकिन बड़े एप्लिकेशनों के लिए, ओवरराइड फीचर का उपयोग करके कॉन्फ़िगरेशन को कई Compose फ़ाइलों में विभाजित करने पर विचार करें। इससे निम्नलिखित संभव होता है:

  • तार्किक विभाजन (उदा., docker-compose.backend.yml, docker-compose.frontend.yml)
  • आसान लोकल बनाम प्रोडक्शन वातावरण कस्टमाइज़ेशन
  • सरलीकृत वर्ज़न कंट्रोल और सहयोग, क्योंकि एक सेवा में बदलाव पूरे फ़ाइल को प्रभावित नहीं करते

फ़ाइलों को पढ़ने और नेविगेट करने योग्य बनाने के लिए सार्थक सेवा नाम और सुसंगत इंडेंटेशन का उपयोग करें।

संभावित चूकें

इन सामान्य गलतियों से सावधान रहें:

  • इमेज के लिए latest टैग का उपयोग: यह अनिश्चितता लाता है, क्योंकि वास्तविक इमेज वर्ज़न समय के साथ बदल सकता है। हमेशा इमेज वर्ज़न पिन करें (उदा., postgres:15.1) ताकि वातावरणों में स्थिरता बनी रहे।
  • सीक्रेट्स को हार्ड‑कोड करना: संवेदनशील डेटा (उदा., API कीज़, पासवर्ड) को कभी भी सीधे Compose फ़ाइलों में शामिल न करें। इसके बजाय, एन्वायरनमेंट वेरिएबल्स, .env फ़ाइलें (वर्ज़न कंट्रोल से बाहर) या Docker Secrets जैसे सीक्रेट प्रबंधन टूल्स का उपयोग करें।
  • अत्यधिक जटिल सेवा परिभाषाएँ: बहुत अधिक लॉजिक या बहुत सी ज़िम्मेदारियाँ एक ही कंटेनर में ठूंसने की इच्छा का विरोध करें। सिंगल रिस्पॉन्सिबिलिटी प्रिंसिपल का पालन करें और जहाँ संभव हो सादगी अपनाएँ।
  • स्पष्ट नेटवर्किंग की अनदेखी: डिफ़ॉल्ट व्यवहार पर निर्भर रहने के बजाय Compose में कस्टम नेटवर्क परिभाषित करें। इससे सेवा संचार पर बेहतर नियंत्रण, पोर्ट संघर्ष में कमी, और सुरक्षा सीमाएँ सुधरती हैं।

इन प्रथाओं को अपनाकर, आपके Compose‑आधारित वर्कफ़्लो अधिक मज़बूत, सुरक्षित, और सहयोगी या विकसित होते वातावरणों में मेंटेन करने में आसान होंगे।

निष्कर्ष

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

हमारे Docker कोर्स देखें और सीखें:

Docker Compose FAQs

Docker Compose Docker Swarm या Kubernetes से कैसे अलग है?

Docker Compose लोकल डेवलपमेंट और छोटे‑स्तर की टेस्टिंग के लिए आदर्श है। ऑटो‑स्केलिंग और सेल्फ‑हीलिंग जैसी सुविधाओं के साथ प्रोडक्शन‑ग्रेड ऑर्केस्ट्रेशन के लिए Docker Swarm और Kubernetes अधिक उपयुक्त हैं।

क्या Docker Compose सेवा डिपेंडेंसियों को मैनेज कर सकता है?

हाँ, Compose आपको depends_on निर्देश के साथ डिपेंडेंसियाँ परिभाषित करने देता है। अधिक सटीक नियंत्रण के लिए wait-for-it जैसे बाहरी हेल्पर स्क्रिप्ट्स उपयोग की जा सकती हैं, जैसे कि डेटाबेस रेडी होने तक प्रतीक्षा करना।

मैं Docker Compose का उपयोग करके अनेक वातावरण कैसे मैनेज करूँ?

आप एकाधिक Compose फ़ाइलों (उदा., docker-compose.yml और docker-compose.prod.yml) का उपयोग कर सकते हैं और कमांड चलाते समय -f फ्लैग का उपयोग करके वातावरण के आधार पर कॉन्फ़िगरेशन ओवरराइड कर सकते हैं।

क्या Docker Compose में हेल्थ चेक्स और रिस्टार्ट पॉलिसीज़ सपोर्टेड हैं?

हाँ, Docker Compose कंटेनर हेल्थ चेक्स और रिस्टार्ट पॉलिसीज़ को सपोर्ट करता है, जिससे आप डेवलपमेंट और टेस्टिंग के दौरान अपनी सेवाओं को अधिक रेज़िलिएंट बना सकते हैं।

Derrick Mwiti

लेखक

Derrick Mwiti

विषय