कोर्स
MySQL सबसे लोकप्रिय रिलेशनल डेटाबेस टूल है, जिसका मार्केट शेयर 40% से अधिक है। इसके प्रतिस्पर्धियों PostgreSQL (16%) और Oracle Database (11%) की तुलना में इसके आँकड़े काफी बेहतर दिखते हैं।
MySQL इसलिए लोकप्रिय है क्योंकि यह सरल होने के साथ-साथ शक्तिशाली भी है। इसकी प्रमुख खूबियाँ:
- रिलेशनल: रिलेशनल मॉडल का पालन करता है और डेटाबेस प्रबंधन के लिए SQL का उपयोग करता है।
- ओपन-सोर्स (GNU लाइसेंस): समुदाय भी इसे पसंद करता है, कंपनियाँ भी।
- स्केलेबल: छोटे से लेकर एंटरप्राइज़-स्तर के अनुप्रयोगों तक संभाल सकता है।
- सुरक्षित: यूज़र ऑथेंटिकेशन, एक्सेस मैनेजमेंट और एन्क्रिप्शन प्रदान करता है।
- उच्च-प्रदर्शन: जटिल क्वेरी और बड़े डेटा वॉल्यूम को तेज़ी और कुशलता से संभालने के लिए जाना जाता है।
- रिप्लिकेशन और बैकअप: डेटा प्रतिकृति और बैकअप के विकल्प उपलब्ध हैं, जिससे डिजास्टर रिकवरी रणनीतियाँ संभव होती हैं।
जहाँ तक Docker कंटेनरों के भीतर MySQL के उपयोग की बात है, यह तो मानो बादलों में बनी जोड़ी है। अगर आपने पहले Docker के साथ काम किया है, तो इसके सारे फायदे MySQL Docker कंटेनरों पर भी लागू होते हैं:
- आइसोलेशन और स्थिरता: MySQL इंस्टेंस अन्य सॉफ़्टवेयर और डिपेंडेंसी से अलग-थलग रहेगा, जिससे संभावित टकराव रुकेंगे।
- वर्ज़न नियंत्रण: Docker आपको पूरे सॉफ़्टवेयर स्टैक को MySQL के साथ वर्ज़न करने देता है। यानी आप कभी भी अपना एन्वायरनमेंट दोहराकर विकास और परीक्षण को आसान बना सकते हैं।
- स्केलेबिलिटी और संसाधन प्रबंधन: Docker के साथ, आप मेमोरी या CPU जैसे अधिक संसाधन आसानी से आवंटित कर MySQL एप्लिकेशन को स्केल कर सकते हैं।
- डिपेंडेंसी प्रबंधन: Docker आपके MySQL इंस्टेंस को एन्कैप्सुलेट करता है, जिससे आप अपनी लोकल मशीन पर कुछ छेड़े बिना इसकी अलग-अलग वर्ज़न संभाल सकते हैं।
सबसे बढ़कर, आपका MySQL एप्लिकेशन कहीं भी काम करेगा—सिर्फ़ आपके कंप्यूटर पर नहीं।
यदि आप MySQL की तुलना इसके दूसरे सबसे लोकप्रिय प्रतिस्पर्धी से करना चाहते हैं, तो हमारा विस्तृत PostgreSQL बनाम MySQL तुलनात्मक लेख देखें।
तो आज, आप Docker के साथ MySQL चलाने की बुनियादी बातें सीखेंगे। आइए शुरू करें!
पूर्वापेक्षाएँ
क्योंकि यह लेख MySQL Docker कंटेनरों पर केंद्रित है, साथ चलने के लिए कुछ पूर्वापेक्षाएँ हैं:
- कमांड लाइन/टर्मिनल एक्सेस: आपके पास टर्मिनल एक्सेस वाला लोकल एन्वायरनमेंट होना चाहिए। यदि आप Colab जैसे Jupyter एन्वायरनमेंट में हैं, तो कृपया अभी स्विच करें।
- चल रहा Docker इंस्टेंस: आपके पास Docker Desktop पहले से इंस्टॉल होना चाहिए (निर्देश हमारे Docker for Data Science ट्यूटोरियल में हैं)। जब यह पूरी तरह चल रहा हो, तो इंटरफेस के बाएँ निचले हिस्से में एक हरी बेबी व्हेल दिखाई देगी:

