यहां कई चीजें हो रही हैं:
सबसे पहले, docker commit
एक कोड गंध है। यह उन लोगों द्वारा उपयोग किया जाता है जो मैन्युअल प्रक्रिया के साथ छवियां बनाते हैं, बजाय उनके निर्माण को डॉकरफाइल के साथ स्वचालित करने के लिए जो आसान मनोरंजन की अनुमति देगा। यदि संभव हो, तो मैं अनुशंसा करता हूं कि आप अपनी छवि निर्माण के लिए डॉकरफ़ाइल में संक्रमण करें।
इसके बाद, एक docker commit
वॉल्यूम में किए गए परिवर्तनों को कैप्चर नहीं करेगा। और यही समस्या तब होती है जब आप किसी वॉल्यूम को RUN
. के साथ अपडेट करने का प्रयास करते हैं डॉकरफाइल में कदम रखें। ये दोनों कंटेनर फाइल सिस्टम में परिवर्तन को कैप्चर करते हैं और उन परिवर्तनों को डॉकर छवि में एक परत के रूप में संग्रहीत करते हैं, और वॉल्यूम कंटेनर फाइल सिस्टम का हिस्सा नहीं होते हैं। यह तब भी दिखाई देता है जब आप docker diff
run चलाते हैं एक कंटेनर के खिलाफ। इस मामले में, अपस्ट्रीम इमेज ने उनके Dockerfile में वॉल्यूम को परिभाषित किया है:
VOLUME /var/lib/mysql
और docker के पास Dockerfile से बनाए गए वॉल्यूम को पूर्ववत करने का आदेश नहीं है। आपको या तो डॉकटर के बाहर से छवि परिभाषा को सीधे संशोधित करना होगा (अनुशंसित नहीं) या उस चरण को हटाकर अपनी खुद की अपस्ट्रीम छवि बनाना होगा (अनुशंसित)।
Mysql इमेज जो प्रदान करती है वह है /docker-entrypoint-initdb.d
में आपकी खुद की डेटाबेस निर्माण स्क्रिप्ट को इंजेक्ट करने की क्षमता। , जिसे आप अपनी स्वयं की छवि के साथ जोड़ सकते हैं जो MySQL का विस्तार करती है, या वॉल्यूम के रूप में माउंट करती है। यह वह जगह है जहां आप अपनी स्कीमा इंजेक्ट करेंगे, या विकास के लिए ज्ञात बैकअप से प्रारंभ करेंगे।
अंत में, यदि लक्ष्य दृढ़ता बनाए रखना है, तो आपको अपने डेटा को एक वॉल्यूम में संग्रहित करना चाहिए, न कि कंटेनर बनाकर:
docker run -v mysql-data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql
वॉल्यूम आपको कंटेनर को फिर से बनाने की अनुमति देता है, जब पैच जारी किए जाते हैं (जैसे सुरक्षा सुधार) तो आपका डेटा खोए बिना MySQL के एक नए संस्करण में अपग्रेड करें।
वॉल्यूम का बैकअप लेने के लिए यह एक tgz को निर्यात करेगा:
docker run --rm -v mysql-data:/source busybox tar -cC /source . >backup.tgz
और वॉल्यूम को पुनर्स्थापित करने के लिए, यह एक tgz से एक बनाता है:
docker run --rm -i -v mysql-data:/target busybox tar -xC /target <backup.tgz