🌐 Detecting your location…

2026 সালে উত্পাদনে একটি ডকার কন্টেইনার কীভাবে স্থাপন করবেন: একটি ব্যবহারিক গাইড

⏱️2 min read  ·  237 words

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

📋 Table of Contents

  1. ধাপ 1: একটি প্রোডাকশন-রেডি ডকারফাইল লিখুন
  2. ধাপ 2: এনভায়রনমেন্ট ভেরিয়েবলের সাথে কনফিগারেশন পরিচালনা করুন
  3. ধাপ 3: একটি স্বাস্থ্য পরীক্ষা যোগ করুন
  4. ধাপ 4: একটি পরিষ্কার সেটআপের জন্য ডকার কম্পোজ ব্যবহার করুন
  5. ধাপ 5: সামনে একটি বিপরীত প্রক্সি রাখুন
  6. ধাপ 6: ডাউনটাইম ছাড়াই আপডেটগুলি স্থাপন করুন
  7. একটি লগ ড্রাইভার কনফিগার করুন যাতে লগগুলি টেকসই কোথাও যায় এবং ক্যাপ লগের আকার যাতে একটি ধারক ডিস্কটি পূরণ করতে না পারে। একটি শখের প্রকল্পের বাইরে যেকোনো কিছুর জন্য একটি কেন্দ্রীয় স্থানে (লোকি, ক্লাউডওয়াচ, বা একটি ELK স্ট্যাক) শিপ লগ করুন৷
  8. প্রশ্ন: আমি কি উৎপাদনের একটি পাত্রে আমার ডাটাবেস চালানো উচিত?
  9. উপসংহার

ধাপ 1: একটি প্রোডাকশন-রেডি ডকারফাইল লিখুন

একটি মাল্টি-স্টেজ বিল্ড দিয়ে শুরু করুন যাতে আপনার চূড়ান্ত ছবিতে শুধুমাত্র যা চালানোর প্রয়োজন তা থাকে – টুল এবং ডেভেলপ নির্ভরতা তৈরি না করে। ছোট ছবি দ্রুত টান, দ্রুত শুরু, এবং একটি ছোট আক্রমণ পৃষ্ঠ আছে.

# Build stage
FROM node:22-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# Runtime stage
FROM node:22-alpine
WORKDIR /app
ENV NODE_ENV=production
COPY package*.json ./
RUN npm ci --omit=dev
COPY --from=build /app/dist ./dist
USER node
EXPOSE 3000
CMD ["node", "dist/server.js"]

নোট করুনUSER node লাইন — প্রোডাকশন পাত্রে রুট হিসাবে চালাবেন না। একটি অ-সুবিধাপ্রাপ্ত ব্যবহারকারী হিসাবে চলমান ক্ষতি সীমিত যদি অ্যাপ্লিকেশন আপস করা হয়.

ধাপ 2: এনভায়রনমেন্ট ভেরিয়েবলের সাথে কনফিগারেশন পরিচালনা করুন

আপনার ইমেজ মধ্যে গোপন বেক না. এনভায়রনমেন্ট ভেরিয়েবল বা সিক্রেট ম্যানেজারের মাধ্যমে রানটাইমে কনফিগারেশন এবং সিক্রেট পাস করুন। স্টেজিং এবং প্রোডাকশন জুড়ে আপনার ইমেজ অভিন্ন হওয়া উচিত; শুধুমাত্র পরিবেশ ভিন্ন।

docker run -d \
  --name myapp \
  --env-file /etc/myapp/production.env \
  --restart unless-stopped \
  -p 3000:3000 \
  myapp:1.4.0

রাখুন.env ছবি বন্ধ এবং সংস্করণ নিয়ন্ত্রণের বাইরে ফাইল. একটি একক হোস্টে, লক-ডাউন অনুমতি সহ একটি env ফাইল কাজ করে; স্কেলে, ডকার সিক্রেটস, AWS সিক্রেটস ম্যানেজার বা আপনার প্ল্যাটফর্মের গোপন স্টোর ব্যবহার করুন।

ধাপ 3: একটি স্বাস্থ্য পরীক্ষা যোগ করুন

একটি স্বাস্থ্য পরীক্ষা ডকারকে (এবং আপনার অর্কেস্ট্রেটর বা বিপরীত প্রক্সি) জানতে দেয় যে কন্টেইনারটি আসলে ট্র্যাফিক পরিবেশনের জন্য প্রস্তুত কিনা, শুধু চলমান নয়। একটি শেষ বিন্দু যোগ করুন যেমন/health আপনার অ্যাপে, তারপর চেক ঘোষণা করুন।

HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \
  CMD wget -qO- http://localhost:3000/health || exit 1

এই জায়গায়,docker ps দেখায় একটিhealthy or unhealthy স্ট্যাটাস, এবং অর্কেস্ট্রেটররা ট্র্যাফিকের কন্টেইনারগুলিতে রাউটিং এড়াতে পারে যেগুলি এখনও উষ্ণ হচ্ছে বা খারাপ হয়ে গেছে।