और टर्मिनल पर docker --help कमांड बिना त्रुटि के काम करेगा।
- Docker की बुनियादी जानकारी: हालाँकि मैं लेख में उपयोग किए गए सभी कमांड समझाऊँगा, पर Docker की बुनियादी समझ होने से आपको अधिक लाभ मिलेगा।
- SQL: यही बात SQL पर भी लागू होती है — मैं यहाँ उपयोग किए गए किसी भी SQL कमांड की व्याख्या नहीं करूँगा, क्योंकि इससे हम मुख्य विषय से भटकेंगे। यदि आपकी SQL कुशलताएँ थोड़ी जंग खा गई हैं, तो आप इस SQL कोर्स से प्रमुख विषयों को दोहरा सकते हैं।
आधिकारिक MySQL Docker इमेज डाउनलोड करना
हम निम्न कमांड से आधिकारिक MySQL Docker इमेज डाउनलोड करके शुरू करेंगे:
$ docker pull mysql:latest
docker pull को image:version सिंटैक्स के साथ इमेज का नाम और वर्ज़न चाहिए। latest कीवर्ड का उपयोग करने से सबसे हाल की स्थिर रिलीज़ डाउनलोड होगी।
यदि आप Docker Hub पर आधिकारिक MySQL इमेज पेज देखें, तो आपको अलग-अलग उद्देश्यों के लिए कई अन्य वर्ज़न मिलेंगे।

उदाहरण के लिए, v8.2 ऐसे डाउनलोड करें:
$ docker pull mysql:8.2
इमेज डाउनलोड करने के बाद, यह आपकी मौजूदा Docker इमेजों की सूची में दिखनी चाहिए:

Docker इमेजों को टर्मिनल से भी सूचीबद्ध किया जा सकता है:
$ docker images

ध्यान रखें: Docker इमेजें कंटेनर बनाने के लिए ब्लूप्रिंट होती हैं। जैसे एक ब्लूप्रिंट से घर बनाया जाता है, उसी तरह Docker इमेज में किसी एप्लिकेशन या सेवा का चलने योग्य इंस्टेंस बनाने के लिए आवश्यक निर्देश और घटक होते हैं।
यदि आप OOP पृष्ठभूमि से हैं, तो Docker इमेजों को क्लास की तरह समझें। जैसे एक क्लास से कई ऑब्जेक्ट बनाए जा सकते हैं, वैसे ही एक Docker इमेज से कई कंटेनर बनाए जा सकते हैं।
MySQL सर्वर कंटेनर चलाना और प्रबंधित करना
अब, चलिए mysql इमेज से अपना पहला कंटेनर बनाते हैं। हम यह कमांड उपयोग करेंगे:
$ docker run --name test-mysql -e MYSQL_ROOT_PASSWORD=strong_password -d mysql
run: नया कंटेनर बनाता है या मौजूदा को शुरू करता है--name CONTAINER_NAME: कंटेनर को नाम देता है। नाम पठनीय और छोटा होना चाहिए। हमारे मामले में नामtest-mysqlहै।-e ENV_VARIABLE=value:-eटैग कंटेनर के भीतर उपलब्ध होने वाला एन्वायरनमेंट वेरिएबल बनाता है। बाद में कंटेनर से SQL कमांड चलाने के लिएMYSQL_ROOT_PASSWORDसेट करना अहम है। अपने मज़बूत पासवर्ड को कहीं सुरक्षित रखें (सिर्फ़ दिमाग़ में नहीं)।-d: detached का शॉर्ट,-dटैग कंटेनर को बैकग्राउंड में चलाता है। यदि आप यह टैग हटाते हैं, तो कमांड कंटेनर बंद होने तक लॉग प्रिंट करता रहेगा।image_name: अंतिम आर्ग्युमेंट वह इमेज है जिससे कंटेनर बनेगा। यहाँ हमारी इमेजmysqlहै।
यदि कमांड एक लंबी-सी स्ट्रिंग लौटाए (कंटेनर ID), तो इसका मतलब कंटेनर शुरू हो गया है। आप docker ps से इसका स्टेटस देख सकते हैं:

