ستعرض هذه المقالة 3 تقنيات لبناء تطبيقات SpringBoot على هيئة صور Docker باستخدام Maven.
(1)استخدام المضمّن في spring-boot-maven-plugin build-image.
(2)استخدام أداة Google المسماة jib-maven-plugin。
(3)استخدام dockerfle-maven-plugin。
تطبيق Spring Boot
لتسهيل التطبيق العملي، نحتاج إلى مشروع Spring Boot.
رابط المشروع التجريبي:
https://github.com/davelms/me...
بيئة المشروع:
Java 11
Maven 3.6.3
استخدام mvn package يمكن بناء حزمة jar بصورة طبيعية.
يمكنه العمل بصورة طبيعية أيضًا:
java -jar target/demo-application-0.0.1-SNAPSHOT.jar
صفحة الاختبار:
http://localhost:8080/hello

أصبح مشروع Demo جاهزًا، وسنبدأ الآن التطبيق العملي لطرق بناء الصور وعددها 3.
أولًا، build-image في إضافة maven الخاصة بـ Spring Boot
يأتي Spring Boot مزودًا مسبقًا بإضافته الخاصة لبناء صور Docker، ولا نحتاج إلى إجراء أي تعديل، لأنها موجودة ضمن spring-boot-starter-parent في pom.xml.
لا تحتاج إلى كتابة Dockerfile، ولا إلى الانشغال بأي شيء آخر؛ فالإضافة تتولى كل ذلك عنك، مثل مسائل الأمان والذاكرة والأداء التي توصي بها Spring.
يكفي ببساطة تنفيذ:
mvn spring-boot:build-image
بعد اكتمال التنفيذ، ستظهر رسالة تفيد بالنجاح:

تشغيل الحاوية للاختبار:
docker run -p 9090:8080 -t demo-application:0.0.1-SNAPSHOT
ملاحظة:منفذ الجهاز المحلي المعين هنا هو 9090。

ثانيًا، jib-maven-plugin
Jib إضافة لـ Maven وGradle تُستخدم لإنشاء صور Docker.
لهذه الإضافة سمة واضحة جدًا:لا حاجة إلى تثبيت Docker محليًا، وهذا مريح جدًا للتكامل المستمر، إذ يستطيع Jib الدفع مباشرة إلى مستودع Docker المحدد.
لا يتطلب Jib أيضًا كتابة Dockerfile.
كما أنه سهل الاستخدام جدًا، ولا يحتاج إلى تعديل الشيفرة، ويمكن أيضًا إبقاء pom.xml دون تعديل.
يكفي تنفيذ:
mvn compile com.google.cloud.tools:jib-maven-plugin:2.3.0:dockerBuild
mvn compile
هو أمر التجميع maven الذي نعرفه جيدًا.
com.google.cloud.tools:jib-maven-plugin:2.3.0
يحدد استخدام إضافة Jib
dockerBuild
هو هدف التنفيذ لإضافة Jib،dockerBuild يحدّد أن يستخدم Jib برنامج Docker المثبّت محليًا لدينا.
بعد اكتمال التنفيذ، ستظهر رسالة تفيد بالنجاح:

تشغيل الحاوية للاختبار:
docker run -p 9091:8080 -t demo-application:0.0.1-SNAPSHOT
ملاحظة:منفذ الجهاز المحلي المعين هنا هو 9091。

ثالثًا، dockerfile-maven-plugin
تتطلّب هذه الإضافة أن نكتب Dockerfile، وهو مُعدّ بالفعل في مشروع Domo.
يجب وضع Dockerfile في المجلد الجذري للمشروع، إلى جانب pom.xml.

ثم نحتاج إلى إضافة بعض الإعدادات في pom.xml، لتحديد المستودع ووسم tag، وكذلك ما جرى تعريفه في Dockerfile أعلاه من JAR_FILE。

تنفيذ mvn package ستُبنى الصورة تلقائيًا عندئذٍ، وبعد اكتمال التنفيذ ستظهر الرسالة التالية:

تشغيل الحاوية:
docker run -p 9092:8080 -t demo-application:0.0.1-SNAPSHOT
ملاحظة:المنفذ المحلي الذي جرى ربطه هو 9092。

خلاصة

من بين هذه الطرق الـ 3، تُعدّ الطريقة الأصلية في SpringBoot الأسهل، إذ لا تحتاج إلى فعل أي شيء بنفسك، ويمكن استخدامها مباشرة.
أكثرها تميزًا هو Jib، إذ لا يتطلب تثبيت Docker محليًا، ويمكنه الدفع مباشرةً إلى المستودع المحدد، كما أن استخدامه بسيط جدًا.
يبدو أن الإضافة dockerfile-maven-plugin هي الأكثر إزعاجًا، إذ تتطلب كتابة Dockerfile وإضافة إعدادات أيضًا،لكن، وهو في الواقع الأسهل استخدامًا، لأن الخيارين السابقين وعددهما 2 مرتبطان ببيئة الشبكة (أنت تعرف المقصود)، وحتى إذا ضبطت صورة Docker فستظهر أخطاء؛ يمكنك التجربة.
