Docker Compose में डिपेंडेंसी और ट्रबलशूटिंग

इंटरमीडिएट Docker

Mike Metzger

Data Engineering Consultant

डिपेंडेंसी क्या हैं?

  • डिपेंडेंसी संसाधनों के स्टार्टअप क्रम तय करती हैं
  • संसाधन (कंटेनर) अन्य संसाधन माँग सकते हैं
  • उदाहरण: वेब एप्लिकेशन
    • डेटाबेस कंटेनर postgresql पहले शुरू होना चाहिए

कंटेनर डिपेंडेंसी उदाहरण - postgres

इंटरमीडिएट Docker

डिपेंडेंसी क्या हैं?

  • डिपेंडेंसी संसाधनों के क्रम तय करती हैं
  • संसाधन (कंटेनर) अन्य संसाधन माँग सकते हैं
  • उदाहरण: वेब एप्लिकेशन
    • डेटाबेस कंटेनर postgresql पहले शुरू होना चाहिए
    • फिर python_app

कंटेनर डिपेंडेंसी उदाहरण - python_app

इंटरमीडिएट Docker

डिपेंडेंसी क्या हैं?

  • डिपेंडेंसी संसाधनों के क्रम तय करती हैं
  • संसाधन (कंटेनर) अन्य संसाधन माँग सकते हैं
  • उदाहरण: वेब एप्लिकेशन
    • डेटाबेस कंटेनर postgresql पहले शुरू होना चाहिए
    • फिर python_app
    • और अंत में nginx वेब सर्वर

कंटेनर डिपेंडेंसी उदाहरण - पूर्ण

इंटरमीडिएट Docker

depends_on

  • डिपेंडेंसी depends_on एट्रिब्यूट से परिभाषित होती हैं
  • उदाहरण की तरह चेन बना सकते हैं
  • या, जरूरत हो तो प्रति संसाधन कई डिपेंडेंसी रख सकते हैं
  • compose.yaml फाइल का क्रम मायने नहीं रखता
services:
  postgresql:
    image: postgresql:latest

python_app: image: custom_app depends_on: - postgresql
nginx: image: nginx/latest depends_on: - python_app
इंटरमीडिएट Docker

एप्लिकेशन शटडाउन

  • एप्लिकेशन शटडाउन उल्टे क्रम में होता है
  • nginx संसाधन बंद होता है

कंटेनर डिपेंडेंसी उदाहरण - पूर्ण

इंटरमीडिएट Docker

एप्लिकेशन शटडाउन

  • एप्लिकेशन शटडाउन उल्टे क्रम में होता है
  • nginx संसाधन बंद होता है
  • फिर python_app संसाधन बंद होता है

कंटेनर डिपेंडेंसी उदाहरण - python_app

इंटरमीडिएट Docker

एप्लिकेशन शटडाउन

  • एप्लिकेशन शटडाउन उल्टे क्रम में होता है
  • nginx संसाधन बंद होता है
  • फिर python_app संसाधन बंद होता है
  • और अंत में postgresql संसाधन

कंटेनर डिपेंडेंसी उदाहरण - postgres

इंटरमीडिएट Docker

अन्य विकल्प

  • Docker Compose डिपेंडेंसी के लिए अन्य विकल्प देता है
  • condition: तय करता है कि संसाधन कब तैयार माना जाए
    • service_started - संसाधन सामान्य रूप से शुरू हुआ
      • डिफॉल्ट व्यवहार
    • service_completed_successfully - संसाधन पूर्णता तक चला, जैसे प्रारंभिक कॉन्फ़िगरेशन/आदि
    • service_healthy - healthcheck द्वारा परिभाषित मानदंड पूरे
services:
  nginx:
    image: nginx/latest
    depends_on:
      python_app:
        condition: service_started

python_app: image: custom_app depends_on: postgresql: condition: service_healthy
इंटरमीडिएट Docker

Docker Compose ट्रबलशूटिंग टूल

  • Docker Compose में अतिरिक्त ट्रबलशूटिंग टूल हैं
  • docker compose logs - एप्लिकेशन के सभी संसाधनों का आउटपुट इकट्ठा करता है
    redis-1  | * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    redis-1  | * Running mode=standalone, port=6379.
    redis-1  | * Server initialized
    redis-1  | * Ready to accept connections tcp
    web-1    | * Serving Flask app 'app.py'
    web-1    |  * Running on all addresses (0.0.0.0)
    web-1    |  * Running on http://172.20.0.2:5000
    web-1    | Press CTRL+C to quit
    
  • docker compose logs <resourcename>
इंटरमीडिएट Docker

docker compose top

  • docker compose top एप्लिकेशन के भीतर संसाधनों की स्थिति दिखाता है
composetest-redis-1
UID   PID    PPID   C    STIME   TTY   TIME       CMD
999   2767   2726   0    01:16   ?     00:03:27   redis-server *:6379

composetest-web-1
UID    PID    PPID   C    STIME   TTY   TIME       CMD
root   2768   2740   0    01:16   ?     00:00:23   /usr/local/bin/python /usr/local/bin/flask run
इंटरमीडिएट Docker

अभ्यास करते हैं!

इंटरमीडिएट Docker

Preparing Video For Download...