ध्यान रखें: Docker कंटेनर एक शक्तिशाली ऑपरेटिंग सिस्टम एम्युलेटर है। MySQL चलाने के अलावा, आप कंटेनर के भीतर वही काम कर सकते हैं जो आप अपनी कंप्यूटर की टर्मिनल से करते हैं।
कंटेनर के भीतर टर्मिनल तक पहुँचने के लिए यह कमांड उपयोग करें:
$ docker exec -it container_name bash
यह एक bash सत्र शुरू करेगा।
स्थानीय रूप से MySQL सर्वर कंटेनर से कनेक्ट करना
सभी MySQL कंटेनर एक MySQL सर्वर लॉन्च करते हैं, जिसमें SQL का उपयोग कर डेटाबेस बनाने और प्रबंधित करने के लिए सब कुछ होता है। सर्वर से कनेक्ट करने के लिए कंटेनरों में एक MySQL क्लाइंट भी होता है, जो हमें SQL क्वेरी चलाने देता है। क्लाइंट दरअसल mysql टर्मिनल कमांड का ही एक नाम है। चलिए इसे test-mysql के टर्मिनल में उपयोग करते हैं:
1. test-mysql का bash टर्मिनल खोलें:
$ docker exec -it test-mysql bash
2. root यूज़र के रूप में क्लाइंट से कनेक्ट करें:
$ mysql -u root -p
Enter password: ...
mysql>
हम -u टैग से यूज़रनेम (root) बता रहे हैं और -p टैग जोड़कर पासवर्ड प्रॉम्प्ट पर दर्ज कर रहे हैं।

