متوفر أيضًا بلغات أخرى: English · Español · Português · Français
ملف dockerignore.: مولّد وفاحص للمسارات
اكتب ملف dockerignore.، وافحص أي مسار في ضوئه، وانظر جنبًا إلى جنب ما كان جِت ليفعله بالملف نفسه حرفًا بحرف.
ما ملف dockerignore.؟
يقع ملف dockerignore. إلى جوار ملف Dockerfile ويُعدّد ما لا ينبغي إرساله إلى الباني. فسياق البناء كله يُحزَم ويُسلَّم قبل تنفيذ أول تعليمة، ومن ثمّ فمجلد node_modules منسيّ أو مجلد git. يكلّفك وقت رفع في كل بناء، وينتهي داخل الصورة إن نسخه شيء، ويكسر خبيئة الطبقات في صمت، لأن السياق يتغيّر كلما تغيّرت تلك الملفات.
وهو يشبه ملف gitignore. شبهًا تامًّا: نمط في كل سطر، وعلامة مربّع للتعليقات، وعلامة تعجّب للاستثناءات. وهنا مكمن العلّة. فالملفان تعالجهما شيفرتان مختلفتان تمام الاختلاف، والأسطر نفسها قد تعطي إجابتين متضادتين. ولا شيء ينبّهك، لأن كلا الملفين صحيح في الموضعين.
تشغّل هذه الصفحة المحرّكين معًا. اكتب ملفك، وسمِّ مسارًا، فترى ما يقرّره مقارِن دوكر، وما تقرّره قواعد جِت، وأي سطر كان المسؤول في كل حالة، ثم — وهو ما يفسّر الأمر كله — أي مسار طابقه كلٌّ منهما فعلًا.
طريقة الاستعمال
- الصق الملف أو اكتبه. يظهر أدناه كل سطر بالصورة التي يؤول إليها بعد التنقية، وكيف سيُقارَن: نصًّا مطابقًا أو بادئةً أو لاحقةً أو نمطًا. وتحمّل أزرار الأمثلة الحالات الأربع التي يختلف فيها الملفان، وحالةً خامسة يتفقان فيها.
- سمِّ مسارًا. منسوبًا إلى سياق البناء وبالشرطات المائلة العادية. وعلّم المربّع إن كان مجلدًا، فهذا لا يعني إلا قواعد جِت، والأداة تبيّن السبب.
- اقرأ الحكمين. تسمّي كل لوحة السطر الذي حسم الأمر والمسار الذي طابقه. وحين يختلفان فذلك فرق حقيقي في السلوك لا نزوة في العرض.
الفروق الأربعة التي توقع الجميع
أولها لا يتوقعه أحد، وبطارية اختبارات دوكر نفسها تثبته. استبعِد كل شيء بنجمتين، ثم أعِد إدراج مجلد بعلامة تعجّب، فإذا بملفٍ داخل ذلك المجلد يُرسَل إلى الباني. وأعطِ جِت السطرين نفسيهما فيبقى الملف متجاهَلًا، لأن جِت يمشي في المسار من أعلاه إلى أسفله ولا ينظر قطّ داخل مجلد سبق أن استبعده. أما مقارِن دوكر فيواصل تقييم الأنماط بعد مطابقة أحد الأصول، فيظلّ الاستثناء اللاحق ساريًا. سطران متطابقان ونتيجتان متضادتان.
وثانيها أكثرها كلفةً في زمن البناء. فالنمط الخالي من رموز البدل يُقارَن بالمسار مقارنة تطابق نصّي، ثم بكل مجلد فوقه واحدًا واحدًا، ولا شيء غير ذلك. فسطرٌ فيه node_modules يستبعد الذي في جذر سياقك وحده لا غير، أما النسخة المتداخلة داخل حزمة فتُحزَم وتُرسَل في كل بناء. وفي ملف gitignore. يطابق السطر نفسه على أي عمق، وهذا بعينه سبب أن الملف يبدو عاملًا. ضَع أمامه نجمتين وشرطة مائلة يبلغ دوكر المتداخلة أيضًا.
وثالثها حرف يتبخّر. فكل نمط يمرّ بدالة تنقية المسارات في لغة جو قبل استعماله، وهي تمحو الشرطة المائلة الأخيرة. فالسطر المنتهي بشرطة لا يقتصر هنا على المجلدات، بل هو النمط نفسه دونها، وسيطابق ملفًا بذلك الاسم راضيًا. أما في جِت فالشرطة الأخيرة هي بالضبط ما يقصر النمط على المجلدات.
ورابعها حرف لا يعني شيئًا. فالشرطة المائلة الأولى تُحذف عند قراءة الملف، وتعليقات شيفرة دوكر نفسها تقول إن الكتابتين سواء. وفي جِت تُرسي الشرطة الأولى النمط في المجلد الذي يقع فيه الملف، وإسقاطها هو ما يجعله يطابق على أي عمق. الحرف نفسه: حاسم في جانب، خامل في الآخر.
حدود مُعلَنة
هذه مقارنة لا بناء. تخبرك الأداة أيُرسَل المسار إلى الباني أم لا؛ ولا تعرف أموجود هو أصلًا، ولا كم يزن سياقك حقًّا، ولا ما يصنعه ملف Dockerfile بشيء من ذلك. وملف Dockerfile وملف dockerignore. نفسه يُرسَلان دائمًا مهما قالت الأنماط، لأن الباني يحتاج إليهما.
وتُعامَل المسارات على أنها مفصولة بشرطات مائلة عادية، وهو ما يعمل به الباني على لينكس. والسلوك المستنسخ هنا سلوك مقارِن دوكر نفسه، ويحسن قول ذلك صراحةً: لا مواصفة لهذه الصيغة أصلًا. المقارِن هو التعريف، والتوثيق لا يكاد يصفه: إذ تذكر الوثائق دالةً من مكتبة جو القياسية لا رمز بدل تكراري في قواعد أنماطها البتّة، بينما التطبيق يترجم كل نمط إلى تعبير نمطي ويقبل واحدًا. وثلاثة وعشرون من حالات اختبار التطبيق المرجعي نفسه تقوم على هذا السلوك.
وثمّة قاعدة تبدو فرقًا وليست كذلك. يمرّر دوكر الأقواس المعقوفة كما هي إلى تعبير نمطي، فتُنفى فئة الحروف بعلامة الإقحام بدل علامة التعجّب التي يستعملها نمط الصدفة؛ غير أن جِت يقبل الإقحام هو الآخر، فتتصرّف الكتابتان تصرفًا واحدًا في الجانبين. وذُكر هذا لأنه الافتراض البديهي، ولأن الأخذ به خطأ.
وأخيرًا لا يُعدّ التعليق تعليقًا إلا إذا كانت علامة المربّع أول حرف في السطر على الإطلاق. أزِحها بمسافة واحدة فتكفّ عن كونها تعليقًا وتصير نمطًا يطابق ملفًا بذلك الاسم. وهذا الترتيب مأخوذ مباشرةً من التطبيق المرجعي، الذي يبحث عن علامة المربّع قبل أن يقتطع المسافات.
لماذا هي مجانية؟
مقارنة مسار بقائمة أنماط بضع مئات من أسطر معالجة النصوص، ويجريها متصفحك وأنت تكتب. ولا خادم يرى ملفك، فلا شيء يُحسب عليك ولا حساب تنشئه.
ولا يُرفع شيء. وما تلصقه يبقى في هذا التبويب.