স্প্রিংবুটের সাথে ডকারের পোস্টগ্রেস ডাটাবেজ ব্যবহার করা

আগের একটা আর্টিকেলে আমরা দেখেছিলাম কীভাবে জ্যাংগোর সাথে পোস্টগ্রেস কন্টেইনারের ডাটাবেজ কানেক্ট করতে হয়। এই কুইক পোস্টে আমরা একটা স্প্রিংবুট এপ্লিকেশনের সাথে কন্টেইনারের পোস্টগ্রেস ডাটাবেজ কানেক্ট করবো।

আগের লেখায় মোটামুটি সব স্টেপ ব্যাখ্যা করা হয়েছিলো। তাই এই আর্টিকেলকে ছোট রাখতে আগের আলোচনা গুলো যথাসম্ভব বাদ দেয়া হয়েছে।

কাজেই, এখানে ধরে নেয়া হচ্ছে পাঠকের ডকারের সাথে হাই-হ্যালো আছে এবং একটা স্প্রিংবুট এপ্লিকেশন রেডি আছে যেখানে আপনি পোস্টগ্রেস ডাটাবেজ ব্যবহার করছেন, আর আগের আর্টিকেলটা পড়া আছে।

যদিও এইভাবে ডাটাবেজ রান করাটা প্রথম প্রথম আরো বেশি ঝামেলার মনে হতে পারে, কিন্তু আপনি যদি কম্পিউটারে পোস্টগ্রেস সেটাপ করার ঝক্কি সয়ে থাকেন, আর ডকারের সাথে মোটামুটি পরিচয় থাকে, তাহলে এইভাবে ডাটাবেজ সেটাপ তুলনামূলক অনেক সহজ। মাত্র কয়েকটি কমান্ড আর কয়েক মিনিটের ব্যাপার।

তাহলে চলুন শুরু করা যাক।

আশা করছি আপনার কম্পিউটারে ডকার ইন্সটল করা আছে, এবং পোস্টগ্রেস ইমেজও ডাউনলোড করা আছে। না থাকলে ডকার ইন্সটল করে ফেলুন, আর কমান্ড লাইনে লিখুন docker pull postgres

এবার ইমেজের লিস্ট দেখুন docker images দিয়ে।

লিস্টে postgres ইমেজটি দেখতে পাবেন। এবার আপনার স্প্রিংবুট এপ্লিকেশনের application.properties ফাইলে যান, অর্থাৎ যেখানে ডাটাবেজ কানেকশনের প্রয়োজনীয় তথ্যগুলো(ডাটাবেজ নাম, ইউজারনেম, পাসওয়ার্ড) রয়েছে।

spring.datasource.url=jdbc:postgresql://localhost:5432/DATABASE_NAME
spring.datasource.username=USERNAME
spring.datasource.password=PASSWORD

spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
...

এই DATABASE_NAME, USERNAME আর PASSWORD আমরা ডকারে কন্টেইনার তৈরিতে ব্যবহার করবো। আপনারা এক্ষেত্রে নিজ নিজ তথ্যগুলো ব্যবহার করবেন।

তাহলে আমাদের পোস্টগ্রেস ইমেজ আছে, ডাটাবেজের ইনফর্মেশন আছে, এখন প্রয়োজন পোস্টগ্রেসের একটা কন্টেইনার তৈরি করে তার সাথে কানেক্ট করা। আমরা প্রয়োজনীয় সব তথ্য দিয়ে একটা কন্টেইনার তৈরি করবো। আপনার কম্পিউটারে আগে থেকে পোস্টগ্রেস চলমান থাকলে, কিংবা নির্দিষ্ট পোর্টে(ডিফল্ট ৫৪৩২)কোনো প্রসেস চালু থাকলে তা বন্ধ করে নিন। তারপর নিচের কমান্ড লিখুন

docker run -d -p 5432:5432 --env POSTGRES_USER=USERNAME --env POSTGRES_PASSWORD=PASSWORD --env POSTGRES_DB=DATABASE_NAME --name spring-db postgres

