Skip to content

Docker Volumes & Persistence: ডেটা স্থায়ী করার উপায় 💾

ডকার কন্টেইনার ডিফল্টভাবে "Ephemeral" বা অস্থায়ী। অর্থাৎ, কোনো কন্টেইনার ডিলিট করে দিলে তার ভেতরের সব ডেটাও মুছে যায়। কিন্তু ডাটাবেস বা ইউজার ফাইলের মতো গুরুত্বপূর্ণ ডেটা আমাদের স্থায়ীভাবে সেভ রাখা প্রয়োজন। এর জন্যই ডকার Volumes এবং Bind Mounts ব্যবহার করা হয়।


১. Volume কি এবং কেন প্রয়োজন?

Volume হলো ডকার কন্টেইনারের বাইরের একটি স্টোরেজ যা হোস্ট মেশিনের ডকার ম্যানেজড ডিরেক্টরিতে থাকে।

  • কেন প্রয়োজন: কন্টেইনার স্টপ বা ডিলিট হয়ে গেলেও ডেটা হারায় না। একাধিক কন্টেইনারের মধ্যে ডেটা শেয়ার করা যায়।

২. ভলিউমের প্রকারভেদ (Volume Types)

ডকারে প্রধানত তিন ধরনের ভলিউম রয়েছে:

ক) Named Volumes (সবচেয়ে জনপ্রিয়)

ডকার নিজেই এই ভলিউম ম্যানেজ করে। আপনি শুধু একটি নাম দেন (যেমন: db_data)। এটি প্রোডাকশন এনভায়রনমেন্টের জন্য সেরা।

  • লোকেশন: /var/lib/docker/volumes/ (Linux-এ)।

খ) Anonymous Volumes

এগুলোর কোনো নির্দিষ্ট নাম থাকে না। কন্টেইনার ডিলিট হলে এগুলো সাধারণত হারিয়ে যায় (যদি না যত্ন করে রাখা হয়)। টেম্পোরারি স্টোরেজের জন্য ব্যবহৃত হয়।

গ) Bind Mounts

হোস্ট মেশিনের যেকোনো ফোল্ডার বা ফাইল কন্টেইনারের সাথে সরাসরি কানেক্ট করা হয়। ডেভেলপমেন্টের সময় এটি সবচেয়ে বেশি ব্যবহৃত হয় (হট রিলোডিং-এর জন্য)।

  • লোকেশন: হোস্ট মেশিনের যেকোনো জায়গা (যেমন: C:\my-project বা /home/user/app).

ঘ) tmpfs Mounts (শুধুমাত্র Linux-এ)

এটি ডেটা হোস্ট বা কন্টেইনারের ডিস্কে সেভ না করে সরাসরি হোস্ট মেশিনের RAM বা মেমোরিতে সেভ করে। কন্টেইনার স্টপ হলে এই ডেটা হারায়। এটি পাসওয়ার্ড বা সেনসিটিভ ডেটা সাময়িকভাবে রাখার জন্য খুব দ্রুত কাজ করে।


৩. Volume Drivers

ডিফল্টভাবে ডকার local ড্রাইভার ব্যবহার করে। তবে বড় প্রজেক্টে ডেটা ক্লাউড বা রিমোট স্টোরেজে রাখার জন্য বিভিন্ন ড্রাইভার ব্যবহার করা যায়:

  • Cloud Drivers: AWS EBS, Azure File Storage, GCE Persistent Disk.
  • Network Drivers: NFS, Samba/CIFS.
  • SSHFS: SSH-এর মাধ্যমে অন্য সার্ভারের স্টোরেজ ব্যবহার করা।

৪. গুরুত্বপূর্ণ ভলিউম কমান্ড (CLI)

কাজকমান্ড
Create Volumedocker volume create my_vol
List Volumesdocker volume ls
Inspect Volumedocker volume inspect my_vol
Remove Volumedocker volume rm my_vol
Remove Unuseddocker volume prune

৪. প্র্যাকটিক্যাল ব্যবহার উদাহরণ

Named Volume ব্যবহার করে কন্টেইনার চালানো:

bash
docker run -d --name mydb -v my_data:/var/lib/mysql mysql:latest

এখানে my_data হলো একটি Named Volume।

Bind Mount ব্যবহার করে ডেভেলপমেন্ট চালু করা:

bash
docker run -d --name myapp -v $(pwd):/app node:alpine

এখানে বর্তমান ফোল্ডার ($(pwd)) সরাসরি কন্টেইনারের /app ফোল্ডারে মাউন্ট করা হয়েছে।


৫. Bind Mount vs Named Volume

ফিচারNamed VolumeBind Mount
ম্যানেজমেন্টডকার ম্যানেজ করেইউজার নিজে ম্যানেজ করে
পোর্টেবিলিটিঅনেক বেশিহোস্টের পাথ-এর ওপর ডিপেন্ডেন্ট
ব্যবহারপ্রোডাকশন/ডাটাবেসলোকাল ডেভেলপমেন্ট

IMPORTANT

প্রোডাকশন ডাটাবেজের জন্য সবসময় Named Volumes ব্যবহার করুন। আর কোড পরিবর্তনের সাথে সাথে কন্টেইনার রিফ্রেশ করার জন্য Bind Mounts ব্যবহার করুন।

Released under the MIT License.