تمرين - تخصيص صورة Docker لتشغيل تطبيق الويب الخاص بك

مكتمل

يحتوي ملف Dockerfile على الخطوات اللازمة لإنشاء صورة Docker مخصصة.

يمكنك الآن أن تقرر توزيع أحد تطبيقات المؤسسة على الويب باستخدام Docker. يمكنك تحديد تطبيق ويب بسيط يطبق واجهة برمجة تطبيقات على الويب لموقع حجوزات فنادق على الويب. تعرض واجهة برمجة التطبيقات على الويب عمليات HTTP POST وGET التي تنشئ حجوزات العميل وتستردها.

إشعار

في هذا الإصدار من تطبيق الويب، لا تستمر الحجوزات فعليا، وتعيد الاستعلامات بيانات وهمية.

في هذا التمرين، ستقوم بإنشاء ملف Dockerfile لتطبيق لا يحتوي على هذا الملف. ثم، ستقوم بإنشاء الصورة وتشغيلها محلياً.

إنشاء ملف Dockerfile لتطبيق الويب

  1. إذا لم يكن قيد التشغيل بالفعل، فابدأ تشغيل Docker على الكمبيوتر.

  2. في نافذة موجه الأوامر على جهاز الكمبيوتر المحلي، قم بتشغيل الأمر التالي لتنزيل التعليمات البرمجية المصدر لتطبيق الويب.

    git clone https://github.com/MicrosoftDocs/mslearn-hotel-reservation-system.git
    
  3. أدخل الأمر التالي لفتح src الدليل.

    cd mslearn-hotel-reservation-system/src
    
  4. في src الدليل، أدخل الأوامر التالية لإنشاء ملف جديد باسم Dockerfile وفتحه في المفكرة:

    copy NUL Dockerfile
    notepad Dockerfile
    

    إشعار

    يفتح الأمر ملفا نصيا في المفكرة، تلقائيًا. تأكد من حفظه كملف كافة الملفات بدون ملحق ملف. للتحقق من ذلك، افتح المجلد src في مستكشف الملفات، وحدد عرض > إظهار> ملحقات أسماء الملفات. إذا لزم الأمر، قم بإعادة تسمية الملف وإزالتها.txt من اسم الملف.

  5. أضف التعليمات البرمجية التالية إلى 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.

  6. إلحاق التعليمات البرمجية التالية بالجزء السفلي من Dockerfile:

    COPY . .
    WORKDIR "/src/HotelReservationSystem"
    RUN dotnet build "HotelReservationSystem.csproj" -c Release -o /app
    

    تنسخ هذه الأوامر التعليمات البرمجية المصدر لتطبيق الويب إلى الحاوية، ثم تشغل الأمر dotnet build لإنشاء التطبيق. تتم كتابة مكتبات الارتباطات الديناميكية (DLL) الناتجة في مجلد ‎/app بالحاوية.

  7. ألحق التعليمات البرمجية التالية بالجزء السفلي من Dockerfile.

    RUN dotnet publish "HotelReservationSystem.csproj" -c Release -o /app
    

    يعمل أمر dotnet publishعلى نسخ الملفات التنفيذية لموقع ويب إلى مجلد جديد وإزالة أية ملفات مؤقتة. يمكن بعد ذلك توزيع الملفات الموجودة في هذا المجلد على موقع ويب.

  8. ألحِق الأوامر التالية بالجزء السفلي من Dockerfile.

    EXPOSE 80
    WORKDIR /app
    ENTRYPOINT ["dotnet", "HotelReservationSystem.dll"]
    

    يعمل الأمر الأول على فتح المنفذ 80 في الحاوية. يعمل الأمر الثاني على الانتقال إلى مجلد /app الذي يحتوي على الإصدار المنشور من تطبيق الويب. يعمل الأمر النهائي على تحديد أنه عند تشغيل الحاوية، يجب أن تنفذ الأمر dotnet HotelReservationSystem.dll. تحتوي هذه المكتبة على التعليمات البرمجية المحولة برمجياً لتطبيق الويب.

  9. احفظ الملف وأغلق محرر النص. تأكد من حفظه كملف كافة الملفات بدون ملحق ملف.

إنشاء الصورة وتوزيعها باستخدام ملف Dockerfile

  1. في موجه الأوامر، قم بتشغيل الأمر التالي لإنشاء صورة لنموذج التطبيق باستخدام Dockerfile. لا تنسَ . في نهاية الأمر. يعمل هذا الأمر على إنشاء الصورة وتخزينها محلياً. يتم إعطاء الصورة اسم reservationsystem. تحقق من إنشاء الصورة بنجاح. سيتم عرض تحذير بشأن أذونات الملف والدليل عند اكتمال العملية. يمكنك تجاهل هذه التحذيرات لأغراض هذا التمرين. قد تستغرق الصورة لحظة للبناء.

    docker build -t reservationsystem .
    
  2. قم بتشغيل الأمر التالي للتحقق من إنشاء الصورة وتخزينها في السجل المحلي:

    docker image list
    

    ستحمل الصورة اسم reservationsystem. سيكون لديك أيضا صورة باسم microsoft/dotnet:

    REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
    reservationsystem   latest              d2501f0f2ced        About a minute ago   1.76GB
    

اختبار تطبيق الويب

  1. ادخل التعليمة البرمجية التالية لتشغيل حاوية باستخدام reservationsystemصورة. سيقوم Docker بإعادة سلسلة طويلة من الأرقام السداسية عشرية. تعمل الحاوية في الخلفية دون أي واجهة مستخدم. يتم تعيين المنفذ 80 في الحاوية إلى المنفذ 8080 على الجهاز المضيف. وتحمل الحاوية اسم reservations.

    docker run -p 8080:80 -d --name reservations reservationsystem
    
  2. ابدأ تشغيل مستعرض ويب وانتقل إلى http://localhost:8080/api/reservations/1. يجب أن تشاهد كائن JSON يحتوي على بيانات الحجز رقم 1 مشابهة للإخراج التالي:

    Screenshot of the hotel reservations system web app running in a browser.

    استخدم أي رقم حجز آخر بدلاً من "1" في نهاية عنوان localhost URL (على سبيل المثال، 2 أو 20) لعرض تفاصيل الحجز المقابلة.

  3. قم بتشغيل الأمر التالي لعرض حالة الحاوية:

    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
    
  4. أدخل الأمر التالي لإيقاف حاوية الحجوزات:

    docker container stop reservations
    
  5. احذف حاوية reservations من السجل المحلي.

    docker rm reservations
    
  6. اترك reservationsystem في السجل المحلي. ستستخدم هذه الصورة في التمرين التالي.

تهانينا! لقد تمكنتَ الآن من إنشاء صورة لتطبيق الويب الخاص بك وتشغيلها باستخدام حاوية Docker.