تكنولوجيا

فهم سياق بناء Docker (لماذا استخدم Dockerignore) – CloudSavvy IT

يشير سياق بناء Docker إلى الملفات والأدلة المتوفرة لمحرك Docker أثناء التشغيل docker construct.لن يتمكن الأمر الخاص بك من الوصول إلى أي شيء غير مدرج في سياق البناء Dockerfile.

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

ما هو سياق البناء؟

هذا بسيط docker make أمر:

docker make . -t my-picture:newest

هذا سوف يستخدم Dockerfile وجدت في دليل العمل الخاص بك.سيتم وضع علامة على الصورة الناتجة كـ my-picture:most recent، على الرغم من أن هذه التفاصيل ليست مهمة لهذا البرنامج التعليمي.

فيك Dockerfile، قد تستخدم Duplicate أضف الملفات والمجلدات إلى الصورة:

FROM httpd:latest

Copy index.html /usr/community/apache2/htdocs/index.html
Copy css/ /usr/area/apache2/htdocs/css/

هذا المثال يكرر index.html الملفات و css دليل في الحاوية الخاصة بك.للوهلة الأولى ، يبدو Duplicate يشير البيان فقط إلى مسار تم حله بالنسبة إلى دليل العمل الخاص بك.

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

لماذا استخدام سياق البناء؟

يعد سياق الإنشاء مهمًا جدًا لأن Docker CLI و Docker Engine قد لا يعملان على نفس الجهاز.عندما تركض docker make، يرسل CLI الملفات والمجلدات التي سيتم بناؤها إلى محرك Docker. تصبح هذه المجموعة من الملفات والمجلدات هي سياق البناء.

بالإضافة إلى ذلك ، ليس كل سياق بناء بسيطًا مثل إعادة استخدام دليل العمل. يدعم Docker أيضًا عنوان URL لمستودع Git كمسار محدد docker make. في هذه الحالة ، سيصبح سياق البناء هو محتوى المستودع المحدد.

بالنسبة للعديد من المستودعات الصغيرة ، يكون سلوك “تضمين الكل” الافتراضي لسياق الإنشاء مناسبًا.بمجرد إضافة الملفات غير المستخدمة إلى دليل العمل ، تصبح المشكلة واضحة Dockerfile. حتى لو كانت زائدة عن الحاجة ، سيتم تضمين الموارد مثل الثنائيات المجمعة مسبقًا وملفات التوثيق والمكتبات التابعة في سياق الإنشاء.

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

يحاول Docker تقليل التكرار الزائد عن الحاجة. تضيف الواجهة الخلفية BuildKit المستخدمة منذ Docker 18.09 دعمًا لعمليات النقل الإضافية. هذا يعني أن Docker يحتاج عادةً فقط إلى نسخ الملفات التي تمت إضافتها أو تغييرها منذ الإصدار الأخير. سيستمر نسخ المحتوى بالكامل في الإصدار الأول.

استبعاد الموارد من سياق البناء

من أجل حل مشكلة النسخ المهدر تمامًا ، يجب أن تخبر Docker بما يمكنه تجاهله من سياق الإنشاء.لنبدأ في إنشاء واحدة Dockerfile:

FROM node:latest
WORKDIR /my-application
Duplicate bundle.json package deal.json
Duplicate package deal-lock.json offer-lock.json
Duplicate src/ .
Operate npm install

هذا بسيط Dockerfile يمكن استخدامها بواسطة التطبيقات المكتوبة في Node.js. استخدام برنامج Node.js npm كمدير للحزم الخاصة بهم.تم تثبيت الحزمة على node_modules مجلد.عندما تركض npm put in محليًا ، أثناء عملية التطوير ، سيتم تنزيل حزمة البرامج إلى node_modules مجلد في دليل العمل.

هذه Dockerfile يجري npm set up احصل على التبعيات من تلقاء نفسها. هذا يضمن أن الصورة مستقلة تمامًا.لا حاجة للنسخ محلي node_modules المجلد لأنه لا يتم استخدامه Dockerfile.

ومع ذلك ، سيظل Docker يشمل ملفات node_modules المجلد في سياق البناء الافتراضي.لاستبعاده ، قم بإنشاء ملف .dockerignore يتم وضع الملف في دليل العمل الخاص بك.بناء جملة الملف مشابه لـ .gitignore.

node_modules/

جميع المسارات مدرجة في .dockerignore سيتم استبعاده من سياق البناء.يجب عليك التأكد .dockerignore مواكبة التغييرات التي تم إجراؤها على هيكل نظام ملفات المشروع. يمكنك تقليل وقت نسخ سياق إنشاء Docker بشكل كبير عن طريق التحقق من المسارات ذات الصلة فقط (المسارات التي تستخدمها بالفعل). Dockerfile) موجود في سياق البناء.

في مثالنا ، node_modules إذا كان مشروعنا يحتوي على العديد من التبعيات ، فقد يحتوي المجلد على آلاف الملفات. يمكن أن يستغرق نسخها إلى Docker daemon كجزء من سياق الإنشاء بضع ثوانٍ وهي عملية مضيعة للوقت.هذه Dockerfile تجاهلهم تمامًا ، من خلال الحصول على تبعياتهم الخاصة npm set up في حين أن.

قضايا سياق البناء الأخرى

لا تستخدم .dockerignore يمكن أيضًا تقديم مشاكل أخرى. يعد Dockerfile مع هذا السطر مشكلة بشكل خاص:

Duplicate . /my-application

هذا سوف ينسخ الكل في دليل العمل الخاص بك.حتى تدرك .git سيتم أيضًا حفظ سجلات المحفوظات وجميع الملفات السرية أخيرًا في الحاوية الخاصة بك.

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

سياق البناء المضغوط

يمكنك ضغط سياق البناء لتحسين أداء البناء بشكل أكبر.بواسطة --compress وضع علامة باسم docker establish تطبيق ضغط gzip. يحدث الضغط قبل إرسال السياق إلى Docker daemon.

docker build . -t my-graphic:hottest --compress

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

ختاما

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

بشكل افتراضي ، يتضمن سياق البناء محتويات الدليل أو مستودع Git الذي تم تمريره إليك docker make.يمكنك إنشاء ملف .dockerignore ملف. قم بتحسين الكفاءة عن طريق تقليل كمية البيانات الزائدة التي تم تمريرها إلى Docker daemon.

مقالات ذات صلة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى