مشاركة عبر


قم بإنشاء حاوية Service Fabric التي تعمل على تشغيل خادم Apache Tomcat على نظام Linux

يعد Apache Tomcat تطبيقًا شائعًا ومفتوح المصدر لتقنيات Java Servlet و Java Server. توضح لك هذه المقالة كيفية إنشاء حاوية باستخدام Apache Tomcat وتطبيق ويب بسيط، ونشر الحاوية في مجموعة Service Fabric التي تعمل بنظام Linux، والاتصال بتطبيق ويب.

لمعرفة المزيد عن Apache Tomcat، راجع الصفحة الرئيسية لـ Apache Tomcat.

المتطلبات الأساسية

بناء صورة Tomcat وتشغيلها محليًا

اتبع الخطوات الواردة في هذا القسم لإنشاء صورة Docker استنادًا إلى صورة Apache Tomcat وتطبيق ويب بسيط ثم قم بتشغيلها في حاوية على نظامك المحلي.

  1. قم باستنساخ تصميم الخدمة لتبدأ مع مستودع عينات Java على جهاز الكمبيوتر الخاص بك.

    git clone https://github.com/Azure-Samples/service-fabric-java-getting-started.git
    
  2. تغيير الدلائل إلى دليل نموذج خادم Apache Tomcat(service-fabric-java-getting-started/container-apache-tomcat-web-server-sample):

    cd service-fabric-java-getting-started/container-apache-tomcat-web-server-sample
    
  3. قم بإنشاء ملف Docker استنادًا إلى صورة Tomcat الرسمية الموجودة على Docker Hub ونموذج خادم Tomcat. في الدليل service-fabric-java-getting-started/container-apache-tomcat-web-server-sample، قم بإنشاء ملف باسم Dockerfile (بدون امتداد الملف). أضف ما يلي إلى Dockerfile وحفظ التغييرات الخاصة بك:

    FROM library/tomcat
    
    EXPOSE 8080
    
    COPY ./ApacheTomcat /usr/local/tomcat
    

    يرجى الرجوع إلى مرجع Dockerfile لمزيد من المعلومات.

  4. قم بتسجيل الدخول إلى Docker وقم بتشغيل docker build الأمر لإنشاء الصورة التي تقوم بتشغيل تطبيق الويب الخاص بك:

    docker login
    docker build . -t tomcattest
    

    يقوم هذا الأمر بإنشاء الصورة الجديدة باستخدام الإرشادات الموجودة في Dockerfile، وتسمية (-t وضع علامات) على الصورة tomcattest. لإنشاء صورة حاوية، يتم تنزيل الصورة الأساسية أولًا من Docker Hub ويضاف التطبيق إليها.

    بمجرد اكتمال الأمر إنشاء تشغيل docker images الأمر لمشاهدة معلومات عن الصورة الجديدة:

    $ docker images
    
    REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
    tomcattest                    latest              86838648aab6        2 minutes ago       194 MB
    
  5. تحقق من تشغيل التطبيق الحاوية محليًا قبل دفعه إلى سجل الحاويات:

    docker run -itd --name tomcat-site -p 8080:8080 tomcattest.
    
    • --name تسمى الحاوية، بحيث يمكنك الرجوع إليها باستخدام اسم مألوف بدلًا من معرفها.
    • -p يحدد تعيين المنفذ بين الحاوية ونظام تشغيل المضيف.

    إشعار

    يجب أن يكون المنفذ الذي تفتحه باستخدام -p المعلمة هو المنفذ الذي يستمع إليه تطبيق Tomcat الخاص بك للطلبات. في المثال الحالي، يوجد موصل تم تكوينه في ملف ApacheTomcat/conf/server.xml للاستماع إلى المنفذ 8080 لطلبات HTTP. يتم تعيين هذا المنفذ إلى المنفذ 8080 على المضيف.

    للتعرف على المعلمات الأخرى، راجع وثائق تشغيل Docker.

  6. لاختبار الحاوية، افتح متصفحًا وأدخل أحد عناوين URL التالية. سترى متغيرًا من شاشة الترحيب "مرحبًا بالعالم!" لكل عنوان URL.

    • http://localhost:8080/hello
    • http://localhost:8080/hello/sayhello
    • http://localhost:8080/hello/sayhi

    مرحبا بالعالم /sayhi

  7. قم بإيقاف الحاوية وحذفها من كمبيوتر التطوير:

    docker stop tomcat-site
    docker rm tomcat-site
    

دفع صورة Tomcat إلى سجل الحاويات

