সরাসরি প্রধান সামগ্রীতে চলে যান

Spring boot App Dockerize without External Dependencies (Spring Boot Docker Part 1)

1️⃣ Docker Image Build করা

Dockerfile ধরে নিই যে তুমি project root এ আছো যেখানে Dockerfile আছে।

docker build -t avengers-app:latest .

Explanation:

  • docker build → Docker image build command
  • -t avengers-app:latest → image নাম ও tag
  • . → context, অর্থাৎ current folder

Build complete হলে তুমি locally দেখতে পারবে:

docker images

2️⃣ Docker Container Run করা

Build করা image দিয়ে container run করতে:

docker run -d \
  --name spring-app \
  -p 8080:8080 \
  -e SPRING_PROFILES_ACTIVE=docker \
  -e SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/mydb \
  -e SPRING_DATASOURCE_USERNAME=postgres \
  -e SPRING_DATASOURCE_PASSWORD=postgres \
  -e SPRING_REDIS_HOST=localhost \
  -e SPRING_REDIS_PORT=6379 \
  avengers-app:latest

Explanation:

  • -d → detached mode (background)
  • --name spring-app → container name
  • -p 8080:8080 → host:container port mapping
  • -e VAR=value → environment variables inject করা
  • avengers-app:latest → আগের step এ তৈরি করা image

লগ দেখার জন্য:

docker logs -f spring-app

Container stop করতে:

docker stop spring-app
docker rm spring-app

3️⃣ Docker Hub এ Share করা

Step 1: Docker Hub Login

docker login

→ Docker Hub username ও password দিতে হবে

Step 2: Image Tag করা Docker Hub Repository অনুযায়ী

ধরি তোমার Docker Hub username mdshakibulalam

docker tag avengers-app:latest mdshakibulalam/avengers-app:latest

Step 3: Push করা Docker Hub এ

docker push mdshakibulalam/avengers-app:latest

✅ এখন কেউ যেকোনো machine থেকে এই image pull করতে পারবে:

docker pull mdshakibulalam/avengers-app:latest
docker run -d -p 8080:8080 mdshakibulalam/avengers-app:latest

4️⃣ Optional: Docker Compose দিয়ে Run (Recommended)

docker-compose.yml:

services:
  app:
    image: mdshakibulalam/avengers-app:latest
    container_name: spring-app
    ports:
      - "8080:8080"
    environment:
      SPRING_PROFILES_ACTIVE: docker
      SPRING_DATASOURCE_URL: jdbc:postgresql://localhost:5432/mydb
      SPRING_DATASOURCE_USERNAME: postgres
      SPRING_DATASOURCE_PASSWORD: postgres
      SPRING_REDIS_HOST: localhost
      SPRING_REDIS_PORT: 6379

Run:

docker compose up -d

মন্তব্যসমূহ

এই ব্লগটি থেকে জনপ্রিয় পোস্টগুলি

সিজ্জিন (Sijjin) vs ইল্লিয়িন (Illiyin) পার্থক্য Difference

Sijjin (سِجِّين) এবং Illiyin (عِلِّيِّين) —এ দুটি শব্দ কুরআনে এসেছে এবং দুটোই মানুষের আমলনামা সংরক্ষণ সম্পর্কিত স্থানকে নির্দেশ করে। ১. সিজ্জিন (Sijjin) সিজ্জিন হলো পাপীদের (কাফের, মুনাফিক ও দুরাচারীদের) আমলনামা সংরক্ষণের স্থান। এটি সাত তলদেশের নীচে এক কারাগার বা অন্ধকার জগতে অবস্থিত বলে উল্লেখ রয়েছে। সূরা আল-মুতাফফিফীন (৮৩:৭-৯) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْفُجَّارِ لَفِي سِجِّينٍ ۝ وَمَا أَدْرَاكَ مَا سِجِّينٌ ۝ كِتَابٌ مَرْقُومٌ" অর্থ: "না, পাপীদের আমলনামা সিজ্জিনে সংরক্ষিত। তুমি কি জানো, সিজ্জিন কী? এটি এক লিখিত দলিল।" সিজ্জিনকে একটি কারাগার, সংকীর্ণ স্থান, বা নিচের স্তরে অবস্থিত এক অন্ধকার দুনিয়া হিসেবে ব্যাখ্যা করা হয়। ২. ইল্লিয়িন (Illiyin) ইল্লিয়িন হলো সৎকর্মশীলদের (মুমিন ও নেককারদের) আমলনামা সংরক্ষণের স্থান । এটি সপ্তম আসমানের ওপরে সংরক্ষিত এক সম্মানিত স্থান। সূরা আল-মুতাফফিফীন (৮৩:১৮-২১) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْأَبْرَارِ لَفِي عِلِّيِّينَ ۝ وَمَا أَدْرَاكَ مَا عِلِّيُّونَ ۝ كِتَابٌ مَرْقُومٌ ۝ يَش...