ধাপ 4: একটি পরিষ্কার সেটআপের জন্য ডকার কম্পোজ ব্যবহার করুন

এমনকি একটি একক সার্ভারেও, রচনা আপনার স্থাপনাকে পুনরুত্পাদনযোগ্য এবং স্ব-নথিভুক্ত করে তোলে। এটি একটি ফাইলে চিত্র, পোর্ট, পরিবেশ, পুনঃসূচনা নীতি এবং নির্ভরতা ক্যাপচার করে।

services:
  app:
    image: myapp:1.4.0
    restart: unless-stopped
    env_file: /etc/myapp/production.env
    expose:
      - "3000"
    healthcheck:
      test: ["CMD", "wget", "-qO-", "http://localhost:3000/health"]
      interval: 30s
      timeout: 3s
      retries: 3
    depends_on:
      - db
  db:
    image: postgres:17-alpine
    restart: unless-stopped
    env_file: /etc/myapp/db.env
    volumes:
      - pgdata:/var/lib/postgresql/data
volumes:
  pgdata:

পোস্টগ্রেসের জন্য নামযুক্ত ভলিউমটি নোট করুন — কন্টেইনার স্টোরেজ ক্ষণস্থায়ী, তাই আপনার যে কোনও ডেটা অবশ্যই ভলিউমের মধ্যে থাকবে, কন্টেইনারের লেখার যোগ্য স্তরের ভিতরে থাকবে না।

ধাপ 5: সামনে একটি বিপরীত প্রক্সি রাখুন

আপনার অ্যাপের পোর্ট সরাসরি ইন্টারনেটে প্রকাশ করবেন না। TLS বন্ধ করতে, নিরাপত্তা শিরোনাম যোগ করতে এবং রুট ট্রাফিকের জন্য সামনে একটি বিপরীত প্রক্সি (Nginx, Caddy, বা Traefik) রাখুন। ক্যাডি জনপ্রিয় কারণ এটি স্বয়ংক্রিয়ভাবে HTTPS শংসাপত্রগুলি প্রাপ্ত এবং পুনর্নবীকরণ করে৷

# Caddyfile
myapp.example.com {
    reverse_proxy app:3000
    encode gzip
    header {
        Strict-Transport-Security "max-age=31536000; includeSubDomains"
        X-Content-Type-Options nosniff
    }
}

প্রক্সি HTTPS এবং শিরোনামগুলি পরিচালনা করে যখন আপনার অ্যাপটি প্রাইভেট ডকার নেটওয়ার্কের মধ্যে প্লেইন HTTP-এর মাধ্যমে অনুরোধ পরিবেশনের উপর ফোকাস করে।

ধাপ 6: ডাউনটাইম ছাড়াই আপডেটগুলি স্থাপন করুন

নিষ্পাপ আপডেট — পুরানো কন্টেইনার বন্ধ করুন, নতুন শুরু করুন — ফাঁকের সময় ট্র্যাফিক কমে যায়। শূন্য-ডাউনটাইম আপডেটের জন্য, নতুন কন্টেইনারটি শুরু করুন, এটি স্বাস্থ্য পরীক্ষা পাস করার জন্য অপেক্ষা করুন, তারপর প্রক্সিটি স্যুইচ করুন এবং পুরানোটিকে সরিয়ে দিন। Traefik এবং orchestators এটি স্বয়ংক্রিয়; একটি সাধারণ সেটআপে আপনি সংক্ষিপ্তভাবে দুটি সংস্করণ চালাতে পারেন এবং কাটাতে পারেন।

# Pull the new version and recreate with Compose
docker compose pull app
docker compose up -d --no-deps app
# Compose starts the new container; verify health before removing old

সর্বদা একটি নির্দিষ্ট সংস্করণ ( ) দিয়ে ছবি ট্যাগ করুন, কখনইmyapp:1.4.0এর উপর নির্ভর করবেন না৷ উৎপাদনে স্পষ্ট ট্যাগগুলি রোলব্যাকগুলিকে তুচ্ছ করে তোলে — আপনি ঠিক জানেন কোন সংস্করণটি পুনরায় স্থাপন করতে হবে৷latestধাপ 7: লগিং এবং মনিটরিং

একটি লগ ড্রাইভার কনফিগার করুন যাতে লগগুলি টেকসই কোথাও যায় এবং ক্যাপ লগের আকার যাতে একটি ধারক ডিস্কটি পূরণ করতে না পারে। একটি শখের প্রকল্পের বাইরে যেকোনো কিছুর জন্য একটি কেন্দ্রীয় স্থানে (লোকি, ক্লাউডওয়াচ, বা একটি ELK স্ট্যাক) শিপ লগ করুন৷

প্রায়শই জিজ্ঞাসিত প্রশ্ন

docker run -d \
  --log-driver json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  myapp:1.4.0

প্রশ্ন: আমি কি উৎপাদনের একটি পাত্রে আমার ডাটাবেস চালানো উচিত?

