‫حسنا. تبدو الأحجام بسيطة جدًا مقدمًا ، ولكن في الواقع هناك الكثير منها.
‫الطريقة الأولى التي يمكنك من خلالها إخبار حاوية أنها بحاجة إلى القلق بشأن وحدة تخزين هي في Dockerfile.
‫دعنا نذهب للتحقق من بعض هؤلاء.
‫سأفعل ما أفعله كثيرًا.
‫سأبحث عن MySQL.
‫هذه هي الطريقة التي تعلمت بها الكثير عن Dockerfiles ، وكيفية استخدامها بشكل صحيح ، هي أن المستودعات الرسمية
‫لديها بالفعل قيم افتراضية سليمة وأفضل الممارسات المضمنة فيها.
‫عندما أذهب هنا إلى MySQL One ، سأضغط على أحدث ملف Dockerfile هنا. أراهن أنك لأنها قاعدة بيانات ، فمن
‫المحتمل أنها تحتوي على أمر وحدة تخزين فيها.
‫هناك نذهب.
‫هذا هو الموقع الافتراضي لقواعد بيانات MySQL. تمت برمجة هذه الصورة بطريقة تخبر Docker أنه
‫عندما نبدأ حاوية جديدة منها ، فإننا نقوم بالفعل بإنشاء موقع وحدة تخزين جديد
‫وتعيينه إلى هذا الدليل في الحاوية. مما يعني أن أي ملفات نضعها هناك ، في الحاوية ، ستظل
‫أطول من الحاوية حتى نحذف المجلد يدويًا.
‫وهذا شيء يجب أن نشير إليه هنا هو أن المجلدات تحتاج إلى حذف يدوي.
‫لا يمكنك تنظيفها بمجرد إزالة وعاء.
‫إنها خطوة إضافية. هذا فقط للتأمين حقًا ، لأن الهدف الكامل لأمر
‫الحجم هو القول بأن هذه البيانات مهمة بشكل خاص ، على الأقل أكثر أهمية من الحاوية نفسها.
‫إذا قمنا بسحب عامل الإرساء على MySQL ، ثم
‫قمت بفحص صورة عامل الإرساء على MySQL ، فلن نتمكن من رؤية Dockerfile لأن ملف Docker ليس في الواقع
‫جزءًا من البيانات الوصفية للصورة ، والتي ستلاحظها في هذا التكوين ، أنه حدد هذا الحجم
‫هناك.
‫يمكنني دائمًا أن أقول إن التكوين ، الذي جاء من Dockerfile عندما تم إنشاؤه ، خصص وحدة تخزين لهذا
‫المسار.
‫لنقم بتشغيل حاوية منه.
‫لذا تشغيل حاوية عامل ميناء -d --name mysql.
‫إذا كنت تتذكر من قبل ، فإن MySQL واحد مميز قليلاً.
‫يتطلب الآن متغير بيئة
‫قبل أن يعمل.
‫إنها MYSQL_ALLOW_EMPTY_PASSWORD.
‫نعم.
‫ما تراه هو تشغيل MySQL. إذا قمنا بفحص حاوية عامل الإرساء
‫mysql ، فسنرى نفس الشيء حيث يخبرنا في التكوين أن هناك مجلدًا.
‫هنا.
‫يمكننا أيضًا رؤيته هنا في الأعلى. ما هذا ، هو أن هذه الحاوية قيد التشغيل تحصل فعليًا على موقع
‫فريد خاص بها على المضيف ، لتخزين تلك البيانات ، ثم تكون في الخلفية ، أو تم تعيينها أو تثبيتها ، في ذلك الموقع في الحاوية
‫، بحيث يكون الموقع في الحاوية في الواقع فقط يعتقد أنها تكتب
‫إلى / var / lib / mysql.
‫في هذه الحالة ، يمكننا أن نرى أن البيانات تعيش بالفعل في ذلك الموقع على المضيف. لنقم بعمل حجم عامل الإرساء ls
‫، ويمكننا أن نرى أن لدينا
‫الآن مجلدًا واحدًا. الآن نلاحظ أن هذا يحتوي على هذا المعرف الفريد الذي لن نعرف أبدًا
‫ما الذي ينتقل إليه ، أليس كذلك؟
‫لذا ، دعونا نفحص ذلك.
‫ليس عليك كتابة كل شيء.
‫يمكنك فقط كتابة أول حرفين والضغط على Tab لإكمالها. ستحصل على هذه المعلومات المماثلة
‫حول المجلد نفسه.
‫إذا كنت تقوم بذلك بالفعل على جهاز Linux ، فيمكنك الانتقال إلى هذا الموقع على محرك الأقراص الثابتة
‫ومشاهدة البيانات.
‫سيكون هناك بالفعل بعض قواعد البيانات هناك.
‫إذا كنت تستخدم جهاز Mac أو Windows ، فتذكر أن Docker for Windows و Docker for
‫Mac يعملان في الواقع قليلاً في الخلفية المخفية عنا حيث يتم إنشاء Linux VM.
‫إذن هذه البيانات تقنيًا موجودة داخل جهاز Linux VM. لن تكون قادرًا على الذهاب إلى هذا المسار على جهاز Windows
‫أو Mac الخاص بك ورؤية البيانات. إنه في الواقع داخل ذلك الجهاز الظاهري.
‫سنرى بعد قليل ، مع الأحجام المركبة ، كيف يمكننا تجاوز هذا القيد أيضًا.
‫من خلال النظر إلى هذا ، تلاحظ أنه ليس سهل الاستخدام للغاية من حيث إخبارنا بما
‫يحتويه أو ما تم تخصيص هذا المجلد له.
‫يمكننا أن نرى من منظور الحاوية الحجم الذي تستخدمه ، لكن لا يمكننا أن نرى من منظور
‫الحجم ما يتصل به.
‫حق؟
‫إذا كنت سأقوم فقط بضرب السهم لأعلى ، ودعنا نرى ، إنشاء mysql2.
‫لقد تم الآن إنشاء خادم MySQL آخر يعمل في الخلفية.
‫إذا قمت بعمل وحدة تخزين أخرى لرسو السفن ، فسترى اثنين منهم.
‫تبدأ في رؤية المشكلة ، أليس كذلك؟
‫لا توجد طريقة سهلة حقيقية هنا لتمييز أحدهما عن الآخر.
‫إذا كنا فقط ، لإثبات نقطة ، فقم بإيقاف mysql في حاوية عامل الميناء ، و docker ، توقف الحاوية
‫mysql2.
‫نحن نقوم بعمل حاوية لرسو السفن ، ولن نرى أي حاويات قيد التشغيل. إذا قمنا بإجراء ls -a ، فسوف
‫نراهم جميعًا. ولاحظوا أنهم توقفوا. ثم نقوم بعمل حجم عامل الإرساء ls ، ستلاحظ
‫أنه لا يزال لدينا المجلدين.
‫إذا قمت بعمل حاوية عامل إرساء rm mysql ، ثم mysql2 ، لأنني أستطيع فعلاً فعل هذين الأمرين في أمر واحد ، فسيؤدي
‫ذلك إلى إزالة كلتا الحاويات الخاصة بي. إذا قمت الآن بعمل وحدة تخزين لوحدة الإرساء ، فإن مجلداتي
‫لا تزال موجودة. بياناتي لا تزال آمنة.
‫إذن ، لقد حللنا مشكلة واحدة.
‫قواعد البيانات أطول من الملف القابل للتنفيذ.
‫كيف نجعل هذا أكثر سهولة في الاستخدام؟
‫هذا هو المكان الذي تأتي فيه المجلدات المسماة والقدرة على تحديد الأشياء في أمر
‫Docker run.
‫إذا قمت بضرب السهم لأعلى عدة مرات حتى أصل إلى تشغيل حاوية عامل الإرساء ، فلا يهم حقًا أي واحد ستقوم
‫بتشغيله مرة أخرى.
‫في هذه الحالة ، سنقوم في الواقع بإلقاء الأمر a -v. يسمح لنا A -v بتحديد إما وحدة تخزين جديدة
‫نريد إنشاؤها لهذه الحاوية التي على وشك التشغيل ، أو تتيح لنا خيارين آخرين.
‫واحد منهم هنا هو إنشاء مجلد مسمى.
‫إذا قمت للتو بـ -v ، ثم var lib mysql ، فسيؤدي ذلك إلى نفس الشيء الذي فعله أمر
‫المجلد في Dockerfile.
‫لا نحتاج حقًا إلى القيام بذلك هنا. ولكن ما يمكننا فعله هو أنه يمكنني وضع اسم
‫أمامه بنقطتين. يُعرف هذا باسم "المجلد المسمى. "عندما أفعل ذلك
‫، ثم أقوم بعمل وحدة تخزين لوحدة الإرساء ls ، سترى أن الحاوية الجديدة الخاصة بي تستخدم وحدة تخزين جديدة وتستخدم اسمًا
‫مألوفًا.
‫إذا قمنا بفحص حجم عامل الإرساء في ملف mysql هذا ، فسترى أن هذا أسهل في الاستخدام هنا.
‫إذا قمت بحذف الحاوية الخاصة بي مرة أخرى ، وكان علينا وضع a -f
‫لأنها لا تزال قيد التشغيل ، ثم أقوم بتشغيل حاوية أخرى. وهذه المرة ، سأطلق عليها
‫اسمًا مختلفًا. ثم نقوم بعمل وحدة تخزين أخرى لرسو السفن ، سترى
‫أنه يبدو أننا لم ننشئ وحدة تخزين جديدة. لا يزال يستخدم نفس الحجم.
‫لنقم بفحص حاوية عامل ميناء في mysql3. ثم ما سنراه هنا هو ، نعم ، هذا ما تم تكوينه
‫ولكن ما الذي نقوم بتشغيله؟
‫هذه هي حواملنا هنا.
‫سنرى هنا أن الاسم ليس أكثر ودية فحسب ، ولكنه في الواقع غير موقع المصدر ليكون
‫أكثر ودية أيضًا.
‫بالنسبة لي ، نصيحة صغيرة هنا هي أنه عندما أعمل لأيام أو أسابيع في كل مرة ، قاعدة بيانات معينة ، في حاوية
‫معينة أحتاج إلى الاستمرار في استخدامها مرارًا وتكرارًا ولا أريد
‫خادم قاعدة بيانات فارغًا ، سأنتهي في إنشاء حاوياتي بهذه الطريقة وتسميتها للمشروع حتى أعرف ما هو هذا
‫المجلد ، وأنه يجب أن
‫يظل موجودًا.
‫آخر شيء هنا.
‫لماذا تريد إنشاء وحدة تخزين عامل الإرساء؟
‫إذا تمكنا من إنشائها من أمر تشغيل حاوية عامل الإرساء في وقت التشغيل ، ويمكننا إنشاؤها عن طريق تحديدها في Dockerfile ، فهناك فقط
‫حالات قليلة ترغب في إنشائها فيها مسبقًا. ويمكنك بالفعل معرفة ذلك بسرعة
‫كبيرة باستخدام أمر المساعدة.
‫لأن هذه هي الطريقة الوحيدة التي يمكننا بها تحديد محرك مختلف.
‫هل تتذكر أشياء المكونات الإضافية التي سأتحدث عنها لاحقًا؟
‫ثم أي خيارات سائق نريد استخدام -o on.
‫ثم إذا أردنا وضع ملصقات عليها ، والتي سنتحدث عنها أيضًا لاحقًا في قسم الإنتاج.
‫في بعض الأحيان ، في حالات خاصة ، تحتاج إلى إنشاء وحدة تخزين Docker مسبقًا ، ولكن عادةً لأغراض
‫التطوير المحلي ، لا بأس من تحديده في Dockerfile أو في أمر التشغيل.