এই নিবন্ধে Maven দিয়ে SpringBoot অ্যাপ্লিকেশনকে Docker ইমেজ হিসেবে তৈরি করার 3টি কৌশল তুলে ধরা হবে。
(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টি পদ্ধতি হাতে-কলমে প্রয়োগ শুরু করা যাক।
এক、Spring Boot maven প্লাগইনের build-image
Spring Boot-এ Docker ইমেজ তৈরির নিজস্ব প্লাগইন আগে থেকেই রয়েছে, আমাদের কোনো পরিবর্তন করতে হয় না, কারণ সেটি pom.xml-এর spring-boot-starter-parent-এই রয়েছে।
আপনাকে 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 মিরর কনফিগার করলেও ত্রুটি দেখাবে, চেষ্টা করে দেখতে পারেন।
