सिस्टम बूट होने पर स्वचालित रूप से डॉक कंटेनर शुरू करने का एक अच्छा तरीका क्या है?
क्या उबंटू 14.04 पर ऐसा करने का एक पसंदीदा तरीका है?
मैंने supervisordपूर्व में वेब एप्लिकेशन शुरू करने के लिए उपयोग किया है। लेकिन यह डॉकर के लिए सही बात नहीं है।
सिस्टम बूट होने पर स्वचालित रूप से डॉक कंटेनर शुरू करने का एक अच्छा तरीका क्या है?
क्या उबंटू 14.04 पर ऐसा करने का एक पसंदीदा तरीका है?
मैंने supervisordपूर्व में वेब एप्लिकेशन शुरू करने के लिए उपयोग किया है। लेकिन यह डॉकर के लिए सही बात नहीं है।
जवाबों:
जाहिरा तौर पर, डॉकटर कंटेनरों ( डॉकर 1.2 से ) को चालू करने के लिए वर्तमान विधि पुनरारंभ नीतियों का उपयोग करने के लिए है । यह नियंत्रित करेगा कि स्टार्टअप पर कंटेनर को शुरू करने और बाहर निकलने पर कंटेनर को फिर से शुरू करने के लिए डॉकर को कैसे संभालना चाहिए। मैंने अब तक 'हमेशा' विकल्प का उपयोग किया है, और यह पुष्टि कर सकता है कि यह सिस्टम बूट पर डॉकटर को ऑटो-स्टार्ट करता है:
sudo docker run --restart=always -d myimage
डार्ट चलाने पर रीस्टार्ट फ्लैग का उपयोग करके पुनः आरंभ नीतियां आप एक कंटेनर से बाहर निकलने के बाद दोबारा शुरू नहीं किया जाना चाहिए या नहीं, इसके लिए आप एक पुनरारंभ नीति निर्दिष्ट कर सकते हैं।
नहीं - बाहर निकलने पर कंटेनर को पुनरारंभ न करें।
ऑन-विफलता - कंटेनर को केवल तभी चालू करें जब वह एक गैर शून्य निकास स्थिति के साथ बाहर निकलता है।
हमेशा - हमेशा बाहर निकलने की स्थिति की परवाह किए बिना कंटेनर को पुनरारंभ करें।
आप उस समय की अधिकतम राशि भी निर्दिष्ट कर सकते हैं, जब डॉकर ऑन-फेल नीति का उपयोग करते हुए कंटेनर को पुनः आरंभ करने का प्रयास करेगा। डिफ़ॉल्ट यह है कि डॉकटर कंटेनर को पुनः आरंभ करने के लिए हमेशा के लिए प्रयास करेगा।
$ sudo docker run --restart=always redisयह रेडिस कंटेनर को हमेशा की पुनरारंभ नीति के साथ चलाएगा ताकि यदि कंटेनर बाहर निकलता है, तो डॉकर इसे पुनः आरंभ करेगा।
$ sudo docker run --restart=on-failure:10 redisयह ऑन-फेल की पुनः आरंभ नीति और 10. की अधिकतम पुनरारंभ संख्या के साथ रेडिस कंटेनर को चलाएगा। यदि रेडिस कंटेनर एक गैर-शून्य निकास स्थिति के साथ एक पंक्ति में 10 से अधिक बार बाहर निकलता है तो डॉकर कंटेनर को पुनः आरंभ करने की कोशिश में गर्भपात कर देगा। एक अधिकतम पुनरारंभ सीमा प्रदान करना केवल विफलता नीति के लिए मान्य है।
unless-stoppedको जोड़ा गया था। यह ऐसा काम करता है alwaysलेकिन अगर कंटेनर को रोक दिया जाता है और सिस्टम को रिबूट कर दिया जाता है या डॉकटर डेमॉन को पुनरारंभ कर दिया जाता है, तो कंटेनर पुनरारंभ नहीं होगा। सभी 4 विकल्पों में से एक अच्छा लिखने के लिए यहां देखें। ब्लॉग। सीज़नशिप।…
dockerडेमॉन को इसका समर्थन करने के लिए ऑटो-स्टार्ट करना होगा।
डॉकर के पास यह पृष्ठ है जो यह बताता है कि इसे कैसे करना है upstart और systemd के साथ। मैं मानता हूं कि यह डॉकर के लिए सही बात नहीं लगती। उनका हल चलाना है docker start, जो मानता है कि आपने अपना कंटेनर पहले ही बना लिया है। मुझे लगता है कि आप या तो ऊपर docker run --rmकी पटकथा में करेंगे (इसे एक नई प्रक्रिया और एक छवि से कंटेनर की तरह का इलाज करना) या बस docker डेमॉन को बूट पर ही कंटेनर को फिर से शुरू करने दें (क्योंकि यह डिफ़ॉल्ट रूप से होगा यदि आप और कुछ नहीं करते हैं )। अपस्टार्ट में आसान स्टार्ट / स्टॉप ऑफ प्रोसेस की अनुमति देने का लाभ है, लेकिन आपको डॉकटर के स्टार्ट / स्टॉप के साथ भी मिलता है!
मुझे लगता है कि अपस्टार्ट स्क्रिप्ट काम करने से पहले उपयोगकर्ता को मैन्युअल रूप से एक कंटेनर (सभी सही पोर्ट / वॉल्यूम बाइंडिंग के साथ) बनाने के लिए मजबूर करना अजीब है।
लेकिन यह डॉकर के लिए सही बात की तरह महसूस नहीं करता है।
क्यों नहीं?
मैं बड़ी सफलता के साथ इसके लिए पर्यवेक्षक का उपयोग करता हूं।
आप जो जानते हैं उसका उपयोग करें, जो काम करता है उसका उपयोग करें, कुछ ऐसा उपयोग करें जिसे आप आसानी से बनाए रख सकें और समझ सकें।
--rm?
--rmयहां प्रासंगिक क्यों है।
dockerके लिए एक स्थानापन्न है lxcया openvzजो lxc.start.auto = 1और vzctl set --onboot yes। इसके अलावा ESXi और अन्य वर्चुअलाइजेशन समाधान में ऐसी सुविधा शामिल है। लॉरेंस की तरह, मुझे भी नहीं लगता कि इस तरह के ऑटोस्टार्ट फीचर को वितरण-विशिष्ट तरीके से लागू किया जाना चाहिए क्योंकि एक डॉक उपयोगकर्ता को हर प्लेटफॉर्म पर समान ज्ञान के साथ समान समस्या को हल करने में सक्षम होना चाहिए।