كيفية تشغيل قاعدة بيانات MySQL في حاوية Docker

استخدام قاعدة بيانات محلية مُحتكمة يوفر مرونة ويبسط الإعداد. يتيح إعادة إنتاج بيئات الإنتاج بشكل دقيق بدون تعقيدات تثبيت قاعدة البيانات التقليدية. دوكر يسهل هذا العملية، مما يجعل من السهل نشر، وإدارة، وتوسيع قواعد البيانات في حاويات منعزلة ببضع أوامر فقط.

في هذا الدليل، ستعلم كيفية:

  • تشغيل قاعدة بيانات محلية مُحتكمة
  • الدخول إلى واجهة سطر الأوامر لحاوية قاعدة البيانات
  • الاتصال بقاعدة بيانات مُحتكمة من主机ك
  • الحفاظ على بيانات قاعدة البيانات في مجلد
  • تنظيف المختبر

متطلباتالسابقة

للاследام بهذا الدليل، يجب أن يكون لديك دوكر مثبتًا. لتحصل على تعليمات التثبيت، يرجى الرجوع إلى موقع دوكر. 

دليل خطوة بخطوة لتهيئة قواعد البيانات المحتكية

1. تشغيل قاعدة بيانات محلية مُحتكمة

أكثر أنظمة قواعد البيانات شيوعًا، مثل MySQL، PostgreSQL، وMongoDB، توفر صور Docker الرسمية المتاحة على Docker Hub. هذه الصور المدروسة تلتزم بأفضل الممارسات، مما يضمن حصولك على أحدث الميزات والتحديثات الأمنية. 

للبدء، قم بزيارة Docker Hub وابحث عن قاعدة البيانات التي تهمك. توفر صفحة كل صورة إرشادات مفصلة حول كيفية تشغيل الكونتينر، وتخصيص إعداداتك، وتكوين قاعدة البيانات لتلبية احتياجاتك. لل��取 مزيد من المعلومات حول صورة MySQL المقدمة في هذا الدليل، راجع صفحة صورة MySQL على Docker Hub.

لتشغيل كونتينر قاعدة بيانات، يمكنك استخدام إما واجهة مستخدم Docker Desktop أو واجهة سطر الأوامر CLI. لتشغيل كونتينر باستخدام واجهة سطر الأوامر، قم بتنفيذ الأمر التالي في terminal:

Shell

 

$ docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -d mysql:latest

 

في هذا الأمر:

  • --name my-mysql ي分配 الاسم my-mysql لكونتينرتك لسهولة الإشارة إليه.
  • -e MYSQL_ROOT_PASSWORD=my-secret-pw ي设定 MySQL كلمة المرور الجذر إلى my-secret-pw. استبدل my-secret-pw بكلمة مرور آمنة تختارها أنت.
  • -e MYSQL_DATABASE=mydb يقوم اختيارياً بإنشاء قاعدة بيانات تسمى mydb. يمكنك تغيير mydb إلى اسم قاعدة البيانات الذي تريده.
  • -d يقوم بتشغيل الحاوية في الوضع المنفصل، مما يعني أنها تعمل في الخلفية.
  • mysql:latest يحدد أنك تريد استخدام أحدث إصدار من صورة MySQL.

لتحقق من أن حاويةك تعمل، قم ب تشغيل docker ps في طرفية:

Shell

 

run docker ps

يمكنك أيضًا التحقق من نفس الشيء في وحدة تحكم Docker Desktop:

2. الوصول إلى وحدة تحكم قاعدة البيانات المحاوية

عندما تعمل قاعدة البيانات داخل حاوية Docker، قد تحتاج إلى الوصول إلى وحدة تحكمها لإدارة قاعدة البيانات، تنفيذ الأوامر، أو القيام بمهام إدارية. يوفر Docker طريقة مباشرة للقيام بذلك باستخدام أمر docker exec. بالإضافة إلى ذلك، يمكنك استخدام واجهة المستخدم الرسومية لـ Docker Desktop إذا كنت تفضل ذلك.

إذا لم يكن لديك حاوية قاعدة بيانات تعمل بعد، فالرجاء الرجوع إلى تشغيل قاعدة بيانات محلية محاوية. للاستفادة من وحدة التحكم في حاوية MySQL باستخدام وحدة التحكم، يمكنك استخدام الأمر docker exec التالي.

Shell

docker exec -it my-mysql bash 

