मुझे होस्ट निर्देशिका के लिंक के रूप में बढ़ते संस्करणों को पसंद नहीं है, इसलिए मैं पूरी तरह से डॉक प्रबंधित कंटेनरों के साथ डॉक कंटेनर को अपग्रेड करने के लिए एक पैटर्न के साथ आया। एक नया डॉकटर कंटेनर बनाना --volumes-from <container>
, नए कंटेनर को अपडेट किए गए चित्रों के साथ साझा करेगा जो डॉक प्रबंधित संस्करणों का स्वामित्व साझा करता है।
docker pull mysql
docker create --volumes-from my_mysql_container [...] --name my_mysql_container_tmp mysql
my_mysql_container
अभी तक मूल को तुरंत नहीं हटाकर , आपके पास ज्ञात कार्यशील कंटेनर में वापस जाने की क्षमता है यदि उन्नत कंटेनर में सही डेटा नहीं है, या एक विवेक परीक्षण विफल हो जाता है।
इस बिंदु पर, मैं आमतौर पर कंटेनर के लिए जो भी बैकअप स्क्रिप्ट चलाता हूं, वह कुछ गलत हो जाने पर खुद को एक सुरक्षा जाल देने के लिए होगी
docker stop my_mysql_container
docker start my_mysql_container_tmp
अब आपके पास यह सुनिश्चित करने का अवसर है कि आप जिस डेटा को नए कंटेनर में रखने की उम्मीद करते हैं, वह है और एक स्वच्छता जांच चलाता है।
docker rm my_mysql_container
docker rename my_mysql_container_tmp my_mysql_container
डॉक्यूमर वॉल्यूम इतने लंबे समय तक चिपके रहेंगे जब तक कोई भी कंटेनर उनका उपयोग नहीं कर रहा है, इसलिए आप मूल कंटेनर को सुरक्षित रूप से हटा सकते हैं। एक बार जब मूल कंटेनर को हटा दिया जाता है, तो नया कंटेनर मूल के नाम को मान सकता है कि वह सब कुछ उतना ही सुंदर बना सकता है जितना उसे शुरू करना था।
डॉक कंटेनर को अपग्रेड करने के लिए इस पैटर्न का उपयोग करने के दो प्रमुख फायदे हैं। सबसे पहले, यह वॉल्यूम को सीधे अपग्रेड किए गए कंटेनरों में स्थानांतरित करने की अनुमति देकर होस्ट निर्देशिकाओं को माउंट करने की आवश्यकता को समाप्त करता है। दूसरे, आप ऐसी स्थिति में नहीं हैं जहाँ काम करने वाला कंटेनर नहीं है; इसलिए यदि अपग्रेड फेल हो जाता है, तो आप आसानी से वापस कर सकते हैं कि मूल डॉकटर कंटेनर को फिर से स्पिन करने से पहले यह कैसे काम कर रहा था।