ডেভেলপারের লোকাল মেশিন থেকে শুরু করে ক্লাউড সার্ভার পর্যন্ত— অ্যাপ্লিকেশন যেন সব জায়গায় হুবহু একই পরিবেশে (Environment) চলতে পারে, তা নিশ্চিত করাই হলো ডকারের কাজ।
ধরি, আপনি লোকাল মেশিনে (Windows) Node.js v20 এবং MongoDB v6 দিয়ে একটি প্রজেক্ট বানালেন। আপনার পিসিতে সব পারফেক্ট কাজ করছে। এরপর আপনি কোডটি আপনার ক্লায়েন্টের উবুন্টু (Ubuntu) প্রোডাকশন সার্ভারে পাঠালেন। কিন্তু সেখানে Node.js v14 ইন্সটল করা আছে। ফলে কোড রান করার সাথে সাথেই সার্ভার ক্র্যাশ!
Docker এর সলিউশন: ডকার আপনার সোর্স কোড, Node.js-এর নির্দিষ্ট ভার্সন, এবং অন্যান্য লাইব্রেরিগুলোকে একটি বাক্সে (Image) বন্দি করে ফেলে। এই বাক্সটিকে যখন চালানো হয়, তখন এটি একটি Container এ পরিণত হয়। এই কন্টেইনার লোকাল পিসি হোক বা ক্লাউড সার্ভার— সব জায়গায় হুবহু একই পরিবেশে চলবে। অপারেটিং সিস্টেম কী আছে, তা নিয়ে আর কোনো মাথাব্যথা নেই!
নিচে একটি অ্যাডভান্সড Multi-stage Dockerfile এবং একটি docker-compose.yml ফাইলের উদাহরণ দেওয়া হলো, যা একটি ফুল-স্ট্যাক অ্যাপ এবং Redis সার্ভারকে একসাথে রান করাতে ব্যবহৃত হয়।
# Stage 1: Build FROM node:18-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build # Stage 2: Production (Lighter Image) FROM node:18-alpine WORKDIR /app COPY --from=builder /app/dist ./dist COPY package*.json ./ RUN npm install --only=production EXPOSE 3000 CMD ["npm", "start"]
version: '3.8' services: web-api: build: . ports: - "3000:3000" environment: - NODE_ENV=production - REDIS_URL=redis://cache:6379 depends_on: - cache cache: image: redis:alpine ports: - "6379:6379"
প্রথমে docker build এ ক্লিক করে সোর্স কোড থেকে ইমেজ (Image) তৈরি করুন। এরপর docker run এ ক্লিক করে সেই ইমেজ থেকে লাইভ কন্টেইনার (Container) স্টার্ট করুন এবং পোর্ট ম্যাপিং দেখুন!