تخصيص صورة Docker لتشغيل تطبيق الويب الخاص بك
تعد خدمة Docker Hub مصدراً ممتازاً للصور لمساعدتك في بدء إنشاء تطبيقاتك الخاصة التي تتم تعبئتها في حاويات. يمكنك تنزيل صورة توفر لك الوظيفة الأساسية التي تحتاجها. ثم حدد طبقة لتطبيقك الخاص في الجزء العلوي منه لإنشاء صورة مخصصة جديدة. يمكنك أتمتة الخطوات اللازمة لتنفيذ هذه العملية عن طريق كتابة Dockerfile.
في سيناريو متجر الملابس عبر الإنترنت، قررت الشركة أن Docker هي الخدمة الملائمة للمضي قدماً إلى الأمام. الخطوة التالية هي تحديد أفضل طريقة لتعبئة تطبيقات الويب في حاويات. تخطط الشركة إلى بناء عدة تطبيقات باستخدام ASP.NET Core. لاحظت أن Docker Hub يحتوي على صورة أساسية تتضمن إطار العمل هذا. وإثباتاً للمفهوم، تحتاج إلى البدء بهذه الصورة الأساسية وإضافة رمز لأحد تطبيقات الويب لإنشاء صورة مخصصة جديدة. ترغب أيضاً في أن تتكرر هذه العملية بسهولة، بحيث يمكن تشغيلها تلقائياً كلما طُرِح إصدار جديد من تطبيق الويب.
في هذه الوحدة، ستتعلم كيفية إنشاء صورة Docker مخصصة، وكيف يمكنك أتمتة العملية من خلال كتابة Dockerfile.
إنشاء صورة مخصصة باستخدام Dockerfile
لإنشاء صورة Docker تحتوي على تطبيقك، ستبدأ عادةً بتحديد صورة أساسية تضيف إليها تكويناً وملفات إضافية. تبدأ عملية تحديد صورة أساسية مناسبة عادة بالبحث عن الصور على Docker Hub. تحتاج إلى صورة تحتوي بالفعل على إطار عمل للتطبيق وجميع الأدوات المساعدة والأدوات لتوزيع Linux، مثل Ubuntu أو Alpine. على سبيل المثال، إذا كان لديك تطبيق ASP.NET Core تريد تحزيمه في حاوية، فستنشر Microsoft صورة تسمى mcr.microsoft.com/dotnet/core/aspnet تحتوي بالفعل على وقت تشغيل ASP.NET Core.
يمكن تخصيص صورة عن طريق بدء تشغيل حاوية بالصورة الأساسية وإجراء تغييرات عليها. تتضمن التغييرات عادةً أنشطة مثل نسخ الملفات إلى الحاوية من نظام الملفات المحلي، وتشغيل الأدوات الخاصة والأدوات المساعدة المتنوعة لتحويل التعليمات البرمجية برمجياً. عند الانتهاء، استخدام أمر docker commit لحفظ التغييرات على صورة جديدة.
تستغرق إكمال العملية المذكورة أعلاه يدوياً وقتاً طويلاً وتكون عرضة للخطأ. فيمكن برمجتها نصياً بلغة برنامج نصي مثل Bash، لكن Docker توفر وسيلة أكثر فعالية لأتمتة إنشاء الصور عبر Dockerfile.
Dockerfile هو ملف نص عادي يحتوي على جميع الأوامر المطلوبة لإنشاء صورة. تتم كتابة ملفات dockerfiles بلغة برمجة نصية بسيطة مصممة لبناء الصور وتكوينها. كما أنها توثق العمليات المطلوبة لبناء صورة بالبدء بصورة أساسية.
يوضح المثال التالي ملف Dockerfile ينشئ تطبيق .NET Core 2.2 وتحزيمه في صورة جديدة.
FROM mcr.microsoft.com/dotnet/core/sdk:2.2
WORKDIR /app
COPY myapp_code .
RUN dotnet build -c Release -o /rel
EXPOSE 80
WORKDIR /rel
ENTRYPOINT ["dotnet", "myapp.dll"]
في هذا الملف تحدث العمليات التالية:
| الأمر | إجراء |
|---|---|
| من | يقوم بتنزيل الصورة المحددة وإنشاء حاوية جديدة بناءً على هذه الصورة. |
| العمل WORKDIR | يظبط دليل العمل الحالي في الحاوية، المستخدمة من قبل الأوامر اللاحقة. |
| نسخ | ينسخ الملفات من الكمبيوتر المضيف إلى الحاوية. الوسيطة الأولى (myapp_code) هي ملف أو مجلد على الكمبيوتر المضيف. تحدد الوسيطة الثانية (.) اسم الملف أو المجلد ليكون بمثابة الوجهة في الحاوية. في هذه الحالة، تكون الوجهة هي الدليل المشغَّل الحالي (/app). |
| تشغيل | تنفيذ أمر في الحاوية. تكون الوسيطات إلى أمر «RUN» هي أوامر سطر الأوامر. |
| عرض | إنشاء تكوين في الصورة الجديدة التي تحدد المنافذ المقرر فتحها عند تشغيل الحاوية. فإذا كانت الحاوية تشغِّل تطبيق ويب، فمن الشائع أن تعرض المنفذ 80. |
| ENTRYPOINT | يحدد العملية التي يجب على الحاوية تشغيلها عند بدء تشغيلها. في هذا المثال، تشغِّل الحاوية التطبيق المنشأ حديثاً. يمكنك تحديد الأمر المطلوب تشغيله وتكون كل وسيطة من وسيطاته صفيف سلسلة. |
وحسب الاصطلاح، عادةً ما تحتوي التطبيقات التي يُفترض تحزيمها كصور Docker على Dockerfile يوجد في جذر التعليمات البرمجية المصدر الخاصة بها، ويكاد يحمل الاسم Dockerfile في كل الأحوال.
يعمل أمر docker buildعلى إنشاء صورة جديدة عن طريق تشغيل Dockerfile. يحتوي بناء هذا الأمر على عدة مقاييس:
- توضح إشارة -f اسم Dockerfile المطلوب استخدامه.
- تحدد إشارة -t اسم الصورة المطلوب إنشاؤها، وفي هذا المثال، myapp:v1.
- توفر المعلمة النهائية، .، سياق الإنشاء للملفات المصدر لأمر COPY: مجموعة الملفات على جهاز الكمبيوتر المضيف المطلوبة أثناء عملية الإنشاء.
docker build -t myapp:v1 .
وخلف الكواليس،docker build ينشئ الأمر حاوية جديدة وتشغيل الأوامر فيها، ثم تثبيت التغييرات في صورة جديدة.
هل تحتاج إلى مساعدة؟ راجع دليل استكشاف الأخطاء وإصلاحها الذي نقدمه أو يمكنك توفير ملاحظات معينة عبر الإبلاغ عن مشكلة.