উত্তর: ছোট প্রকল্পের জন্য, হ্যাঁ — অধ্যবসায় এবং নিয়মিত ব্যাকআপের জন্য একটি নামযুক্ত ভলিউম সহ। সমালোচনামূলক বা উচ্চ-স্কেল যেকোনো কিছুর জন্য, একটি পরিচালিত ডাটাবেস (RDS, ক্লাউড এসকিউএল) যথেষ্ট পরিমাণে অপারেশনাল ঝুঁকি হ্রাস করে।
প্রশ্ন: কেন শুধু সরাসরি অ্যাপ পোর্ট প্রকাশ করবেন না?

উত্তর: আপনি রাউটিং পরিচালনা করার জন্য TLS সমাপ্তি, নিরাপত্তা শিরোনাম এবং একটি একক পয়েন্ট হারাবেন। একটি বিপরীত প্রক্সি আপনাকে একটি হোস্টে একাধিক অ্যাপ চালাতে এবং কেন্দ্রীয়ভাবে শংসাপত্রগুলি পরিচালনা করতে দেয়।
প্রশ্ন: আমি কীভাবে চিত্রের বাইরে গোপনীয়তা রাখব?

A: রানটাইমে এগুলিকে এনভায়রনমেন্ট ভেরিয়েবল, লক করা অনুমতি সহ একটি env ফাইল বা সিক্রেট ম্যানেজারের মাধ্যমে পাস করুন৷ কখনই না
ছবিতে একটি গোপন ফাইল বা ডকারফাইলে হার্ডকোড শংসাপত্র।COPYপ্রশ্ন: আমি কোন পুনঃসূচনা নীতি ব্যবহার করব?

বেশিরভাগ পরিষেবার জন্য — এটি ব্যর্থ হলে এবং হোস্ট রিবুট করার পরে কন্টেইনার পুনরায় চালু করে, কিন্তু একটি ম্যানুয়াল স্টপকে সম্মান করে।
A: unless-stoppedপ্রশ্ন: আমি কীভাবে একটি খারাপ স্থাপনা ফিরিয়ে আনব?

উত্তর: যেহেতু আপনি সংস্করণ অনুসারে ছবি ট্যাগ করেছেন, তাই পূর্ববর্তী ট্যাগ ( পুরানো সংস্করণের সাথে) পুনরায় স্থাপন করুন। এই কারণেই
উত্তর: যেহেতু আপনি সংস্করণ অনুসারে ছবি ট্যাগ করেছেন, তাই পূর্ববর্তী ট্যাগ ( পুরানো সংস্করণের সাথে) পুনরায় স্থাপন করুন। এই কারণেইdocker compose up -dউত্তর: যেহেতু আপনি সংস্করণ অনুসারে ছবি ট্যাগ করেছেন, তাই পূর্ববর্তী ট্যাগ ( পুরানো সংস্করণের সাথে) পুনরায় স্থাপন করুন। এই কারণেইlatestউত্পাদনে বিপজ্জনক – এটি রোলব্যাকগুলিকে অস্পষ্ট করে তোলে।

উপসংহার

ডকারকে প্রোডাকশনে মোতায়েন করা নিরাপদে কয়েকটি শৃঙ্খলায় নেমে আসে:একটি নন-রুট ব্যবহারকারী হিসাবে চলমান একটি চর্বিহীন মাল্টি-স্টেজ ইমেজ তৈরি করুন, রানটাইমে কনফিগারেশন এবং গোপনীয়তাগুলি ইনজেকশন করুন, স্বাস্থ্য পরীক্ষা যোগ করুন, TLS-এর জন্য একটি বিপরীত প্রক্সি সহ অ্যাপের সামনে, পরিষ্কার রোলব্যাকের জন্য সংস্করণ অনুসারে ছবি ট্যাগ করুন এবং আপনার লগ ক্যাপ করুন. এটি একটি রচনা ফাইলে ক্যাপচার করুন যাতে সেটআপটি পুনরুত্পাদনযোগ্য হয়। এই মৌলিক বিষয়গুলি সঠিকভাবে পান এবং আপনার কন্টেইনারাইজড অ্যাপ নির্ভরযোগ্যভাবে চলবে, ট্রাফিক না কমিয়েই আপডেট হবে এবং কিছু ভুল হলে ফিরে আসা সহজ হবে৷

MD Rafikul Islam

Written by

MD Rafikul Islam is a software developer and the editor of TechPulse. He writes about developer tooling, hardware, and the practical decisions that come up in day-to-day engineering work — which laptop to buy, which framework to commit to, why a build broke at 2am. He tests the tools he writes about and says plainly when something is not worth the money. Corrections and corrections requests are welcome at rony.yf25@gmail.com.

✍️ Leave a Comment

Your email address will not be published. Required fields are marked *

🌐 Read in:🇬🇧 English🇩🇪 Deutsch🇧🇷 Português🇸🇦 العربية🇮🇳 हिन्दी🇧🇩 বাংলা