"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > डॉकर कंपोज़ में केवल एक बार कमांड कैसे चलाएं?

डॉकर कंपोज़ में केवल एक बार कमांड कैसे चलाएं?

2024-11-19 को प्रकाशित
ब्राउज़ करें:910

How to Run a Command Only Once in Docker Compose?

डॉकर कंपोज़ में एक बार कमांड चलाना

डॉकर कंपोज़ फ़ाइल के साथ काम करते समय, किसी विशिष्ट कमांड को केवल एक बार चलाना आवश्यक हो सकता है, अक्सर प्रारंभिक सेटअप के दौरान एक आवेदन का. यह आवश्यकता तब उत्पन्न होती है जब एप्लिकेशन किसी डेटाबेस पर निर्भर करता है जिसे आरंभीकृत करने की आवश्यकता होती है, और आरंभीकरण केवल पहले रन पर ही होना चाहिए।

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

एंट्रीपॉइंट स्क्रिप्ट

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

यह दृष्टिकोण सुनिश्चित करता है कि आरंभीकरण आदेश केवल एक बार निष्पादित किया जाता है, भले ही कंटेनर को पुनरारंभ किया गया हो या सेवा को बढ़ाया गया हो।

docker-compose.yml फ़ाइल

इस समाधान को लागू करने के लिए, my_project सेवा परिभाषा में निम्नलिखित स्क्रिप्ट को शामिल करने के लिए docker-compose.yml फ़ाइल को संशोधित करें:

services:
  my_project:
    build: .
    volumes:
      - data:/app
    ports:
      - "6060:8080"
    depends_on:
      - mongo
    entrypoint: ["/app/entrypoint.sh"]

इस मामले में, डेटा एप्लिकेशन कोड वाला वॉल्यूम है, और Entrypoint.sh एंट्रीपॉइंट स्क्रिप्ट है।

entrypoint.sh स्क्रिप्ट

निम्नलिखित सामग्री के साथ एक Entrypoint.sh स्क्रिप्ट बनाएं:

#!/bin/bash

# Check if database is initialized.
mongo mongo://admin:admin@mongo:27017/my_project --eval "db.user.findOne()" > /dev/null 2>&1

# If the database is not initialized, perform setup.
if [ $? -ne 0 ]; then
  /app/my_project -setup
fi

# Start the application.
/app/my_project

इस स्क्रिप्ट में, mongo Mongo कंटेनर का होस्टनाम है, और my_project डेटाबेस का नाम है।

यह स्क्रिप्ट जांचती है कि उपयोगकर्ता संग्रह में कोई विशेष दस्तावेज़ मौजूद है या नहीं डेटाबेस. यदि दस्तावेज़ मौजूद नहीं है, तो यह इंगित करता है कि डेटाबेस प्रारंभ नहीं किया गया है, और सेटअप कमांड निष्पादित किया गया है। अन्यथा, एप्लिकेशन सामान्य रूप से प्रारंभ होता है।

"डेटा-ओनली कंटेनर" को हटाना

ध्यान दें कि उपयोगकर्ता ने शुरू में डेटाबेस वॉल्यूम को माउंट करने के लिए "डेटा-ओनली कंटेनर" का उपयोग किया था। हालाँकि, यह दृष्टिकोण अब डॉकर 1.9 और बाद के संस्करण के साथ आवश्यक नहीं है, जो नामित वॉल्यूम का समर्थन करता है। इसलिए, mongodata कंटेनर को docker-compose.yml फ़ाइल से हटाया जा सकता है, और mongo सेवा को सीधे नामित वॉल्यूम का उपयोग करने के लिए संशोधित किया जा सकता है।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3