الآن بعد أن تحققت من تشغيل صورة Tomcat في حاوية على كمبيوتر التطوير الخاص بك، ادفعها إلى مستودع في سجل حاوية لـتقليل التعطيل في سير عمل تطوير الصور ونشرها. تستخدم هذه المقالة Azure Container Registry لتخزين الصورة، ولكن مع بعض التعديلات على الخطوات، يمكنك استخدام أي سجل حاوية تختاره. في هذه المقالة، يُفترض أن يكون اسم السجل هو myregistry والاسم الكامل للتسجيل هو myregistry.azurecr.io. قم بتغييرها بشكل مناسب للسيناريو الخاص بك.

  1. تشغيل docker login لتسجيل الدخول إلى تسجيل الحاوية مع بيانات اعتماد التسجيلالخاص بك.

    يمرر المثال التالي المعرف وكلمة المرور الخاصين بكيان خدمة Microsoft Entra. على سبيل المثال، ربما تكون قد قمت بتعيين مدير خدمة إلى السجل الخاص بك لسيناريو الأتمتة. أو يمكنك تسجيل الدخول باستخدام اسم المستخدم وكلمة المرور الخاصين بالتسجيل.

    docker login myregistry.azurecr.io -u xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -p myPassword
    
  2. ينشئ الأمر التالي علامة أو اسمًا مستعارًا للصورة، مع مسار مؤهل بالكامل إلى السجل الخاص بك. يضع هذا المثال الصورة في samples مساحة الاسم لتجنب الفوضى في أصل التسجيل.

    docker tag tomcattest myregistry.azurecr.io/samples/tomcattest
    
  3. ادفع الصورة إلى سجل الحاويات:

    docker push myregistry.azurecr.io/samples/tomcattest
    

إنشاء تطبيق حاوية Service Fabric ونشره

الآن بعد أن قمت بدفع صورة Tomcat إلى سجل حاوية، يمكنك إنشاء ونشر تطبيق حاوية Service Fabric الذي يقوم بسحب صورة Tomcat من السجل الخاص بك وتشغيلها كخدمة حاوية في مجموعتك.

  1. قم بإنشاء دليل جديد خارج النسخة المحلية (خارج شجرة دليل service-fabric-java-getting-started). قم بالتبديل إليه واستخدم Yeoman لإنشاء سقالة لتطبيق الحاوية:

    yo azuresfcontainer 
    

    أدخل القيم التالية عند المطالبة:

    • اسم التطبيق الخاص بك: ServiceFabricTomcat
    • اسم خدمة التطبيق: TomcatService
    • أدخل اسم الصورة: أدخل عنوان URL لصورة الحاوية في سجل الحاوية على سبيل المثال، myregistry.azurecr.io/samples/tomcattest.
    • الأوامر: اترك هذا فارغًا. نظرًا لأن هذه الصورة تحتوي على نقطة دخول عبء عمل محددة، فلن تحتاج إلى تحديد أوامر الإدخال بشكل صريح (يتم تشغيل الأوامر داخل الحاوية، مما سيحافظ على تشغيل الحاوية بعد بدء التشغيل).
    • عدد مثيلات تطبيق حاوية الضيف: 1

    مولد Service Fabric Yeoman للحاويات

  2. في بيان الخدمة (ServiceFabricTomcat/ServiceFabricTomcat/TomcatServicePkg/ServiceManifest.xml)، أضف XML التالي تحت علامة ServiceManfest الجذرية لفتح المنفذ الذي يستمع تطبيقك للطلبات عليه. علامة Endpoint تعلن البروتوكول والمنفذ نقطة النهاية. بالنسبة لهذه المقالة، تستمع الخدمة المعبأة في حاويات على المنفذ 8080:

<Resources>
 <Endpoints>
   <!-- This endpoint is used by the communication listener to obtain the port on which to 
    listen. Please note that if your service is partitioned, this port is shared with 
    replicas of different partitions that are placed in your code. -->
   <Endpoint Name="endpointTest" Port="8080" Protocol="tcp"/>
 </Endpoints>
</Resources>
  1. في بيان التطبيق (ServiceFabricTomcat/ServiceFabricTomcat/ApplicationManifest.xml)، ضمن علامة ServiceManifestImport، أضف XML التالي. استبدل AccountName و Password في علامة RepositoryCredentials باسم سجل الحاوية وكلمة المرور المطلوبة لتسجيل الدخول إليه.
<Policies>
 <ContainerHostPolicies CodePackageRef="Code">
   <PortBinding ContainerPort="8080" EndpointRef="endpointTest"/>
   <RepositoryCredentials AccountName="myregistry" Password="=P==/==/=8=/=+u4lyOB=+=nWzEeRfF=" PasswordEncrypted="false"/>
 </ContainerHostPolicies>
