العودة إلى المدونة

مشاركة البيانات بين حاويات Docker

مشاركة البيانات بين حاويات Docker

مقدمة

Docker هو منصة حاويات توفر بيئة قياسية خفيفة الوزن، وافتراضية، ومحمولة، ومحددة بالبرمجيات تسمح للبرامج بالعمل بمعزل عن البرامج الأخرى التي تعمل على الجهاز المضيف الفعلي. يعد Docker مكونًا أساسيًا في جانب التطوير والدمج المستمر (Continuous Development and Integration) لتطوير البرمجيات. من خلال توفير بيئة تشغيل متسقة، يضمن Docker أن يعمل البرنامج بنفس الطريقة بغض النظر عن الجهاز المضيف الفعلي الذي تم نشره عليه. للحصول على نظرة شاملة على نظرة عامة على نظام Docker البيئي، راجع هذه المقالة.

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

المتطلبات الأساسية

يرجى ملاحظة أنه على الرغم من أننا نعمل مع Ubuntu 20.04، فإن الإرشادات والأوامر الخاصة بـ Docker ستعمل على أي نظام تشغيل آخر مثبت عليه Docker وتمت إضافة مستخدم sudo إلى مجموعة docker كما هو موضح في المتطلبات الأساسية أعلاه.

الخطوة 1: إنشاء مجلدات Docker مستقلة (Independent Docker Volumes)

سنبدأ بإنشاء مجلدات مستقلة غير مرتبطة بأي حاوية Docker. لتحقيق ذلك، لدينا الأمر docker volume create الذي تم تقديمه في إصدار Docker 1.9. أدخل الأمر التالي لإنشاء مجلد باسم Step1DataVolume :

يجب أن تشاهد المخرجات التالية التي تشير إلى نجاح إنشاء المجلد:

Docker Volume Create

الآن بعد أن أصبح لدينا مجلد مستقل، يمكننا إنشاء حاوية جديدة من صورة Ubuntu الرسمية كمثال للاستفادة منها. أدخل الأمر التالي لإنشاء الحاوية وإرفاق المجلد:

في هذا الأمر، فإن العلامة --rm ستقوم بحذف الحاوية تلقائيًا بعد الخروج. تُستخدم العلامة -v لتحديد المجلد وتركيبه (mount). تأخذ العلامة -v اسم المجلد، ونقطتين رأسيتين، والمسار المطلق داخل الحاوية حيث يجب أن يظهر المجلد. ضع في اعتبارك أنه عند تشغيل الأمر، إذا لم تكن الأدلة المحددة في المسار موجودة، فسيتم إنشاؤها. وإذا كانت موجودة بالفعل، فإن المجلد المركب سيخفي المحتوى الحالي. بالنسبة للعلامة -ti، فإن -t تمنح إمكانية الوصول إلى الطرفية (terminal)، وتسمح لنا -i بالتفاعل مع الحاوية من خلال الطرفية.

أثناء وجودك داخل الحاوية، قم بتشغيل الأمر التالي لكتابة بعض البيانات إلى المجلد:

اكتب exit واضغط على enter للخروج من الحاوية. كما تم توضيحه، يتم حذف الحاوية تلقائيًا عند الخروج، بفضل العلامة --rm، ومع ذلك، سيظل المجلد متاحًا للوصول إليه.

للتحقق من أن المجلد لا يزال موجودًا، يمكنك استخدام docker volume inspect أمر:

يجب أن تشاهد المخرجات التالية:

Docker Volume Inspect

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

Inside the container, run the following command to verify that the StepOne.txt ملف موجود:

يجب أن تشاهد مخرجًا مشابهًا:

Docker Volume Content 1

بعد ذلك، اكتب exit واضغط على enter للخروج من الحاوية. في هذه الخطوة، تعلمت كيفية التعامل مع استمرارية البيانات باستخدام وحدات تخزين Docker مستقلة وكيفية إرفاق وحدات التخزين بالحاويات.

الخطوة 2: إنشاء وحدة تخزين Docker تحتفظ بالبيانات عند حذف حاوية

في هذه الخطوة، سنستخدم أمرًا واحدًا لإنشاء وحدة تخزين في نفس الوقت الذي ننشئ فيه حاوية. سنقوم بعد ذلك بحذف الحاوية وإرفاق وحدة التخزين بحاوية جديدة. الأمر مشابه للأمر المستخدم في الخطوة 1، ومع ذلك، نضيف خيارًا واحدًا --name، لتحديد اسم للحاوية:

أثناء وجودك داخل الحاوية، أدخل الأمر التالي لكتابة البيانات إلى وحدة التخزين والتحقق من وجود البيانات هناك:

فيما يلي مخرجات الأوامر الثلاثة:

Persistent Docker Volume

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

داخل الحاوية، تحقق من تركيب وحدة التخزين عن طريق التحقق من وجود ملف StepTwo.txt باستخدام الأمر:

إليك المخرج:

Docker Volume After Restart

يمكنك الخروج من الحاوية الآن. يمنع Docker إزالة وحدة تخزين تشير إليها حاوية أخرى. يمكنك محاولة إزالة وحدة التخزين باستخدام الأمر:

يجب أن تشاهد رسالة الخطأ في المخرج:

Error Response

دعنا نزيل الحاوية باستخدام معرف الحاوية الموضح في المخرج باستخدام docker rm أمر:

استبدل المظلل container id بـ id الخاص بحاويتك الموضح في الطرفية الخاصة بك. يزيل الأمر الحاوية، لكنه لا يزيل وحدة التخزين التي أنشأناها. يمكنك سرد وحدات التخزين المتاحة باستخدام docker volume ls أمر للتحقق:

