تمرين - تخصيص صورة Docker لتشغيل تطبيق الويب الخاص بك
يحتوي ملف Dockerfile على الخطوات اللازمة لإنشاء صورة Docker مخصصة.
يمكنك الآن أن تقرر توزيع أحد تطبيقات المؤسسة على الويب باستخدام Docker. يمكنك تحديد تطبيق ويب بسيط يطبق واجهة برمجة تطبيقات على الويب لموقع حجوزات فنادق على الويب. تعرض واجهة برمجة التطبيقات على الويب عمليات HTTP POST وGET التي تنشئ حجوزات العميل وتستردها.
ملاحظة
في هذا الإصدار من تطبيق الويب، لا يتم الاحتفاظ بالحجوزات فعلياً، وتُرجِع الاستعلامات بيانات وهمية.
في هذا التمرين، ستقوم بإنشاء ملف Dockerfile لتطبيق لا يحتوي على هذا الملف. ثم، ستقوم بإنشاء الصورة وتشغيلها محلياً.
إنشاء ملف Dockerfile لتطبيق الويب
في نافذة موجه الأوامر على جهاز الكمبيوتر المحلي، قم بتشغيل الأمر التالي لتنزيل التعليمات البرمجية المصدر لتطبيق الويب.
git clone https://github.com/MicrosoftDocs/mslearn-hotel-reservation-system.gitأدخل الأمر التالي لفتح
srcالدليل.cd mslearn-hotel-reservation-system/srcفي
srcالدليل، أدخل الأوامر التالية لإنشاء ملف جديد باسمDockerfileوفتحه في المفكرة.copy NUL Dockerfile notepad Dockerfileملاحظة
يفتح الأمر ملفا نصيا في المفكرة، تلقائيًا. تأكد من حفظه كملف كافة الملفات بدون ملحق ملف. للتحقق من ذلك، افتح المجلد src في مستكشف الملفات، وحدد عرض > إظهار> ملحقات أسماء الملفات. إذا لزم الأمر، قم بإعادة تسمية الملف وإزالتها
.txtمن اسم الملف.أضف التعليمة البرمجية التالية إلى Dockerfile.
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 WORKDIR /src COPY ["/HotelReservationSystem/HotelReservationSystem.csproj", "HotelReservationSystem/"] COPY ["/HotelReservationSystemTypes/HotelReservationSystemTypes.csproj", "HotelReservationSystemTypes/"] RUN dotnet restore "HotelReservationSystem/HotelReservationSystem.csproj"تعمل هذه الأوامر على جلب صورة تحتوي على أُطر برامج NET Core Framework SDK. يتم نسخ ملفات المشروع لتطبيق الويب (
HotelReservationSystem.csproj) ومشروع المكتبة (HotelReservationSystemTypes.csproj) إلى مجلد /src في الحاوية. يعمل أمر*dotnet restore*على تنزيل التبعيات التي تطلبها هذه المشروعات من NuGet.ألحق التعليمات البرمجية التالية بالجزء السفلي من Dockerfile.
COPY . . WORKDIR "/src/HotelReservationSystem" RUN dotnet build "HotelReservationSystem.csproj" -c Release -o /appتعمل هذه الأوامر على نسخ التعليمات البرمجية المصدر لتطبيق الويب إلى الحاوية، ثم تشغيل أمر «dotnet build» لإنشاء التطبيق. تتم كتابة مكتبات الارتباطات الديناميكية (DLL) الناتجة في مجلد /app بالحاوية.
ألحق التعليمات البرمجية التالية بالجزء السفلي من Dockerfile.
RUN dotnet publish "HotelReservationSystem.csproj" -c Release -o /appيعمل أمر
dotnet publishعلى نسخ الملفات التنفيذية لموقع ويب إلى مجلد جديد وإزالة أية ملفات مؤقتة. يمكن بعد ذلك توزيع الملفات الموجودة في هذا المجلد على موقع ويب.ألحِق الأوامر التالية بالجزء السفلي من Dockerfile.
EXPOSE 80 WORKDIR /app ENTRYPOINT ["dotnet", "HotelReservationSystem.dll"]يعمل الأمر الأول على فتح المنفذ 80 في الحاوية. يعمل الأمر الثاني على الانتقال إلى مجلد
/appالذي يحتوي على الإصدار المنشور من تطبيق الويب. يعمل الأمر النهائي على تحديد أنه عند تشغيل الحاوية، يجب أن تنفذ الأمرdotnet HotelReservationSystem.dll. تحتوي هذه المكتبة على التعليمات البرمجية المحولة برمجياً لتطبيق الويب.احفظ الملف وأغلق محرر النص. تأكد من حفظه كملف كافة الملفات بدون ملحق ملف.
إنشاء الصورة وتوزيعها باستخدام ملف Dockerfile
في موجه الأوامر، قم بتشغيل الأمر التالي لإنشاء صورة لنموذج التطبيق باستخدام Dockerfile. لا تنسَ
.في نهاية الأمر. يعمل هذا الأمر على إنشاء الصورة وتخزينها محلياً. يتم إعطاء الصورة اسمreservationsystem. تحقق من إنشاء الصورة بنجاح. سيتم عرض تحذير بشأن أذونات الملف والدليل عند اكتمال العملية. يمكنك تجاهل هذه التحذيرات لأغراض هذا التمرين.docker build -t reservationsystem .قم بتشغيل الأمر التالي للتحقق من إنشاء الصورة وتخزينها في السجل المحلي.
docker image listستحمل الصورة اسم
reservationsystem. سترى أيضاً صورة باسم microsoft/dotnet.REPOSITORY TAG IMAGE ID CREATED SIZE reservationsystem latest d2501f0f2ced About a minute ago 1.76GB
اختبار تطبيق الويب
ادخل التعليمة البرمجية التالية لتشغيل حاوية باستخدام
reservationsystemصورة. سيعيد Docker سلسلة طويلة من أرقام سداسية عشرية - ويتم تشغيل الحاوية في الخلفية دون أي واجهة المستخدم. يتم تعيين المنفذ 80 في الحاوية إلى المنفذ 8080 على الجهاز المضيف. وتحمل الحاوية اسمreservations.docker run -p 8080:80 -d --name reservations reservationsystemابدأ تشغيل مستعرض ويب، وانتقل إلى
http://localhost:8080/api/reservations/1. يجب أن تشاهد عنصر JSON يحتوي على بيانات الحجز رقم 1 مشابهة للمخرج التالي.
.
استخدم أي رقم حجز آخر بدلاً من "1" في نهاية عنوان localhost URL (على سبيل المثال، 2 أو 20) لعرض تفاصيل الحجز المقابلة.
شَغِل الأمر التالي لعرض حالة الحاوية.
docker ps -aيعرض الإخراج ما يلي لجميع الحاويات المتوفرة:
- مُعرِّف الحاوية
- صورة
- أمر
- وقت الإنشاء
- الحالة
- منافذ
- أسماء
تحقق من أن
STATUS.حالة الحاوية هي Up.CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 07b0d1de4db7 reservationsystem "dotnet HotelReserva…" 5 minutes ago Up 5 minutes 0.0.0.0:8080->80/tcp reservationsأدخل الأمر التالي لإيقاف حاوية. reservations.
docker container stop reservationsاحذف حاوية reservations من السجل المحلي.
docker rm reservationsاترك reservationsystem في السجل المحلي. ستستخدم هذه الصورة في التمرين التالي.
تهانينا! لقد تمكنتَ الآن من إنشاء صورة لتطبيق الويب الخاص بك وتشغيلها باستخدام حاوية Docker.
هل تحتاج إلى مساعدة؟ راجع دليل استكشاف الأخطاء وإصلاحها الذي نقدمه أو يمكنك توفير ملاحظات معينة عبر الإبلاغ عن مشكلة.