DevOps & Microservices

Scaling Infrastructures: Deploying Multi-Container Environments with Docker Compose

একটি আধুনিক প্রডাকশন-গ্রেড প্রজেক্টে সাধারণত একাধিক আলাদা সার্ভিস বা মাইক্রোসার্ভিস একসাথে কাজ করে। উদাহরণস্বরূপ: একটি Node.js API ব্যাকএন্ড, একটি MongoDB ডাটাবেজ এবং একটি Redis মেমোরি ক্যাশিং লেয়ার। এই সার্ভিসগুলোকে আলাদা আলাদা docker run কমান্ড দিয়ে ম্যানুয়ালি নেটওয়ার্ক লিঙ্কিং করা অত্যন্ত জটিল। এই সমস্যা সমাধানের সেরা ডেভঅপ্স (DevOps) সলিউশন হলো **Docker Compose**।

Docker Compose-এর মাধ্যমে মাত্র একটি YAML কনফিগারেশন ফাইলের ভেতর পুরো আর্কিটেকচারের সমস্ত কন্টেইনার, সিক্রেট এনভায়রনমেন্ট এবং আইসোলেটেড নেটওয়ার্ক ড্রাইভ ডিফাইন করে দেওয়া যায়।

১. ডকার কম্পোজ কনফিগারেশন স্ট্রাকচার (`docker-compose.yml`)

নিচে একটি ফুল-স্ট্যাক নোড অ্যাপ্লিকেশন এবং মঙ্গোডিবি ডাটাবেজের মধ্যে সিকিউর ডকার নেটওয়ার্ক ও ডেটা ভলিউম পারসিস্টেন্স কনফিগার করার প্রফেশনাল কোড দেওয়া হলো:

version: '3.8'

services:
  # ১. কাস্টম নোড ব্যাকএন্ড সার্ভিস এপিআই
  web_api:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: production_backend_engine
    ports:
      - "5000:5000"
    environment:
      - NODE_ENV=production
      - MONGO_URI=mongodb://db_admin:secret_pass@database_node:27107/main_db?authSource=admin
    depends_on:
      - database_node
    networks:
      - private_app_network

  # ২. আইসোলেটেড ডাটাবেজ সার্ভিস কন্টেইনার
  database_node:
    image: mongo:latest
    container_name: secure_database_layer
    ports:
      - "27017:27017"
    environment:
      - MONGO_INITDB_ROOT_USERNAME=db_admin
      - MONGO_INITDB_ROOT_PASSWORD=secret_pass
    volumes:
      - database_persistent_storage:/data/db
    networks:
      - private_app_network

volumes:
  database_persistent_storage: # ডাটা যাতে কন্টেইনার রিস্টার্ট হলেও মুছে না যায়

networks:
  private_app_network:
    driver: bridge # কন্টেইনারগুলোর নিজেদের মধ্যে যোগাযোগের জন্য কাস্টম নেটওয়ার্ক গেটওয়ে

ধাপ ২: ক্লাউড সার্ভার বা লোকাল ডকার ইঞ্জিনে রান করা

কনফিগারেশন ফাইলটি লেখা হয়ে গেলে নিচের স্ট্যান্ডার্ড টার্মিনাল কমান্ডগুলোর সাহায্যে পুরো সিস্টেম ডেপ্লয়মেন্ট নিয়ন্ত্রণ করতে পারবেন:

# ১. ব্যাকগ্রাউন্ড মোডে (Detached Mode) সমস্ত কন্টেইনার একসাথে চালু করা
docker compose up -d

# ২. লাইভ রানিং কন্টেইনারগুলোর স্ট্যাটাস ও নেটওয়ার্ক গ্রিড দেখা
docker compose ps

# ৩. কোনো ডেটা লস ছাড়াই সম্পূর্ণ ক্লাস্টার অফ করা
docker compose down

প্রো-টিপ: ডকার কম্পোজ ফাইলে কখনো হার্ডকোডেড পাসওয়ার্ড বা ডাটাবেজ ক্রেডেনশিয়াল লিখবেন না। সিকিউরিটি স্ট্যান্ডার্ড বজায় রাখতে সার্ভারে একটি .env ফাইল তৈরি করুন এবং ডকার কম্পোজে সরাসরি এনভায়রনমেন্ট টোকেন লিংক (যেমন- ${MONGO_PASSWORD}) ব্যবহার করুন।