كيفية إرساء تطبيق إقلاع نابض باستخدام تطبيق Google's Jib

الصورة 1: صور لرسو السفن java الاحتكاك مع Jib!

مرحبا! أثناء العمل على منصة قائمة على الربيع مؤخرًا ، كنت أفكر في الطريقة التي يجب اتباعها في الالتحام بالخدمات الصغيرة. لذلك صادفت Jib ، وهو نهج جديد إلى حد ما بشأن هذه المسألة ، تم تطويره بواسطة Google.

يدور هذا المنشور حول استخدام Jib ، وبشكل أكثر تحديداً jib-maven-plugin ، لإنشاء تطبيق تمهيد نابض بالحاويات.

يمكن العثور على المشروع التجريبي المستخدم في هذا المنشور هنا:

ما هو الجيب

ما يجلبه Jib إلى الطاولة هو أنه يتيح لك إنشاء حاوية عن طريق إضافة مكون إضافي إلى أداة الإنشاء التي تختارها (Maven أو Gradle). لا توجد ملفات إضافية ، فقط بضعة أسطر من التكوين وتتولى جميع خطوات تعبئة التطبيق الخاص بك في صورة حاوية.

بكلمات فريق Google Cloud:

Jib هو حاوية Java مفتوحة المصدر من Google تتيح لمطوري Java إنشاء حاويات باستخدام أدوات Java التي يعرفونها. لا يتطلب منك كتابة Dockerfile أو تثبيت عامل ميناء ، ويتم دمجه مباشرة في Maven و Gradle.

في تدفق بناء صور Java to Docker "التقليدي" ، نحتاج إلى تثبيت Dockerfile وتثبيت البرنامج الخفي ، كما هو موضح أدناه:

الصورة 2: الخطوات التقليدية لإنشاء صورة عامل ميناء من تطبيق Java.

كما يشير الرسم التوضيحي ، في تدفق Jib build ، تحتاج فقط إلى المكون الإضافي لملف بناء المشروع:

الصورة 3: طريقة Jib لإنشاء صورة عامل ميناء من تطبيق Java.

اقامة

ليس في نطاق هذا المنشور إعداد بيئة تطوير Java ، ولكن دعنا نمنحها!

  1. تأكد من تثبيت Java 8+.
  2. سوف نستخدم maven ، لذلك إذا لم يتم تثبيت install maven 3.5+.
  3. تأكد من تثبيت عامل الإرساء وإذا كنت تستخدم نظام Linux ، فإن المستخدم لديه حق الوصول إلى جهاز الإرساء.
  4. قم بتثبيت IDE المفضل لديك (الكسوف أو الفكرة).

إنشاء تطبيق تمهيد ربيع أساسي

يمكن القيام بذلك إما عن طريق التهيئة الربيعية ، أو عن طريق IDE المفضل لديك. إذا كنت تستخدم ربيع التهيئة ، فستحتاج إلى استيراد مشروع مخضرم تم إنشاؤه حديثًا إلى IDE (كسوف / فكرة).

أضف jib-maven-plugin إلى pom.xml الخاص بك

للحصول على صورة أساسية مخزنة محليًا للتطبيق ، قم بتكوين jib-maven-plugin في pom.xml كما يلي:

ترجمة التطبيق وبناء الصورة

الآن يمكننا إنشاء التطبيق والتحقق مما إذا كانت الصورة تم إنشاؤها في مستودع التخزين المحلي الخاص بنا.

انتقل إلى المجلد الجذر للمشروع عبر محطة ، وقم بتنفيذ:

mvn ترجمة الجيب: dockerBuild

يجب أن تحتوي سجلات إنشاء Maven على خطوط مثل ما يلي:

[INFO] - - jib-maven-plugin: 0.10.1: dockerBuild (default-cli) @ spring-boot-jib - -
[INFO]
[INFO] تطبيق Containerizing لـ Docker daemon مثل springbootjib ...
[تحذير] الصورة الأساسية "gcr.io/distroless/java" لا تستخدم خلاصة صورة محددة - قد لا تكون البنية قابلة للتكرار
[INFO] الحصول على الصورة الأساسية gcr.io/distroless/java…
[INFO] بناء التبعيات طبقة ...
[INFO] طبقة موارد البناء ...
[INFO] طبقة بناء الطبقات ...
[INFO] إنهاء ...
[INFO]
[INFO] تم تعيين نقطة إدخال الحاوية على [java، -cp، / app / resources: / app / classes: / app / libs / *، com.jibdemo.SpringBootJibApplication]
[INFO] جارٍ التحميل إلى Docker daemon ...
[INFO]
[INFO] بنيت صورة ل Docker الخفي كما springbootjib

طالما لا توجد أية أخطاء ونرى أن "الصورة المبنية إلى Docker daemon مثل springbootjib" قد تم إعدادها جميعًا.

تشغيل صورة عامل ميناء

في هذه المرحلة ، يجب أن يكون لدينا صورة عامل ميناء جديد في مستودعنا المحلي. يمكننا التحقق من خلال تنفيذ صورة عامل ميناء ls ويجب أن نرى صورة مشابهة لهذه:

springbootjib آخر eb4bea693650 منذ 3 ساعات 135 ميغابايت

لاحظ حجم الصورة الصغير جدًا (135 ميجابايت) ، والذي يرجع إلى صورة gcr.io/distroless/java التي يستخدمها Jib بشكل افتراضي (سنرى كيف يمكننا تغيير ذلك لاحقًا).