कंटेनर के बाहर से भी MySQL सर्वर से कनेक्ट करना संभव है। उदाहरण के लिए, अपनी होस्ट मशीन से कनेक्ट करने के लिए आप अपने सिस्टम में MySQL क्लाइंट मैन्युअली इंस्टॉल कर सकते हैं।
Windows पर MySQL और इसका क्लाइंट इंस्टॉल करने के लिए, आधिकारिक MySQL इंस्टॉलेशन गाइड के निर्देशों का पालन करें।
Mac के लिए, Homebrew का उपयोग करें:
$ brew install mysql
Linux या WSL2 (मेरी पसंद) के लिए, आप sudo का उपयोग कर सकते हैं:
$ sudo apt update
$ sudo apt install mysql-client
इंस्टॉलेशन के बाद, यदि आपका कंटेनर चल रहा है, तो उसे रोकें और हटा दें:
$ docker stop test-mysql
test-mysql
$ docker rm test-mysql
अब, हम कंटेनर को दोबारा शुरू करेंगे और कंटेनर के एक पोर्ट को अपनी लोकल मशीन के पोर्ट से मैप करेंगे:
$ docker run -d --name test-mysql -e MYSQL_ROOT_PASSWORD=strong_password -p 3307:3306 mysql
यह कमांड ये करता है:
-p 3307:3306: कंटेनर का पोर्ट 3306 (MySQL का डिफ़ॉल्ट पोर्ट) आपके लोकल पोर्ट 3307 से मैप करता है। यानी आपके लोकल पोर्ट 3307 पर भेजा गया ट्रैफ़िक कंटेनर के पोर्ट 3306 पर फ़ॉरवर्ड होगा और आपका MySQL सर्वर उसी पोर्ट पर सुलभ रहेगा।-d: कंटेनर को फिर से detached मोड में चलाता है।--name test-mysql: वही कंटेनर नाम "test-mysql" दोबारा उपयोग करता है।-e MYSQL_ROOT_PASSWORD=strong_password: MySQL सर्वर के लिए root पासवर्ड फिर से सेट करता है।mysql: चलाने के लिए आधिकारिक MySQL Docker इमेज दर्शाता है।
टर्मिनल जब कंटेनर के लिए नया ID आउटपुट करे, तो हम पोर्ट मैपिंग जाँच सकते हैं:
$ docker port test-mysql
3306/tcp -> 0.0.0.0:3307
सफल रहा! अब अपनी लोकल मशीन से, आप mysql क्लाइंट का उपयोग करके पोर्ट 3307 पर सर्वर से कनेक्ट कर सकते हैं:
$ mysql --host=127.0.0.1 --port=3307 -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.2.0 MySQL Community Server - GPL
Copyright (c) 2000, 2023, Oracle and/or its affiliates…
MySQL कंटेनर को कॉन्फ़िगर करना
आप एक कॉन्फ़िगरेशन फ़ाइल का उपयोग करके कई सेटिंग्स के लिए MySQL कंटेनरों को कॉन्फ़िगर कर सकते हैं। आमतौर पर, यह फ़ाइल कंटेनर की निम्न डायरेक्टरी में से किसी एक के भीतर होगी:
/etc/mysql//etc/mysql/conf.d/etc/mysql/mysql.conf.d
डायरेक्टरी इमेज-टू-इमेज बदल सकती हैं। लेकिन कॉन्फ़िग फ़ाइल का मानक नाम और एक्सटेंशन my.cnf है। यदि यह फ़ाइल ऊपर दी गई किसी भी डायरेक्टरी में मौजूद नहीं है, तो इसका मतलब है कि कंटेनर को एक कस्टम कॉन्फ़िगरेशन फ़ाइल चाहिए। हमारे test-mysql कंटेनर के मामले में ऐसा ही है:
$ ls /etc/mysql/conf.d/ # Returns no output
ऐसी स्थितियों में, हमें निम्न सावधानीपूर्वक कदम उठाने होते हैं:
1. कंटेनर को रोकें और हटा दें:
$ docker stop test-mysql; docker rm test-mysql
2. स्थानीय रूप से (अपनी मशीन पर) एक खाली कॉन्फ़िगरेशन फ़ाइल बनाएँ:
$ sudo mkdir -p /etc/docker/test-mysql # Create a dir
$ sudo touch /etc/docker/test-mysql/my.cnf # Create a config file inside dir
3. दोनों खाली .cnf फ़ाइलों को लिंक करते हुए कंटेनर को पुनः शुरू करें:
$ docker run \
--name test-mysql \
-v /etc/docker/test-mysql:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=strong_password \
-d mysql
हम एक नया टैग लिख रहे हैं: -v, जो volume का संक्षेप है। यह टैग कंटेनर और लोकल मशीन के बीच डायरेक्टरी लिंक करने के लिए उपयोग होता है। कंप्यूटर साइंस की भाषा में, इस प्रक्रिया को माउंटिंग कहते हैं।
तो, ऊपर दिए कमांड में, हम लोकल /etc/docker/test-mysql डायरेक्टरी को कंटेनर की /etc/mysql/conf.d डायरेक्टरी पर माउंट कर रहे हैं। इससे दोनों डायरेक्टरी की सामग्री लिंक हो जाएगी। किसी भी डायरेक्टरी में किए गए बदलाव दोनों में परिलक्षित होंगे।
माउंटिंग हमें अपने लोकल मशीन पर my.cnf फ़ाइल एडिट कर Docker कंटेनरों की कॉन्फ़िगरेशन बदलने देती है। और सबसे अच्छी बात यह है कि परिवर्तित कॉन्फ़िगरेशन कंटेनर रुकने या हटने के बाद भी हमारी लोकल मशीन पर बनी रहती है। यह पुन: प्रयोज्य होगी।
तो, इस चरण के बाद, हम किस तरह की कॉन्फ़िगरेशन बदल सकते हैं? उत्तर आपके उपयोग-केस पर निर्भर करता है। हम उन्हें नीचे कवर करेंगे।
क्या आप Docker प्रमाणित होना चाहेंगे? Docker प्रमाणन पाने की हमारी गाइड देखें!
कौन-से विकल्प आपको कॉन्फ़िगर करने चाहिए?
हालाँकि MySQL Docker कंटेनरों की डिफ़ॉल्ट कॉन्फ़िगरेशन कई सामान्य परिस्थितियों में काम करती है, फिर भी बेहतर प्रदर्शन, सुरक्षा और संसाधन उपयोग के लिए कुछ सेटिंग्स संशोधित करनी चाहिए। यहाँ कुछ सामान्य रूप से बदले जाने वाले विकल्प हैं:
प्रदर्शन
- innodb_buffer_pool_size: यह सेटिंग InnoDB बफ़र पूल को आवंटित मेमोरी की मात्रा निर्धारित करती है, जो तेज़ पुनर्प्राप्ति के लिए बार-बार एक्सेस किए गए डेटा को कैश करता है। इस मान को बढ़ाने से read-heavy वर्कलोड के लिए प्रदर्शन बेहतर हो सकता है, लेकिन अधिक मेमोरी भी लगेगी।
- query_cache_size: यह सेटिंग क्वेरी कैश का आकार नियंत्रित करती है, जो पहले चले हुए क्वेरी को तेज़ दोबारा निष्पादन के लिए संग्रहीत करता है। इस मान को बढ़ाने से दोहराव वाली क्वेरियों के लिए प्रदर्शन बेहतर हो सकता है, पर यह अधिक मेमोरी उपयोग करता है और डायनेमिक क्वेरियों के लिए प्रभावी नहीं हो सकता।
- thread_pool_size: यह सेटिंग सर्वर द्वारा संभाले जा सकने वाले अधिकतम समवर्ती कनेक्शन्स निर्धारित करती है। अपेक्षित ट्रैफ़िक लोड के आधार पर इस मान को समायोजित करने से संसाधन उपयोग बेहतर होता है और बॉटलनेक्स से बचा जा सकता है।
सुरक्षा
- bind-address: यह विकल्प MySQL सर्वर को केवल विशिष्ट नेटवर्क इंटरफेस पर सुनने तक सीमित करता है, जिससे अनधिकृत स्रोतों से पहुँच सीमित होती है।
- mysql_bind_host: यह सेटिंग MySQL सर्वर को सभी इंटरफेस पर सुनने के बजाय विशिष्ट IP पतों से बाँधने की अनुमति देती है।
- validate_password_policy: यह विकल्प अधिक सख्त पासवर्ड आवश्यकताओं को सक्षम करता है, जिससे सुरक्षा बेहतर होती है।
संसाधन उपयोग
- max_connections: यह सेटिंग अधिकतम समवर्ती कनेक्शनों की संख्या नियंत्रित करती है। इस मान को समायोजित करने से संसाधन समाप्ति रोकी जा सकती है और सर्वर कुशलतापूर्वक चल सकता है।
- innodb_file_per_table: यह विकल्प प्रत्येक InnoDB टेबल को अलग फ़ाइल में संग्रहीत करता है, जिससे संभावित रूप से प्रदर्शन बेहतर हो सकता है, लेकिन स्टोरेज आवश्यकता बढ़ती है।
- innodb_io_capacity: यह विकल्प स्टोरेज सिस्टम के अनुमानित IOPS (Input/Output Operations Per Second) सेट करता है, जिससे इंजन बफ़र पूल उपयोग और डिस्क ऑपरेशनों का अनुकूलन कर सके।
अन्य सामान्य संशोधन
- character_set_server: यह विकल्प सर्वर के लिए डिफ़ॉल्ट कैरेक्टर सेट निर्धारित करता है, जिससे सुसंगत डेटा एन्कोडिंग और हैंडलिंग सुनिश्चित होती है।
- collation_server: यह विकल्प कैरेक्टर डेटा के सॉर्टिंग और तुलना के लिए उपयोग होने वाले डिफ़ॉल्ट कोलेशन नियम निर्धारित करता है।
- log_bin: यह विकल्प सर्वर गतिविधि का बाइनरी लॉगिंग सक्षम करता है, जो ट्रबलशूटिंग और रिप्लिकेशन के लिए उपयोगी हो सकता है।
कॉन्फ़िगरेशन विकल्पों की पूरी सूची देखने के लिए, आप निम्न कमांड चला सकते हैं:
$ docker run -it --rm mysql:tag --verbose --help
आप किसी भी टेक्स्ट एडिटर से .cnf फ़ाइल एडिट कर सकते हैं। अनुसरण करने के लिए सिंटैक्स यह है:
[mysqld]
max_connections=200
other_params=value
...
MySQL Docker कंटेनर में संग्रहीत डेटा को कैसे संरक्षित करें
अपने MySQL कंटेनरों में संग्रहीत डेटा को स्थायी रखना कई कारणों से महत्वपूर्ण है:
- डेटा स्थायित्व: जब आप कंटेनर को रोकते या हटाते हैं, तो आपका डेटाबेस सहित सारा डेटा खो जाता है। डेटा को कंटेनर से अलग करने से वह हमेशा सुलभ रहता है।
- कंटेनरों के बीच डेटा साझा करना: डेटा को कंटेनर से अलग करने से कई कंटेनर उसे एक्सेस कर सकते हैं। इससे डेटा की नकल से बचा जा सकता है और एक ही डेटा उपयोग करने वाली परियोजनाओं के बीच सिंक्रोनाइज़ेशन सरल होता है।
- पोर्टेबिलिटी और बैकअप: स्थायी डेटा का आसानी से बैकअप लिया और स्वतंत्र रूप से साझा किया जा सकता है, जिससे डेटा हानि या आकस्मिक deletion से विश्वसनीय रिकवरी संभव होती है।
- बेहतर प्रदर्शन और स्केलेबिलिटी: बार-बार एक्सेस किए जाने वाले डेटा को SSD जैसी persistent स्टोरेज पर रखकर, आप कंटेनर की writable लेयर (आम तौर पर धीमी) पर निर्भर रहने की तुलना में एप्लिकेशन का प्रदर्शन सुधार सकते हैं।
प्रक्रिया वही है जो हमने पहले देखी थी — हम एक वॉल्यूम बनाएँगे और उसे कंटेनर में जहाँ डेटा संग्रहीत होता है वहाँ माउंट करेंगे। चरण इस प्रकार हैं:
1. एक वॉल्यूम बनाएँ:
$ docker volume create test-mysql-data
volume create कमांड आपके लोकल फाइल सिस्टम पर वॉल्यूम के लिए समर्पित स्टोरेज बनाता है। वॉल्यूम माउंट होने के बाद, कंटेनर का सारा डेटा उससे लिंक हो जाएगा।
2. वॉल्यूम माउंट करके कंटेनर को पुनः शुरू करें:
$ docker stop test-mysql; docker rm test-mysql
$ docker run \
--name test-mysql \
-v test-mysql-data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=strong_password \
-d mysql
इस बार सिंटैक्स इस फ़ॉर्मेट में है: -v volume_name:directory_in_container। MySQL इमेज दस्तावेज़ के अनुसार सभी बनाए गए वॉल्यूम को /var/lib/mysql डायरेक्टरी पर माउंट करना चाहिए।
अब, test-mysql के भीतर बनाई गई कोई भी डेटाबेस या टेबल, कंटेनर के रुकने या हटने के बाद भी लोकल रूप से बनी रहेगी।
अंतिम कमांड
लेख के दौरान हमारा docker run कमांड काफ़ी विकसित हुआ है। तो आइए इसकी सभी विविधताओं को जोड़कर एक अंतिम मास्टर कमांड बनाते हैं। हमें फिर से कंटेनर को रोककर हटाना होगा। शुरुआत से शुरू करने के लिए हम वॉल्यूम भी हटा देंगे:
$ docker stop test-mysql; docker rm test-mysql $ docker volume rm test-mysql-dataतो, यह रहा अंतिम मास्टर कमांड:
$ docker run \ --name final-mysql \ -e MYSQL_ROOT_PASSWORD=strong_password \ -p 3307:3306 \ -v /etc/docker/test-mysql:/etc/mysql/conf.d \ -v final-mysql-data:/var/lib/mysql \ -d mysqlयह कमांड हमारी पिछली लोकल
my.cnfफ़ाइल को इच्छित स्थान पर माउंट करता है औरfinal-mysql-dataनाम से नया वॉल्यूम बनाकर उसे भी माउंट करता है।Docker Compose के साथ जटिल MySQL सेटअप प्रबंधित करना
कई कंटेनरों वाले उन्नत सेटअप के लिए, जैसे MySQL को अन्य सेवाओं (उदा., वेब सर्वर या एप्लिकेशन बैकएंड) के साथ चलाना, Docker Compose एकल कॉन्फ़िगरेशन फ़ाइल के साथ मल्टी-कंटेनर एप्लिकेशन को परिभाषित और प्रबंधित करना सरल कर देता है।
यहाँ MySQL कंटेनर के लिए एक मूल
docker-compose.ymlफ़ाइल का उदाहरण है:version: '3.9' services: db: image: mysql:8.3.0 container_name: mysql-db environment: MYSQL_ROOT_PASSWORD: strong_password MYSQL_DATABASE: example_db MYSQL_USER: user MYSQL_PASSWORD: user_password ports: - "3306:3306" volumes: - db_data:/var/lib/mysql - ./mysql-config:/etc/mysql/conf.d volumes: db_data:Docker Compose का उपयोग करने के चरण:
docker-compose.ymlफ़ाइल बनाएँ: कॉन्फ़िगरेशन फ़ाइल को अपनी प्रोजेक्ट डायरेक्टरी में सेव करें।- सेवाएँ शुरू करें: फ़ाइल में परिभाषित सभी सेवाएँ शुरू करने के लिए यह कमांड चलाएँ:
docker-compose up -d
- सेवाएँ बंद करें: काम पूरा होने पर सेवाएँ बंद करें:
docker-compose down
MySQL के लिए Docker Compose के लाभ:
- सरल कॉन्फ़िगरेशन: एक ही फ़ाइल में MySQL कॉन्फ़िगरेशन, पोर्ट और वॉल्यूम प्रबंधित करें।
- आसान स्केलिंग: डेटाबेस को आसानी से स्केल करें या अपनी एप्लिकेशन स्टैक में अन्य सेवाओं के साथ एकीकृत करें।
- स्थायी डेटा: कंटेनर रिस्टार्ट के बीच डेटा स्थायित्व के लिए वॉल्यूम को स्वतः प्रबंधित करें।
Docker Compose कई एन्वायरनमेंट (उदा., डेवलपमेंट, स्टेजिंग और प्रोडक्शन) प्रबंधित करने या टीमों के साथ सहयोग करने में विशेष रूप से सहायक है।
निष्कर्ष
इस लेख में Docker कंटेनरों के भीतर MySQL डेटाबेस चलाने और प्रबंधित करने के आवश्यक पहलुओं को कवर किया गया। हमने सीखा कि MySQL इमेजें कैसे डाउनलोड और सेट अप करें, कंटेनरों के अंदर MySQL सर्वर कैसे शुरू करें, उन कंटेनरों को कैसे संशोधित करें और कस्टम कॉन्फ़िगरेशन तथा डेटा स्थायित्व के लिए वॉल्यूम कैसे जोड़ें।
विषय के बारे में और जानने के लिए, मैं निम्न संसाधनों की अनुशंसा करता/करती हूँ:
- डेटा साइंस के लिए Docker का परिचय
- Docker का परिचय पाठ्यक्रम
- मशीन लर्निंग के लिए Docker और Kubernetes कंटेनरीकरण
- MySQL Docker इमेज दस्तावेज़
- MySQL संदर्भ मैनुअल
पढ़ने के लिए धन्यवाद!
FAQs
क्या मैं कई MySQL कंटेनरों को प्रबंधित करने के लिए Docker Compose का उपयोग कर सकता/सकती हूँ?
हाँ, Docker Compose कई Docker कंटेनरों—जिसमें MySQL भी शामिल है—का प्रबंधन करने के लिए बेहतरीन टूल है। आप अपनी MySQL सेवा की कॉन्फ़िगरेशन को docker-compose.yml फ़ाइल में परिभाषित कर सकते हैं, जिससे आप एक ही कमांड से कई सेवाओं को शुरू, बंद और प्रबंधित कर सकें।
मैं Docker कंटेनर में MySQL को नए वर्ज़न में कैसे अपग्रेड करूँ?
Docker कंटेनर में MySQL को अपग्रेड करने के लिए, आपको MySQL Docker इमेज का नया वर्ज़न खींचना (pull) होगा और फिर इस नई इमेज के साथ अपने कंटेनर को दोबारा बनाना होगा। आगे बढ़ने से पहले सुनिश्चित करें कि आपके पास डेटा के बैकअप मौजूद हों।
क्या मैं एक ही होस्ट पर कई MySQL कंटेनर चला सकता/सकती हूँ?
हाँ, आप एक ही होस्ट पर कई MySQL कंटेनर चला सकते हैं। हर कंटेनर को होस्ट पर एक अद्वितीय पोर्ट सौंपना होगा, ताकि पोर्ट टकराव से बचने के लिए -p विकल्प का उपयोग किया जा सके।
MySQL कंटेनर चलाने के लिए सुरक्षा संबंधी सर्वोत्तम प्रक्रियाएँ क्या हैं?
सुरक्षा के बेहतर तरीकों में शामिल है: उचित सुरक्षा उपायों के बिना MySQL कंटेनरों को सार्वजनिक इंटरनेट पर उजागर न करना, मज़बूत पासवर्ड का उपयोग करना, Docker और MySQL इमेजों को नियमित रूप से अपडेट करना, और पासवर्ड जैसी संवेदनशील जानकारी के लिए Docker secrets का उपयोग करना।
मैं Docker में MySQL डेटाबेस के बैकअप को कैसे ऑटोमेट कर सकता/सकती हूँ?
आप होस्ट मशीन पर एक cron जॉब बनाकर बैकअप को ऑटोमेट कर सकते हैं, जो कंटेनर के अंदर docker exec के ज़रिए mysqldump चलाता हो। विकल्प के तौर पर, आप Docker वॉल्यूम का उपयोग करके डेटा को persistent रख सकते हैं और बैकअप सीधे होस्ट से संभाल सकते हैं।
क्या मैं दूसरे कंटेनर से MySQL Docker कंटेनर से कनेक्ट कर सकता/सकती हूँ?
हाँ, आप दूसरे कंटेनर से कनेक्ट कर सकते हैं, बशर्ते दोनों कंटेनर एक ही Docker नेटवर्क पर हों। कनेक्ट करते समय आप होस्टनेम के रूप में कंटेनर के नाम का उपयोग कर सकते हैं।
मेरे MySQL कंटेनर के साथ कनेक्शन समस्याओं का निवारण कैसे करूँ?
कनेक्शन समस्याओं का निवारण करने के लिए जाँचें कि कंटेनर चल रहा है (docker ps), पोर्ट मैपिंग सत्यापित करें (docker port), नेटवर्क कॉन्फ़िगरेशन जाँचें, और सुनिश्चित करें कि कंटेनर के भीतर MySQL सर्वर आपकी होस्ट मशीन या अन्य कंटेनरों से कनेक्शन स्वीकार करने के लिए कॉन्फ़िगर्ड है।
क्या होस्ट से माउंट किए बिना कस्टम MySQL कॉन्फ़िगरेशन फ़ाइल का उपयोग करना संभव है?
हाँ, आप कंटेनर के भीतर ही कस्टम कॉन्फ़िगरेशन फ़ाइल बना सकते हैं। हालाँकि, आसान प्रबंधन और स्थायित्व के लिए इसे होस्ट से माउंट करना अधिक सामान्य है।
मैं अपने MySQL कंटेनर के प्रदर्शन की निगरानी कैसे कर सकता/सकती हूँ?
आप प्रदर्शन की निगरानी के लिए MySQL-विशिष्ट मैट्रिक्स हेतु mysqladmin जैसे टूल का उपयोग कर सकते हैं, Docker का बिल्ट-इन stats कमांड (docker stats), या Prometheus जैसे थर्ड-पार्टी मॉनिटरिंग समाधान, जिनमें Docker और MySQL के लिए एक्सपोर्टर हों।
यदि मेरा MySQL Docker कंटेनर क्रैश हो जाए तो मुझे क्या करना चाहिए?
यदि आपका कंटेनर क्रैश हो जाए, तो पहले लॉग्स जाँचें docker logs <container_name> का उपयोग करके, ताकि किसी भी त्रुटि की पहचान हो सके। सुनिश्चित करें कि आपकी कॉन्फ़िगरेशन और एन्वायरनमेंट वेरिएबल सही हैं, और यह भी जाँचें कि CPU/मेमोरी जैसी संसाधन सीमाएँ तो नहीं हैं। कंटेनर को पुनः आरंभ करें और उसके प्रदर्शन की निगरानी करें।
मैं 2 से अधिक वर्षों के अनुभव वाला डेटा साइंस कंटेंट क्रिएटर हूँ और Medium पर सबसे बड़े फॉलोइंग्स में से एक रखता हूँ। मुझे एआई और एमएल पर विस्तार से लेख लिखना पसंद है, जिसमें हल्का-सा व्यंग्यात्मक अंदाज रहता है—क्योंकि कुछ तो करना पड़ता है ताकि वे कम उबाऊ लगें। मैंने 130 से अधिक लेख और एक DataCamp कोर्स तैयार किया है, और एक और बन रहा है। मेरा कंटेंट 50 लाख से अधिक लोगों ने देखा है, जिनमें से 20 हज़ार लोग Medium और LinkedIn पर फॉलोअर्स बन गए।
