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

➡️ যখন আমরা 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/logs | Named Volume: ts-docker-logs কে কন্টেইনারের /app/logs path-এ মাউন্ট করা |
-w //app | ওয়ার্কিং ডিরেক্টরি হিসেবে /app সেট করা |
-v "//$(pwd)"://app | Bind Mount: লোকাল মেশিনের বর্তমান ডিরেক্টরি ($(pwd) ) কে কন্টেইনারের /app path এর সাথে যুক্ত করা হয়েছে |
-v //app/node_modules | Anonymous 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-এর ভেতরে নিয়ে এসেছে।
ফলে আমি কন্টেইনারে কাজ করলেও, মনে হচ্ছে যেন লোকালেই সব কিছু করছি।
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.