</Policies>

تحدد العلامة ContainerHostPolicies سياسات تنشيط مضيفات الحاويات.

  • تقوم علامة PortBinding بتكوين نهج تعيين منفذ الحاوية من منفذ إلى مضيف. يتم تعيين السمة ContainerPort إلى 8080 لأن الحاوية تعرض المنفذ 8080، كما هو محدد في Dockerfile. يتم تعيين سمة EndpointRef إلى "endpointTest"، نقطة النهاية المعرفة في بيان الخدمة في الخطوة السابقة. وهكذا، يتم تعيين الطلبات الواردة إلى الخدمة على المنفذ 8080 إلى المنفذ 8080 على الحاوية.
  • تحدد علامة RepositoryCredentials بيانات الاعتماد التي تحتاج الحاوية إلى المصادقة عليها باستخدام المستودع (الخاص) الذي تسحب الصورة منه. لا تحتاج إلى هذه السياسة إذا كان سيتم سحب الصورة من مستودع عام.
  1. في المجلد ServiceFabricTomcat، اتصل بمجموعة service fabric.
  • للاتصال بمجموعة Service Fabric المحلية، قم بتشغيل:

    sfctl cluster select --endpoint http://localhost:19080
    
  • للاتصال بمجموعة Azure آمنة، تأكد من وجود شهادة العميل كملف .pem في دليل ServiceFabricTomcat، وقم بتشغيل:

    sfctl cluster select --endpoint https://PublicIPorFQDN:19080 -pem your-certificate.pem -no-verify
    

    في الأمر السابق، استبدل your-certificate.pem باسم ملف شهادة العميل. في بيئات التطوير والاختبار، غالبًا ما يتم استخدام شهادة نظام المجموعة كشهادة العميل. إذا لم تكن شهادتك موقعة ذاتيًا، فاحذف -no-verify المعلمة.

    عادة ما يتم تنزيل شهادات نظام المجموعة محليًا كملفات .pfx. إذا لم يكن لديك بالفعل شهادتك بتنسيق PEM، فيمكنك تشغيل الأمر التالي لإنشاء ملف .pem من ملف .pfx:

    openssl pkcs12 -in your-certificate.pfx -out your-certificate.pem -nodes -passin pass:your-pfx-password
    

    إذا لم يكن ملف .pfx محميًا بكلمة مرور، فاستخدمه -passin pass: للمعلمة الأخيرة.

  1. قم بتشغيل البرنامج النصي للتثبيت المتوفر في القالب لنشر التطبيق على مجموعتك. ينسخ البرنامج النصي حزمة التطبيق إلى مخزن الصور في المجموعة، ويسجل نوع التطبيق، وينشئ مثيلًا للتطبيق.

    ./install.sh
    

بعد تشغيل البرنامج النصي للتثبيت، افتح مستعرضًا وانتقل إلى Service Fabric Explorer:

  • على مجموعة محلية، استخدم http://localhost:19080/Explorer (استبدل المضيف المحلي ب IP الخاص بالجهاز الظاهري إذا كنت تستخدم Vagrant على نظام التشغيل Mac OS X).
  • على مجموعة Azure آمنة، استخدم https://PublicIPorFQDN:19080/Explorer.

توسيع عقدة Applications ثم لاحظ أن هناك الآن إدخال لنوع التطبيق الخاص بك، ServiceFabricTomcatType، وآخر للمثيل الأول من هذا النوع. قد يستغرق التطبيق بضع دقائق حتى يتم نشره بالكامل، لذا كن صبورًا.

مستكشف Service Fabric

  1. للوصول إلى التطبيق على خادم Tomcat، افتح نافذة متصفح وأدخل أيًا من عناوين URL التالية. إذا قمت بالنشر إلى الكتلة المحلية، فاستخدم localhost لـ PublicIPorFQDN. سترى متغيرًا من شاشة الترحيب "مرحبًا بالعالم!" لكل عنوان URL.

    • http://PublicIPorFQDN:8080/hello
    • http://PublicIPorFQDN:8080/hello/sayhello
    • http://PublicIPorFQDN:8080/hello/sayhi

تنظيف

استخدم إلغاء تثبيت البرنامج النصي المتوفر في القالب لحذف مثيل التطبيق من نظام المجموعة وإلغاء تسجيل نوع التطبيق.

./uninstall.sh

بعد دفع الصورة إلى تسجيل الحاوية يمكنك حذف الصورة المحلية من جهاز الكمبيوتر الخاص بك التطوير:

docker rmi tomcattest
docker rmi myregistry.azurecr.io/samples/tomcattest

الخطوات التالية