डेवलपरों के लिए Docker और Kubernetes · पाठ

Compose के साथ बहु-कंटेनर अनुप्रयोग

स्थानीय विकास के लिए Docker Compose का उपयोग करके वेब अनुप्रयोग और डेटाबेस जैसे अनेक Docker कंटेनर व्यवस्थित करें।

पाठ 3, कुल 4 में से12 चरण

Compose के साथ बहु-कंटेनर अनुप्रयोग, CoddyKit पर डेवलपरों के लिए Docker और Kubernetes का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह डेवलपरों के लिए Docker और Kubernetes सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। डेवलपरों के लिए Docker और Kubernetes पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

मल्टी-कंटेनर ऐप क्यों?

वास्तविक दुनिया के अनुप्रयोगों में आपके पास शायद ही कभी केवल एक घटक होता है। एक वेब अनुप्रयोग की कल्पना कीजिए: आपको एक वेब सर्वर (जैसे Nginx), एक बैकएंड अनुप्रयोग (जैसे Python Flask) और एक डेटाबेस (जैसे Redis या PostgreSQL) की आवश्यकता होती है।

इनमें से प्रत्येक घटक की अपनी निर्भरताएँ और कॉन्फ़िगरेशन होते हैं। उन्हें अलग-अलग प्रबंधित करना और यह सुनिश्चित करना कि वे सही ढंग से संचार करें, जल्दी ही जटिल हो सकता है।

Docker Compose से परिचित हों

Docker Compose एक ऐसा टूल है जिसे मल्टी-कंटेनर Docker अनुप्रयोगों को परिभाषित करने और चलाने की प्रक्रिया सरल बनाने के लिए बनाया गया है।

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

Compose YAML फ़ाइल

Docker Compose का मुख्य भाग docker-compose.yml फ़ाइल है। यह YAML फ़ाइल आपके अनुप्रयोग की सेवाओं, नेटवर्कों और वॉल्यूम का विवरण देती है।

यह आमतौर पर version कुंजी से शुरू होती है। इसके बाद मुख्य services अनुभाग आता है, जहाँ आप अपने अनुप्रयोग को बनाने वाले प्रत्येक कंटेनर को परिभाषित करते हैं।

सेवाएँ परिभाषित करना

services अनुभाग के अंतर्गत, आप अपने अनुप्रयोग के प्रत्येक घटक की सूची बनाते हैं। प्रत्येक सेवा एक Docker कंटेनर से संबंधित होती है।

किसी सेवा को परिभाषित करने के लिए मुख्य गुणों में शामिल हैं:

  • image: उपयोग की जाने वाली Docker इमेज निर्दिष्ट करता है (जैसे, nginx:latest)।
  • build: कस्टम इमेज बनाने के लिए Dockerfile वाली निर्देशिका का पथ देता है।
  • container_name: आपके कंटेनर के लिए एक वैकल्पिक, निश्चित नाम देता है, जिससे उसका संदर्भ देना आसान हो जाता है।

सेवाओं को एक्सपोज़ और कॉन्फ़िगर करना

अक्सर आपको अपनी सेवाओं को होस्ट मशीन के लिए एक्सपोज़ करना या उन्हें पर्यावरणीय चर के साथ कॉन्फ़िगर करना पड़ता है।

  • ports: होस्ट के पोर्ट को कंटेनर के पोर्ट से मैप करता है (जैसे, "8080:80" होस्ट के पोर्ट 8080 को कंटेनर के पोर्ट 80 से मैप करता है)।
  • environment: पर्यावरणीय चर को कंटेनर में भेजता है (जैसे, DB_HOST: "database")।

ये सेटिंग संचार और अनुकूलन के लिए महत्वपूर्ण हैं।

अपनी सेवाओं को कनेक्ट करना

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

इससे सेवाएँ अपने सेवा-नामों को होस्टनाम के रूप में उपयोग करके एक-दूसरे से संचार कर सकती हैं। उदाहरण के लिए, कोई वेब ऐप सेवा redis नाम वाली डेटाबेस सेवा से होस्टनाम के रूप में केवल redis का उपयोग करके कनेक्ट हो सकती है।

उदाहरण: Python + Redis

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