সব ঠিক ঠাক থাকলে নিচের মতো রেস্পন্স পাবেন, অর্থাৎ কন্টেইনারটি সফলভাবে তৈরী হয়েছে।

আগের আর্টিকেলের কন্টেইনারের সাথে এখানে কিছুটা পার্থক্য রয়েছে। তা হচ্ছে এখানে নির্দিষ্ট ইউজারনেম, পাসওয়ার্ড আর ডাটাবেজ ব্যবহার করে কন্টেইনার তৈরি করা হয়েছে।

এই লম্বা কমান্ড দেখে ডিপ্রেশনে যাওয়ার কিছু নেই। আগের কমান্ড ভুলে গিয়ে থাকলেও এখানে আমরা আবার কমান্ডটি ভালোভাবে দেখবো

docker run

কন্টেইনার তৈরী এবং রান করার কমান্ড

-d

কন্টেইনারটি তৈরি হবার পর ডিটাচড মোডে,অর্থাৎ ব্যাকগ্রাউন্ডে স্টার্ট হবে।

-p 5432:5432

পোর্ট বাইন্ডিং। পোস্টগ্রেস ডিফল্টভাবে 5432 পোর্টে রান হয়। কন্টেইনারের ভেতরেও একই পোর্টে রান হবে। এখানে কন্টেইনারের ভেতরের পোর্টকে আমাদের হোস্ট মেশিন তথা কম্পিউটারের পোর্টের সাথে কানেক্ট করছি, যাতে কন্টেইনারের বাইরে থেকেও ভেতরে যোগাযোগ করা যায়।

--env POSTGRES_USER=USERNAME

--env POSTGRES_PASSWORD=PASSWORD

--env POSTGRES_DB=DATABASE_NAME

তিনটি এনভায়রনমেন্ট ভ্যারিয়েবল এবং তাদের ভ্যালু কন্টেইনারের ভেতরে পাঠাচ্ছি।

--name springdb

যে কন্টেইনারটি তৈরি করছি, ভবিষ্যত রেফারেন্সের সুবিধার্থে তার একটি নাম দিচ্ছি।

posgres

যে ইমেজটির ইন্সট্যান্স বা কন্টেইনার তৈরি করছি সেই ইমেজটির নাম(এক্ষেত্রে postgres)

যেহেতু আমরা ব্যাকএন্ড এপ্লিকেশনের ডাটাবেজের তথ্য দিয়ে এই কন্টেইনার তৈরি করেছি, তাই এখন এর সাথে ব্যাকএন্ডকে কানেক্ট করতে শুধু প্রয়োজন কন্টেইনারটিকে স্টার্ট করা।

যদিও কন্টেইনার তৈরির সময় তা রানিং অবস্থায় আছে, এছাড়াও পরে কন্টেইনার স্টার্ট করতে নিচের কমান্ড ব্যবহার করবো

docker start springdb

বলাই বাহুল্য, এখানে springdb হচ্ছে আমাদের কন্টেইনারের নাম। এবার স্প্রিংবুট এপ্লিকেশন রান করলে সঠিকভাবে রান হয়ে যাবে।

কন্টেইনারের ভেতরের ফাইল সিস্টেমে একসেস করতে লিখুন docker exec -it springdb bash

এবার আপনার ডাটাবেজে একসেস করতে লিখুন psql -U YOUR_USERNAME -W YOUR_DB_NAME

এন্টার দিলে আপনার কাছে ডাটাবেজের পাসওয়ার্ড চাইবে। পাসওয়ার্ড দিয়ে ডাটাবেজে একসেস করুন।

সব টেবিল গুলো দেখতে লিখুন \dt । পোস্টগ্রেস কন্সোল থেকে বের হতে \q আর কন্টেইনারের কন্সোল থেকে বের হতে লিখুন exit । কন্টেইনার আর ব্যাকএন্ড ঠিকঠাক ভাবে রান হলে ডাটাবেজ টেবিলগুলো দেখতে পাবেন। কাজ শেষে কন্টেইনারটি স্টপ করতে লিখুন docker stop container_name(eg- springdb)

আজ এ পর্যন্তই।

ধন্যবাদ।

--

--