Docker का ENTRYPOINT
निर्देश आपके कंटेनर की मुख्य प्रक्रिया को परिभाषित करने का एक शक्तिशाली उपकरण है। CMD
निर्देश के साथ मिलकर इसके उपयोग में महारत हासिल करना, मज़बूत और पुन: प्रयोज्य Docker इमेज बनाने के लिए आवश्यक है। यह लेख ENTRYPOINT
और इसके व्यावहारिक अनुप्रयोगों का पता लगाता है।
विषय-सूची
ENTRYPOINT
निर्देश को समझनाENTRYPOINT
को तर्क पास करनाENTRYPOINT
बनामCMD
: एक विस्तृत तुलना- व्यावहारिक उदाहरण और सर्वोत्तम अभ्यास
- निष्कर्ष
ENTRYPOINT
निर्देश को समझना
Dockerfile में ENTRYPOINT
निर्देश कंटेनर के शुरू होने पर लॉन्च किए जाने वाले प्राथमिक निष्पादन योग्य को निर्दिष्ट करता है। यह कंटेनर की मुख्य कार्यक्षमता को परिभाषित करता है। CMD
के विपरीत, ENTRYPOINT
को दिए गए तर्क docker run
कमांड द्वारा ओवरराइड नहीं किए जाते हैं; इसके बजाय, वे रनटाइम तर्कों के साथ संयुक्त होते हैं। यह रनटाइम अनुकूलन की अनुमति देते हुए एक सुसंगत, अनुमानित आधार प्रक्रिया सुनिश्चित करता है।
उदाहरण के लिए, एक वेब सर्वर इमेज उपयोग कर सकता है:
ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
यह गारंटी देता है कि Apache अग्रभूमि में चलता है, चाहे कंटेनर कैसे भी शुरू किया जाए। -D FOREGROUND
तर्क इमेज के अंतर्गत ही होते हैं।
ENTRYPOINT
को तर्क पास करना
ENTRYPOINT
की वास्तविक शक्ति docker run
कमांड से तर्क स्वीकार करने की इसकी क्षमता में निहित है। इन्हें ENTRYPOINT
कमांड में जोड़ा जाता है, जिससे इमेज को बदले बिना अनुकूलन सक्षम होता है।
इस Dockerfile
पर विचार करें:
ENTRYPOINT ["/bin/sh", "-c"]
CMD ["echo $1 && date"]
docker run my-image "Hello from ENTRYPOINT!"
चलाने पर “Hello from ENTRYPOINT!” प्रिंट होगा, उसके बाद वर्तमान तिथि और समय आएगा। “Hello from ENTRYPOINT!” तर्क शेल को पास किया जाता है और echo
कमांड द्वारा निष्पादित किया जाता है। CMD
से date
कमांड भी निष्पादित होता है।
एक अधिक परिष्कृत उदाहरण एक स्क्रिप्ट है जो एक पोर्ट नंबर लेता है:
#!/bin/bash
PORT="${1:-8080}" # यदि कोई तर्क प्रदान नहीं किया जाता है, तो डिफ़ॉल्ट रूप से 8080 का उपयोग करें।
echo "Starting server on port: $PORT"
# ... $PORT का उपयोग करके सर्वर तर्क ...
ENTRYPOINT
बनाम CMD
: एक विस्तृत तुलना
ENTRYPOINT
मुख्य प्रक्रिया को परिभाषित करता है; CMD
उस प्रक्रिया के लिए डिफ़ॉल्ट तर्क प्रदान करता है। यदि दोनों मौजूद हैं, तो docker run
तर्क ENTRYPOINT
कमांड में जोड़े जाते हैं, CMD
तर्कों को ओवरराइड करते हैं। यदि केवल CMD
निर्दिष्ट है, तो यह मुख्य प्रक्रिया के रूप में कार्य करता है। मुख्य कार्यक्षमता के लिए ENTRYPOINT
और डिफ़ॉल्ट या आसानी से ओवरराइड करने योग्य विकल्पों के लिए CMD
का उपयोग करें।
व्यावहारिक उदाहरण और सर्वोत्तम अभ्यास
उदाहरण 1: एक साधारण Python अनुप्रयोग
COPY . /app
WORKDIR /app
ENTRYPOINT ["python3", "my_app.py"]
यह सीधे आपके Python अनुप्रयोग को चलाता है। docker run
के कोई भी तर्क my_app.py
को पास किए जाएंगे।
उदाहरण 2: अधिक जटिल कमांड के लिए शेल का उपयोग करना
ENTRYPOINT ["/bin/bash", "-c"]
CMD ["npm start"]
यहाँ, आप एक शेल से शुरू कर सकते हैं और फिर आपको आवश्यक कोई भी कमांड चला सकते हैं, या तो डिफ़ॉल्ट (npm start
) या docker run
से ओवरराइड करें।
सर्वोत्तम अभ्यास:
- मुख्य कमांड के लिए
ENTRYPOINT
का उपयोग करें। - डिफ़ॉल्ट तर्कों या आसानी से परिवर्तनीय सेटिंग्स के लिए
CMD
का उपयोग करें। - अपनी
ENTRYPOINT
स्क्रिप्ट के भीतर हमेशा तर्कों को सुरक्षित रूप से संभालें, वैधता की जाँच करें और सूचनात्मक त्रुटि संदेश प्रदान करें।
निष्कर्ष
ENTRYPOINT
एक मौलिक Docker निर्देश है, जो मज़बूत, पुन: प्रयोज्य और अनुकूलनीय कंटेनर इमेज के निर्माण को सक्षम बनाता है। प्रभावी कंटेनरीकृत अनुप्रयोगों को विकसित करने के लिए CMD
के साथ इसके अंतःक्रिया को समझना महत्वपूर्ण है। अपने ENTRYPOINT
और CMD
निर्देशों को ध्यान से तैयार करके, आप अधिक विश्वसनीय और रखरखाव योग्य Docker इमेज बना सकते हैं।