حتى الآن ، يمكننا تشغيل الصورة كالمعتاد عن طريق كتابة برنامج تشغيل docker -it springbootjib والتحقق من أن التطبيق يعمل كما هو متوقع.

تكوين Jib المساعد لضبط صورة عامل الميناء لدينا

يمكننا التنقيب بشكل أعمق ، وتهيئة المكون الإضافي Jib بشكل إضافي ، لتناسب العديد من السيناريوهات الشائعة مثل تسجيل الدخول إلى مستودع عامل ميناء ، وفضح المنافذ ، واختيار صورة أساسية محددة إلخ.

على سبيل المثال في التكوين التالي الصورة:

  • بنيت من قاعدة openjdk: جبال الألب (سحبت من Docker Hub)
  • يتم الدفع إلى المضيف المحلي: 5000 / springbootjib: 0.0.1-SNAPSHOT ، المضيف المحلي: 5000 / springbootjib: alpine ، و localhost: 5000 / springbootjib: الأحدث
  • يعمل عن طريق استدعاء java -Xms256m -Xdebug -cp app / libs / *: التطبيق / الموارد: التطبيق / classes com.jibdemo.SpringBootJibApplication
  • يعرض المنفذ 8001 لـ tcp (افتراضي) ، والمنافذ 8002 و 8003 لـ udp
  • لديه تسمية (الاسم: springbootjib)
  • بنيت كتنسيق OCI

يمكنك الآن بناء الصورة مرة أخرى ، ومعرفة الفرق في سجلات maven:

[INFO] --- jib-maven-plugin: 0.10.1: dockerBuild (default-cli) @ spring-boot-jib ---
[INFO]
[INFO] تطبيق حاويات على Docker daemon مثل مضيف محلي: 5000 / springbootjib: 0.0.1-SNAPSHOT ، مضيف محلي: 5000 / springbootjib: alpine ، localhost: 5000 / springbootjib ...
[INFO] الحصول على الصورة الأساسية openjdk: جبال الألب ...
[INFO] بناء التبعيات طبقة ...
[INFO] بناء طبقة الموارد ...
[INFO] طبقة بناء الطبقات ...
[INFO] تتطلب الصورة الأساسية المصادقة. جرب مرة أخرى لـ openjdk: جبال الألب ...
[INFO] استرداد بيانات اعتماد السجل لـ registry.hub.docker.com ...
[INFO] يتم الانتهاء ...
[INFO]
[INFO] تم تعيين نقطة إدخال الحاوية على [java، -Xms256m، -Xdebug، -cp، / app / resources: / app / classes: / app / libs / *، com.jibdemo.SpringBootJibApplication]
[INFO] جارٍ التحميل إلى Docker daemon ...
[INFO]
[INFO] بنيت الصورة إلى Docker daemon كمضيف محلي: 5000 / springbootjib: 0.0.1-SNAPSHOT ، مضيف محلي: 5000 / springbootjib: alpine ، localhost: 5000 / springbootjib

لاحظ في مقطع السجل أعلاه أن المكون الإضافي سحب الصورة openjdk: alpine من Docker Hub ، وقم ببناء الصورة إلى ثلاثة إصدارات ذات علامات تمييز مختلفة وقم بتخزينها في مستودعنا المحلي.

لماذا أخذت رصاصة مع الجيب

  • لا تحتاج إلى الحفاظ على Dockerfile ، أو تشغيل برنامج Docker ، أو حتى القلق بشأن إنشاء JAR سمين بكل تبعياته.
  • يستفيد من طبقات الصور والتخزين المؤقت للتسجيل لتحقيق تصميمات سريعة ومتزايدة.
  • يمكن تهيئتها لإنشاء صور بناء قابلة للتكرار طالما ظلت مدخلاتك كما هي.

استنتاج

بعد استخدام المكونات الإضافية الأخرى مثل تلك الموجودة في spotify و fabric8 لإنشاء صور عامل ميناء لتطبيقات java ، أرحب بموضوع Google. يحتاج إلى ملفات أقل من البرنامج المساعد لـ fabric8 ، ويشعر (في رأيي المتواضع) أنه أسهل في التهيئة من البرنامج المساعد لـ spotify. أنا بالتأكيد أوصي بتجربته!

إخلاء المسئولية: هذا ليس مقالة مقارنة ، فقط وجهة نظري حول المسألة المدعومة من تجربة شخصية.

يمكنك دائمًا قراءة المزيد على Jib’s repo ، والذي يحتوي على معلومات شاملة فيما يتعلق بجميع معلمات التكوين. شكرا لك على قراءة هذا بكثير! اتمنى ان تكون قد استمتعت به! لا تتردد في ترك تعليقاتك هنا.

عني

مرحبا، شكرا لمرورك. أنا مهندس مكدس كامل مستقل ، مع التركيز في النهاية الخلفية و devOps. أنا مهتم بإنشاء نماذج أولية / MVPs وتطوير منصات تعمل على توسيع نطاق السحابة ، واخترت إنشاء قيمة أعمال.

يمكنك قراءة المزيد عني وعن قصتي هنا. إذا كنت تريد مناقشة الأعمال أو التواصل معنا ، فأرسل لي رسالة بريد إلكتروني: tasos.tsaousis@codedlines.com.