🚀 Docker Bind Mount ও Anonymous Volume ব্যবহার করে Local Codebase এর সাথে Container যুক্ত করা —

Ashik BhuyanAshik Bhuyan
3 min read

➡️ যখন আমরা bind mount ব্যবহার করি, তখন আমরা host machine-এর নির্দিষ্ট কোনো ফোল্ডার ঠিক করে দিই, যেটা কন্টেইনারের কোনো ফোল্ডারের সঙ্গে সরাসরি যুক্ত হয়ে যায়। এতে কন্টেইনারে পরিবর্তন করলে লোকাল ফাইলেও সেটা সাথে সাথে দেখা যায় — একেবারে রিয়েল টাইমে।

🧠 বিষয়টা কী?
ডকার কন্টেইনার ব্যবহারের সময় আমরা অনেকসময় চাই কন্টেইনারের কোনো ফোল্ডার সরাসরি লোকাল (host machine) এর কোনো ফোল্ডারের সাথে যুক্ত থাকুক।
যাতে কন্টেইনারের ভিতরে কিছু পরিবর্তন করলে সেটি সঙ্গে সঙ্গে লোকাল ফাইলেও দেখা যায়। একে বলা হয় Bind Mount — আর এই ব্যবস্থায় আপনি পুরোপুরি ঠিক করেন, কোন লোকাল path কন্টেইনারের কোন path এর সাথে যুক্ত হবে।
এটি বিশেষভাবে development environment-এ ব্যবহৃত হয়, কারণ এতে আপনি রিয়েল টাইমে কোড বা ডেটা পরিবর্তন করতে পারেন।

🔍 Docker Run Command এর বিশ্লেষণ

docker run -p 5001:5000 --name ts-container  -v ts-docker-logs://app/logs -w //app -v "//$(pwd)"://app -v //app/node_modules --rm  ts-docker:v2

 docker run -p 5001:5000 --name ts-container \\ -v ts-docker-logs://app/logs \\
  -w //app \\
  -v "//$(pwd)"://app \\
  -v //app/node_modules \\
  --rm ts-docker:v2

এখানে কী হচ্ছে এক নজরে:

Flagকাজ
-p 5001:5000লোকাল পোর্ট 5001 কে কন্টেইনারের পোর্ট 5000 এর সাথে যুক্ত করা হয়েছে
--name ts-containerকন্টেইনারের নাম দেওয়া হয়েছে ts-container
-v ts-docker-logs://app/logsNamed Volume: ts-docker-logs কে কন্টেইনারের /app/logs path-এ মাউন্ট করা
-w //appওয়ার্কিং ডিরেক্টরি হিসেবে /app সেট করা
-v "//$(pwd)"://appBind Mount: লোকাল মেশিনের বর্তমান ডিরেক্টরি ($(pwd)) কে কন্টেইনারের /app path এর সাথে যুক্ত করা হয়েছে
-v //app/node_modulesAnonymous Volume ব্যবহার করে কন্টেইনারের /app/node_modules path কে হোস্টের বাইরের আলাদা volume-এ রাখা হয়েছে
--rmকাজ শেষ হলে কন্টেইনারটি স্বয়ংক্রিয়ভাবে ডিলিট হয়ে যাবে
ts-docker:v2এই ইমেজ ব্যবহার করে কন্টেইনার রান করা হচ্ছে

🧾 Anonymous Volume কেন ব্যবহার করা হয় v /app/node_modules এর ক্ষেত্রে?


-v /app/node_modules

➡️ এই লাইনের মাধ্যমে Docker একটি Anonymous Volume তৈরি করে কন্টেইনারের /app/node_modules এর উপর।

🔹 কেন Anonymous Volume?

কারণ, container delete করলে এই volume-ও delete হয়ে যাবে। তখন node_modules লোকাল মেশিনে রাখার দরকার নেই — কন্টেইনার নতুন করে রান করলে আবার fresh করে node_modules তৈরি হয়ে যাবে।

🔹 Named volume কেন ব্যবহার করিনি?

Named volume হলে container delete করার পরও volume থেকে যাবে। কিন্তু আমরা চাই না node_modules persist করুক — তাই Anonymous Volume ই বেশি উপযোগী এখানে।

🚀 VS Code দিয়ে সরাসরি Container রান করা (Using Devcontainer)

✅ Step 1: Dev Containers Extension ইনস্টল করা

VS Code-এ নিচের extension টি ইনস্টল করো:

🔌 Extension Name: "Dev Containers"

(Publisher: Microsoft)


✅ Step 2: .devcontainer ফোল্ডার তৈরি

প্রজেক্টের root ডিরেক্টরিতে একটি .devcontainer নামের ফোল্ডার তৈরি করো।


✅ Step 3: devcontainer.json ফাইল তৈরি

.devcontainer ফোল্ডারের ভিতরে devcontainer.json নামের একটি ফাইল তৈরি করো এবং এর মধ্যে নিচের মতো কনফিগারেশন দাও:


{
  "name": "ts-docker-dev",
  "image": "ts-docker:v2",
  "appPort": [5000],
  "runArgs": [
    "-p", "5001:5000",
    "-v", "ts-docker-logs:/app/logs",
    "-v", "${localWorkspaceFolder}:/app",
    "-v", "/app/node_modules"
  ],
  "workspaceFolder": "/app"
}

💡 এখানে ${localWorkspaceFolder} automatically তোমার প্রজেক্ট লোকাল path কে bind mount করে /app হিসেবে কন্টেইনারে পাঠিয়ে দেবে।


✅ Step 4: Container-এ প্রজেক্ট খুলতে

VS Code এ Command Palette (Ctrl + Shift + P) খুলে:

Dev Containers: Reopen in Container

এই অপশন সিলেক্ট করো। VS Code তোমার কনফিগার করা ইমেজ দিয়ে container রান করবে, port bind করবে, volume attach করবে — সব কিছু স্বয়ংক্রিয়ভাবে!

root@35582b6cd210:/app#

🐳 এখন তুমি কন্টেইনারের ভিতরের আলাদা লিনাক্স environment-এ (root@container-id:/app#), কিন্তু কাজগুলো লোকাল ফাইলেই সেভ হচ্ছে।

🐳 কী হচ্ছে মূলত?

এখন আমি আসলে কন্টেইনারের ভিতরে আছি।

VS Code-এর Dev Containers এক্সটেনশনটা এই কন্টেইনারের ভেতরের কোড, ফাইল, এনভায়রনমেন্ট — সবকিছুকে আমার লোকাল VS Code-এর ভেতরে নিয়ে এসেছে।

ফলে আমি কন্টেইনারে কাজ করলেও, মনে হচ্ছে যেন লোকালেই সব কিছু করছি।

0
Subscribe to my newsletter

Read articles from Ashik Bhuyan directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Ashik Bhuyan
Ashik Bhuyan

A forward-thinking software engineer. who can work as a web developer in dynamic environments. Strong knowledge of MERN Stack with vast experience in building Web Applications, using React.js, Next.js, and Redux for the client side, Node.js/Express for the server side, and MongoDB, SQL Server for the database.