في هذا الأمر:

  • docker exec يخبر Docker أنك ترغب في تنفيذ أمر في حاوية تعمل.
  • -it يضمن أن الوحدة التي تصل إليها تفاعلية بحيث يمكنك كتابة الأوامر فيها.
  • my-mysql هو اسم حاوية MySQL الخاصة بك. إذا قمت بتسمية الحاوية بشكل مختلف عند تشغيلها، استخدم ذلك الاسم بدلاً من ذلك.
  • الأمر الذي تريد تشغيله داخل الحاوية هو bash. يقوم بفتح نافذة Bash تتيح لك التفاعل مع نظام ملفات الحاوية وتطبيقاتها المثبتة.
  • بعد تنفيذ هذا الأمر، سيكون لديك الوصول إلى وحدة التحكم Bash داخل حاوية MySQL الخاصة بك، من خلالها يمكنك إدارة خادم MySQL الخاص بك مباشرة. يمكنك تشغيل Exit للعودة إلى الطرفية.

تحقق مما إذا كانت الحاوية تعمل.

Shell

 

run docker ps

بمجرد الوصول إلى وحدة التحكم في الحاوية، يمكنك تشغيل أي أدوات متاحة في تلك الحاوية. يوضح المثال التالي (Image) استخدام MySQL في الحاوية لسرد قواعد البيانات.

Shell

Mysql -u root -p

MySQL

 

mysql> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mydb               |

| mysql              |

| performance_schema |

| sys                |

+--------------------+

5 rows in set (0.00 sec)

 

mysql> create database testdb;

Query OK, 1 row affected (0.11 sec)

 

mysql> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mydb               |

| mysql              |

| performance_schema |

| sys                |

| testdb             |

+--------------------+

6 rows in set (0.00 sec)

 

mysql> connect testdb;

Connection id:    12

Current database: testdb

 

mysql> SHOW TABLES;

Empty set (0.02 sec)

 

mysql> create table test (id numeric,fname varchar(20));

Query OK, 0 rows affected (0.10 sec)

 

mysql> SHOW TABLES;

+------------------+

| Tables_in_testdb |

+------------------+

| test             |

+------------------+

1 row in set (0.00 sec)

 

mysql> insert into test values (1,'arvind');

Query OK, 1 row affected (0.08 sec)

 

mysql> commit;

Query OK, 0 rows affected (0.00 sec)

 

mysql> select * from test;

+------+--------+

| id   | fname  |

+------+--------+

|    1 | arvind |

+------+--------+

1 row in set (0.00 sec)

الجدول الذي أنشأناه والبيانات التي حفظناها في جدول الاختبار تظل مستمرة فقط طالما نستخدم نفس الحاوية؛ ستتعرض جميع البيانات للضياع بمجرد إعادة إنشاء أو بناء حاوية جديدة.

يمكنك التحقق من ذلك عن طريق الخروج من الحاوية والعودة للولوج إلى قاعدة البيانات في الحاوية لرؤية ما إذا كانت البيانات موجودة. ستجد أن البيانات لا تزال موجودة في قاعدة البيانات طالما كانت الحاوية تعمل.

3. الاتصال بقاعدة بيانات مدمجة من جهازك المضيف

الاتصال بقاعدة بيانات مُحاوِطة (containerized) من جهازك المضيف يتطلب تعيين port داخلي في المحاور إلى port على جهازك المضيف. عملية التخريج هذه تضمن أن قاعدة البيانات داخل المحاور يمكن الوصول إليها عبر شبكة جهازك المضيف. للـ MySQL، هو Port الافتراضي هو 3306. ب’exposing هذا Port، يمكنك استخدام مجموعة متنوعة من أدوات إدارة قاعدة البيانات أو التطبيقات على جهازك المضيف للتفاعل مع قاعدة بياناتك MySQL.

قبل أن تبدأ، يجب إزالة أي محاور قمت بتشغيلها مسبقًا لهذا الدليل. لوقف وإزالة المحاور، يمكنك:

  • في الطرفية، قم بتنفيذ الأمر docker remove --force my-mysql لإزالة المحاور المسمى my-mysql;
  • أو، في واجهة Docker Dashboard، اختر أيقونة الحذف بجانب محاورك في عرض المحاور.

ثم، يمكنك استخدام واجهة مستخدم Docker Desktop أو واجهة سطر الأوامر لتشغيل المحاور مع Port المُرتبط.

Shell

 

docker run -p 3307:3306 --name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -d mysql:latest

في هذا الأمر، -p 3307:3306 يربط Port 3307 على المضيف إلى Port 3306 داخل المحاور.

4. الحفاظ على بيانات قاعدة البيانات في مجلد (Volume)

