تخصيص صورة 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"]

في هذا الملف تحدث العمليات التالية:

الأمر الإجراء
FROM يقوم بتنزيل الصورة المحددة وإنشاء حاوية جديدة بناءً على هذه الصورة.
العمل WORKDIR يظبط دليل العمل الحالي في الحاوية، المستخدمة من قبل الأوامر اللاحقة.
COPY ينسخ الملفات من الكمبيوتر المضيف إلى الحاوية. الوسيطة الأولى (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 ينشئ الأمر حاوية جديدة وتشغيل الأوامر فيها، ثم تثبيت التغييرات في صورة جديدة.