यह सेटअप स्पष्ट रूप से दिखाता है कि एक ही Compose अनुप्रयोग में कोई 'web' सेवा किसी 'database' सेवा के साथ कैसे काम कर सकती है।

वेब ऐप कोड और Dockerfile

यह हमारा सरल Python Flask अनुप्रयोग (app.py) और उसका Dockerfile है। Flask ऐप redis सेवा से कनेक्ट होता है और Dockerfile इन सभी को एक पैकेज में तैयार करता है।

# app.py
import time
import redis
from flask import Flask

app = Flask(__name__)
# Connects to 'redis' service in Compose network
cache = redis.Redis(host='redis', port=6379)

def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)

@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello from CoddyKit! I have been seen {} times.\n'.format(count)

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000, debug=True)

# requirements.txt
# flask
# redis

# Dockerfile
FROM python:3.9-slim-buster
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]

आपकी पहली Compose फ़ाइल

यह docker-compose.yml सभी चीज़ों को एक साथ जोड़ती है। इसमें दो सेवाएँ परिभाषित हैं: web (हमारा Python ऐप, जो वर्तमान निर्देशिका से बनाया जाता है) और redis (जो आधिकारिक Redis इमेज का उपयोग करती है)।

इस उदाहरण को चलाकर देखें!

version: '3.8'
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

अपना Compose ऐप प्रबंधित करना

अपने मल्टी-कंटेनर अनुप्रयोग को अलग मोड (पृष्ठभूमि में) शुरू करने के लिए, अपनी docker-compose.yml और सहायक फ़ाइलों वाली निर्देशिका में जाएँ, फिर चलाएँ:

docker compose up -d

चल रही सेवाओं और उनकी स्थिति देखने के लिए:

docker compose ps

Compose द्वारा बनाए गए कंटेनरों, नेटवर्कों और वॉल्यूम को रोककर हटाने के लिए:

docker compose down

Compose कॉन्फ़िगरेशन जाँच

निम्न docker-compose.yml अंश पर विचार करें:

version: '3.8'
services:
  app:
    build: .
    ports:
      - "8080:80"
  database:
    image: "postgres:13"

इस कॉन्फ़िगरेशन के बारे में कौन-सा कथन TRUE है?

दोहराएँ: Docker Compose

आपने सीख लिया है कि Docker Compose स्थानीय विकास के लिए मल्टी-कंटेनर अनुप्रयोगों का प्रबंधन कैसे सरल बनाता है!

  • यह आपकी सभी सेवाओं को परिभाषित करने के लिए docker-compose.yml फ़ाइल का उपयोग करता है।
  • सेवाएँ डिफ़ॉल्ट नेटवर्क पर अपने सेवा-नामों का उपयोग करके एक-दूसरे से संचार कर सकती हैं।
  • docker compose up और docker compose down जैसे कमांड आपके पूरे अनुप्रयोग स्टैक को आसानी से प्रबंधित करते हैं।

कई Docker कंटेनरों वाले स्थानीय विकास सेटअप के लिए Docker Compose एक आवश्यक टूल है।

शुरुआत निःशुल्क

एआई शिक्षक के साथ डेवलपरों के लिए Docker और Kubernetes सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
12
पाठ
48

अक्सर पूछे जाने वाले प्रश्न

क्या “Compose के साथ बहु-कंटेनर अनुप्रयोग” पाठ निःशुल्क है?

हाँ—“Compose के साथ बहु-कंटेनर अनुप्रयोग” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और डेवलपरों के लिए Docker और Kubernetes पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। डेवलपरों के लिए Docker और Kubernetes पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Compose के साथ बहु-कंटेनर अनुप्रयोग” में मैं क्या सीखूँगा?

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

क्या डेवलपरों के लिए Docker और Kubernetes शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर डेवलपरों के लिए Docker और Kubernetes शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“Compose के साथ बहु-कंटेनर अनुप्रयोग” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस डेवलपरों के लिए Docker और Kubernetes पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर डेवलपरों के लिए Docker और Kubernetes पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. इमेज के लिए Dockerfile तैयार करना
  2. कस्टम Docker इमेज बनाना
  3. Compose के साथ बहु-कंटेनर अनुप्रयोग
  4. Docker volume से डेटा को स्थायी रखना
← डेवलपरों के लिए Docker और Kubernetes पर वापस जाएँ