الحفاظ على بيانات قاعدة البيانات في مجلد Docker هو أمر ضروري لضمان بقاء بياناتك بعد إعادة تشغيل أو إزالة المحاور. يتيح لك مجلد Docker تخزين ملفات قاعدة البيانات خارج الطبقة القابلة للكتابة للمحاور، مما يجعل من الممكن ترقية المحاور، التبديل بين القواعد، ومشاركة البيانات دون فقدانها. يمكنك توصيل مجلد إلى محاور قاعدة البيانات باستخدام إما واجهة سطر الأوامر لـ Docker أو واجهة مستخدم Docker Desktop.

ملاحظة: مرة أخرى، كما فعلت في القسم السابق المتعلق بالاتصال بقاعدة بيانات معتمدة على الحاويات، قبل أن تبدأ، يجب عليك إزالة أي حاويات قمت بتشغيلها مسبقًا لهذا الدليل.

ثم، يمكنك استخدام واجهة مستخدم Docker Desktop أو سطر الأوامر لتشغيل الحاوية مع وحدة التخزين.

لتشغيل حاوية قاعدة بياناتك مع وحدة تخزين متصلة، شمل الخيار —v مع أمر docker run الخاص بك. يحدد هذا اسم وحدة التخزين و المسار حيث ت�� قاعدة البيانات بياناتها داخل الحاوية. إذا لم تكن وحدة التخزين موجودة، يقوم Docker بإنشائها آليًا لك.

لتشغيل حاوية قاعدة بيانات مع وحدة تخزين متصلة، تأكد من أن البيانات تظل قائمة. قم بتشغيل الحاوية وتوصيل وحدة التخزين.

Shell

docker run –name my-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydb -v my-db-volume:/var/lib/mysql -d mysql:latest

هذا الأمر يربط وحدة التخزين المسمى my-db-volume إلى الدليل /var/lib/mysql في الحاوية.

قم بإنشاء بعض البيانات في قاعدة البيانات. استخدم أمر docker exec لتشغيل MySQL داخل الحاوية وإنشاء جدول.

Shell

docker exec my-mysql mysql -u root -pmy-secret-pw -e "CREATE TABLE IF NOT EXISTS mydb.mytable (column_name VARCHAR(255)); INSERT INTO mydb.mytable (column_name) VALUES ('value');"

 

يستخدم هذا الأمر أداة MySQL في الحاوية لإنشاء جدول يسمى mytable يحتوي على عمود يسمى column_name، وأخيرًا، يقوم بInsert قيمة.

أوقف وإزيل الحاوية. بدون وحدة تخزين، سيتم فقد الجدول الذي أنشأته عند إزالة الحاوية.

Shell

docker remove --force my-mysql

أبدأ حاوية جديدة مع وحدة التخزين متصلة. هذه المرة، لا تحتاج إلى تحديد أي متغيرات بيئية حيث يتم حفظ التكوين في وحدة التخزين.

Shell

docker run --name my-mysql -v my-db-volume:/var/lib/mysql -d mysql:latest

تأكد من أن الجدول الذي أنشأته لا يزال موجودًا. ثم استخدم أمر docker exec مرة أخرى لتشغيل MySQL داخل الحاوية.

Shell

docker exec my-mysql mysql -u root -pmy-secret-pw -e "SELECT * FROM mydb.mytable;"

 

هذا الأمر يستخدم أداة MySQL في الحاوية لاختيار جميع السجلات من الجدول table. يجب أن ترى ناتجاً مثل ما يلي. 

SQL

 

column_name

value

5. تنظيف صورة حاوية MySQL

لحذف حاوية، استخدم الأمر docker remove مع أسماء أو معرفات الحاويات مفصولة بفراغات. على سبيل المثال:

Shell

 

docker remove --force 90b8831a4b8
docker remove --force 36252896d6ff
docker remove --force d86dff3809e8

الخاتمة

في النهاية، تشغيل MySQL مع Docker يقدم حلاً محمولاً وقابلاً للتمديد وفعالاً لإدارة قواعد البيانات. تساعد حاويات Docker المعزولة في تبسيط التوزيع، تقليل مشاكل التوافق، وتحسين استخدام الموارد. بفضل السماح بالتحكم السهل في الإصدارات وإعادة ضبط البيئات، يدعم Docker التطوير والاختبار السريعين. إنه مثالي لإدارة قواعد بيانات MySQL في الخدمات الصغيرة، مما يجعلها أسهل في التوزيع والتمديد مع الحفاظ على أداء قوي.

Source:
https://dzone.com/articles/guide-for-running-mysql-database-in-docker-container