إليك المخرج:

Docker Volume List

لإزالة الحاوية التي تم إنشاؤها في الخطوة 2، أدخل الأمر التالي:

في هذه الخطوة، تمكنت من إنشاء وحدة تخزين Docker في نفس وقت إنشاء الحاوية. دعنا نرى كيف يمكننا إنشاء وحدة تخزين من دليل موجود يحتوي على بيانات.

الخطوة 3: إنشاء وحدة تخزين Docker من دليل موجود يحتوي على بيانات

إذا كنت تريد نسخ البيانات إلى وحدة تخزين، يمكنك إنشاء وحدة تخزين أثناء إنشاء حاوية وتقديم المسار إلى دليل يحتوي على البيانات في الصورة الأساسية. في الأمر أدناه، ننشئ حاوية ونضيف وحدة تخزين بيانات في /var، وهو دليل يحتوي على بيانات في الصورة الأساسية:

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

Create Docker Volume

أدخل الأمر التالي لإنشاء الحاوية، وإرفاق وحدة التخزين وسرد محتويات وحدة التخزين باستخدام ls أمر:

يجب أن تشاهد مخرجًا مشابهًا من الأمر، وهو نسخة من محتويات دليل /var من الصورة الأساسية المتاحة الآن في Step3DataVolume:

Copy Docker Volume

بينما قد يكون تركيب /var دليل كما فعلنا في هذا المثال قد يكون غير عملي، إلا أنه يساعدنا على فهم أنه يمكنك تركيب أي دليل تم إنشاؤه في صورك المخصصة في وحدة تخزين Docker لإتاحة البيانات للحاويات الأخرى.

الخطوة 4: مشاركة البيانات بين حاويات Docker المتعددة

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

  • إنشاء Step4Container1 و Step4DataVolume

استخدم docker run مع علامة --name لإنشاء حاوية ذات اسم:

داخل الحاوية، قم بتشغيل الأمر التالي لإنشاء ملف نصي وإضافة بعض النصوص:

بعد ذلك، اخرج من الحاوية وعد إلى بيئة المضيف. الآن، نريد إنشاء حاوية أخرى وتركيب وحدات التخزين من Step4Container1 إليها.

  • إنشاء Step4Container2 وإرفاق وحدات التخزين من الحاوية Step4Container1

نفذ الأمر التالي لإنشاء Step4Container2 وتركيب وحدات التخزين من Step4Container1:

داخل الحاوية، استخدم الأمر cat للتحقق من استمرار البيانات:

يجب أن تشاهد المخرجات التالية:

Container Data Sharing

يمكننا إلحاق المزيد من النص بالملف من Step4Container2 عن طريق إدخال الأمر التالي:

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

  • التحقق من التغييرات التي تم إجراؤها في وحدة تخزين Docker بين الحاويات المختلفة

لعرض التغييرات، ستقوم أولاً بإعادة تشغيل Step4Container1 باستخدام الأمر:

تحقق من التغييرات باستخدام الأمر:

يجب أن تشاهد مخرجات مشابهة للقطة الشاشة أدناه:

Copied Container Data

بمجرد التحقق من أن كلا الحاويتين يمكنهما قراءة البيانات وكتابتها في نفس وحدة التخزين، يمكنك الآن الخروج من الحاوية. كما ذكرنا، لا يتعامل Docker مع قفل الملفات، بل إنها مهمة منطق تطبيقك الذي يعمل داخل الحاويات والذي يجب أن يتعامل مع وصول القراءة والكتابة إلى مخازن البيانات المشتركة. يسمح Docker بتركيب وحدات التخزين كقراءة فقط لمنع تلف البيانات العرضي بواسطة الحاويات التي تتطلب فقط وصول القراءة فقط عن طريق إضافة :ro كما هو موضح في المثال التالي.

  • تركيب وحدة تخزين في حاوية Docker كقراءة فقط

لهذا المثال، سنقوم بإنشاء حاوية باسم Step4Container3. في أمر الإنشاء، نقوم بتركيب وحدات التخزين من Step4Container1 ونضيف :ro لتحديد أن هذه الحاوية لديها صلاحية القراءة فقط ولكن لا يمكنها الكتابة في وحدة التخزين. نفذ الأمر التالي في جهازك الطرفي:

بمجرد دخولك إلى الحاوية، يمكنك قراءة الملف النصي في وحدة التخزين عن طريق إدخال الأمر التالي:

Read Only Mount

ومع ذلك، إذا حاولت إزالة الملف باستخدام الأمر:

ستتلقى رسالة خطأ في الطرفية الخاصة بك مثل:

Read Only Error

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

في هذه الخطوة، تعلمت كيفية مشاركة البيانات بين حاويات متعددة باستخدام وحدات تخزين Docker بالإضافة إلى ربط وحدات تخزين البيانات بالحاويات كملفات للقراءة فقط.

الخاتمة

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

لمزيد من الموارد حول استخدام Docker، قد ترغب في الاطلاع على المزيد من الدروس التعليمية على مدونتنا:

حوسبة سعيدة!

author

Pranay Kapgate

المؤلف · CloudSigma

Preslav Dobrev هو مصمم إبداعي في CloudSigma، يركز على هوية أعمال متسقة باستخدام قنوات التسويق التقليدية والمبتكرة. هو بارع في دمج الرؤية الفنية مع التسويق الاستراتيجي لخلق سرد قصصي مؤثر للعلامة التجارية.

التعليقات

لا توجد تعليقات بعد. كن أول من يعلق.