Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

डोकर प्रतिबद्ध mysql सहेजता नहीं है

यहां कई चीजें हो रही हैं:

सबसे पहले, 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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DATETIME कॉलम जोड़ने के लिए ऑल्टर टेबल सिंटैक्स कैसा दिखता है?

  2. csv दिनांक प्रारूप को mysql db में कैसे बदलें?

  3. MySQL सूची मूल्यों पर रिकॉर्ड आधार लाने के लिए क्वेरी का चयन करें

  4. MySQL कस्टम प्राथमिक कुंजी जनरेटर

  5. मैं mysql पर अस्थायी तालिकाओं को कैसे साफ कर सकता हूं?