জাভা ফিডব্যাক এবং স্ট্রাকচার্ড কনকারেন্সি: বিবর্তনের গল্প

Introduction এই ভিডিওর নির্দিষ্ট অংশে জাভা ল্যাঙ্গুয়েজ আর্কিটেক্ট ব্রায়ান গোয়েটজ (Brian Goetz) আলোচনা করেছেন কীভাবে জাভার নতুন ফিচারগুলো তৈরি হয় এবং এতে সাধারণ ডেভেলপারদের মতামতের গুরুত্ব কতটুকু। বিশেষ করে Structured Concurrency -এর মতো জটিল ফিচারগুলো কেন বারবার 'Preview' অবস্থায় থাকে এবং কীভাবে কমিউনিটির ফিডব্যাক সেই ফিচারগুলোকে আরও নিখুঁত করতে সাহায্য করে, তা এখানে সহজভাবে বোঝানো হয়েছে। ১. ভালো ফিডব্যাক আসলে কী? ভিডিও রেফারেন্স: [ 34:53 ] ব্রায়ান গোয়েটজ বলছেন যে, জাভা টিম যখন কোনো নতুন ফিচারের খসড়া (Draft) বা প্রস্তাব (JEP) প্রকাশ করে, তখন তারা এমন কিছু জানতে চায় যা তারা নিজেরা আগে ভাবেনি। বিস্তারিত: একজন ডেভেলপার হিসেবে আমরা যখন কোনো নতুন ফিচার দেখি, আমাদের প্রথম প্রতিক্রিয়া হয় সেটার Syntax বা লেখার ধরন নিয়ে। কিন্তু ব্রায়ানের মতে, "এই লেখাটা কেন এমন হলো?" বা "এটা কোটলিন বা স্কালা-র মতো কেন নয়?"—এই ধরনের ফিডব্যাক খুব একটা কাজে আসে না। আসল দামী ফিডব্যাক হলো সেইটা, যা নতুন কোনো বাস্তব সমস্যা (Edge Case) তুলে ধরে। আমার চিন্তা: আপনি যদি কেবল দ...

Microservice Error Handling

একদম ঠিক বলেছেন ভাই 💯 — তুমি এখন microservice design-এর আসল beauty ধরেছো 👏 ✅ হ্যাঁ — যদি প্রতিটা service independent হয় (loosely coupled architecture), তাহলে একটা service fail করলে আরেকটা fail করবে না (at least directly না)। তবে, এখানে একটু গভীর বিষয় আছে — “independent” মানে কি logical independence, নাকি runtime independence?” এইটা বোঝা খুব জরুরি। চলো ধাপে ধাপে পরিষ্কারভাবে দেখি 👇 ⚙️ ১️⃣ Microservice Independence মানে কী? একটা system এ একাধিক service থাকে, যেমন: 🧾 Order Service 💳 Payment Service 🚚 Delivery Service ✉️ Notification Service 🔹 Logical Independence: প্রতিটা service এর নিজের data, business logic, আর deploy pipeline আলাদা। 📌 উদাহরণ: Payment service down থাকলেও Order service order create করতে পারবে (pending state এ রাখবে)। Delivery service নিজের data manage করবে, Payment এর DB access করবে না। 👉 মানে “tight coupling” নেই — service গুলা নিজের domain handle করে। 🔹 Runtime Independence: প্রতিটা service run হয় আলাদা instance/container এ। তাদের মধ্যে ...