تمرين - تخصيص صورة Docker لتشغيل تطبيق الويب الخاص بك
يحتوي ملف Dockerfile على الخطوات اللازمة لإنشاء صورة Docker مخصصة.
يمكنك الآن أن تقرر توزيع أحد تطبيقات المؤسسة على الويب باستخدام Docker. يمكنك تحديد تطبيق ويب بسيط يطبق واجهة برمجة تطبيقات على الويب لموقع حجوزات فنادق على الويب. تعرض واجهة برمجة التطبيقات على الويب عمليات HTTP POST وGET التي تنشئ حجوزات العميل وتستردها.
إشعار
في هذا الإصدار من تطبيق الويب، لا تستمر الحجوزات فعليا، وتعيد الاستعلامات بيانات وهمية.
في هذا التمرين، ستقوم بإنشاء ملف Dockerfile لتطبيق لا يحتوي على هذا الملف. ثم، ستقوم بإنشاء الصورة وتشغيلها محلياً.
إنشاء ملف Dockerfile لتطبيق الويب
إذا لم يكن قيد التشغيل بالفعل، فابدأ تشغيل Docker على الكمبيوتر.
في نافذة موجه الأوامر على جهاز الكمبيوتر المحلي، قم بتشغيل الأمر التالي لتنزيل التعليمات البرمجية المصدر لتطبيق الويب.
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
لأعلى.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
أدخل الأمر التالي لإيقاف حاوية الحجوزات:
docker container stop reservations
احذف حاوية reservations من السجل المحلي.
docker rm reservations
اترك reservationsystem في السجل المحلي. ستستخدم هذه الصورة في التمرين التالي.
تهانينا! لقد تمكنتَ الآن من إنشاء صورة لتطبيق الويب الخاص بك وتشغيلها باستخدام حاوية Docker.