मेरे पास एक सामान्य उद्देश्य वीपीएस है, और मैं इस पर ऐप्स को डॉक कर रहा हूं । इस पर लगभग 5-6 कंटेनर होंगे, और बहुत कम, इसलिए बॉक्स को आवश्यकतानुसार तुच्छ रूप से फिर से बनाया जा सकता है ।
प्रत्येक ऐप के लिए मेरे पास एक स्टार्ट स्क्रिप्ट है । एक वर्डप्रेस कंटेनर इस तरह दिखता है:
#!/bin/bash# Get the host IP addressexport DOCKER_HOSTIP=`ifconfig docker0 | grep "inet addr" | cut -d ':' -f 2 | cut -d ' ' -f 1`echo "Connecting to database on Docker host ${DOCKER_HOSTIP}"docker run \ --add-host=docker:${DOCKER_HOSTIP} \ --network dockernet \ --network-alias jonblog \ --detach \ --restart always \ --rm \ jonblog
हालाँकि, यह एक त्रुटि देता है:
परस्पर विरोधी विकल्प: -- पुनः आरंभ करें तथा -- आरएम
कई डॉकर टिकट हैं जो कहते हैं कि यह समझदार है, लेकिन मैं इसे नहीं समझता । मुझे लगता है कि मेरा अर्थ स्पष्ट है: यदि कोई कंटेनर नहीं चल रहा है (जैसे स्टार्ट-अप पर) तो मैं इसे शुरू करना चाहता हूं । यदि यह मर जाता है तो मुझे उम्मीद है कि कंटेनर को हटा दिया जाएगा, और आधार छवि से बनाया गया एक नया ताजा । कंटेनर वैसे भी अपरिवर्तनीय होना चाहिए - किसी भी राज्य को मैं संरक्षित करना चाहता हूं, जैसे मीडिया फाइलें और लॉग, वॉल्यूम को लिखे जाएंगे ।
तो, मैंने सोचा कि मैं ड्रॉप चाहिए --restart
ध्वज, और फिर डॉकर कंटेनरों को रोकने और शुरू करने के लिए एक प्रक्रिया प्रबंधक का उपयोग करें । क्या मैं यहां मोनिट का उपयोग कर सकता हूं? मैं कुछ ऐसा करने की उम्मीद कर रहा था:
CHECK PROCESS jonblog MATCHING jonblog START PROGRAM = "/root/docker/jonblog/host-start.sh" STOP PROGRAM = "docker stop jon-blog"
हालांकि, यह सिस्टम प्रक्रिया तालिका की जांच करता है, और नहीं docker ps
, और इसलिए यह निर्दिष्ट स्ट्रिंग से मेल खाने वाला कुछ नहीं मिलेगा। क्या मैं इसे निष्पादित कर सकता हूं docker ps
समय-समय पर, और आउटपुट में लाइनों का मिलान करें?
अगर यह मजबूत साबित होता है तो मुझे किसी अन्य उपकरण का उपयोग करने में खुशी होगी । उदाहरण के लिए, मुझे पर्यवेक्षक थोड़ा हेवीवेट लगता है, लेकिन अगर वह डॉकर के साथ काम करने में अधिक सक्षम है, तो मैं इसका उपयोग करने को तैयार हूं ।
स्पष्टीकरण --rm
कारण है कि मैं चाहता हूँ --rm
क्या यह डॉकराइजेशन प्रक्रिया के दौरान, मैं वर्तमान में चल रहे कंटेनर को रोक देता हूं, load
छवि का एक नया संस्करण, और उपरोक्त स्क्रिप्ट को फिर से चलाएं । इसका मतलब है कि डॉकर को एक की सूचना दी जा रही है restart
प्रत्येक कंटेनर के लिए नीति। मैंने पाया कि बॉक्स को रिबूट करने के बाद, मेरे पास एक साथ चलने वाले ऐप के 15 या उससे थोड़ा-अलग संस्करण होंगे, जो कि इरादा नहीं है ।
मुझे लगता है मैं इस्तेमाल कर सकता docker update --restart never
पर पुराने कंटेनरों को रोकने के लिए यह हो रहा है, लेकिन तब जब मेरे कंटेनर बंद हो जाता है, मैं कर रहा हूँ के साथ छोड़ दिया है, यह चारों ओर झूठ बोल रही है, और मैं बस के रूप में जल्द ही है, यह ऑटो-हटाएं । मैं समय-समय पर पुराने लोगों को किसी प्रकार की क्रॉन नौकरी का उपयोग करके साफ कर सकता था, लेकिन यह थोड़ा हैकी लगता है कि डॉकर मेरे लिए यह कर सकता है ।
जवाब की एक श्रृंखला की मांग
एक बहुत ही उपयोगी टिप्पणी ने सुझाव दिया है कि मुझे मिनीक्यूब में देखना चाहिए, जो स्पष्ट रूप से कुबेरनेट्स के सेटअप को सरल बनाता है, यहां तक कि एक उपयुक्त कुशल व्यक्ति पांच मिनट में ऊपर और चल सकता है ।
मैं अभी भी अधिक हल्के समाधान प्रस्तावित देखना चाहूंगा, इसलिए मेरे पास चुनने के लिए कई उत्तर हैं । जैसा कि संकेत दिया गया है, मैं इसका उत्तर जानना चाहूंगा कि क्या मोनिट जैसी प्रक्रिया पर्यवेक्षक काम करेगी ।
मेरे सिर के ऊपर से, मैं लिखने के लिए एक शेल लूप लिख सकता था docker ps
एक मिनट के लिए हर पांच सेकंड में एक फ़ाइल के लिए, और फिर हर मिनट एक क्रॉन पर चलाएं । मैं तब उस फ़ाइल का उपयोग करके स्कैन कर सकता था grep
और Monit CHECK PROGRAM
सिस्टम चेक। यह थोड़ा हैकी है, लेकिन कुछ ऐसा है जिसे मैं आसानी से समझ सकता हूं अगर इसमें कोई समस्या है । उस सुझाव पर कोई प्रगति?