পাঠসূচি
  1. 1Docker কি? কেন শিখবো Docker? – Complete Intro in Bangla
  2. 2Docker File vs Docker Image vs Docker Container
  3. 3Docker ইনস্টলেশন - Docker Desktop on Mac
  4. 4Docker আর্কিটেকচার Explained – Client, Daemon, Images, Containers
  5. 5Hello World & Ubuntu with Docker – প্রথম Docker Container!
  6. 6Dockerfile কীভাবে কাজ করে? – লিখে ফেলি আমাদের প্রথম Dockerfile
  7. 7Docker Volumes Explained – ডেটা কিভাবে সেভ করবেন Container এ
  8. 8Docker Networks Explained – Containers কিভাবে কথা বলে একে অপরের সাথে?Planned
  9. 9Docker Compose শিখুন – Multiple Containers সহজে Run করুনPlanned
  10. 10Docker Hub & Private Registry – Image Upload এবং Pull করার উপায়Planned
  11. 11Environment Variables in Docker – Config Manage করার Best PracticePlanned
  12. 12Docker Logs & Debugging – সমস্যা সমাধান করার সহজ উপায়Planned
  13. 13Dockerfile Best Practices – Lightweight, Efficient Image তৈরি করুনPlanned
  14. 14Python/Node.js App Dockerize করে দেখাই – Step by Step ProjectPlanned
  15. 15React/Next.js Frontend Dockerize করা শিখিPlanned
  16. 16Database Dockerize করা শিখি – MySQL, PostgreSQL Use CasePlanned
  17. 17Docker Compose দিয়ে Full Stack App Deploy করুন – Real ProjectPlanned
  18. 18Docker ও Nginx দিয়ে Production Ready App বানানো শিখিPlanned
  19. 19Docker vs Podman vs VM – কোনটা কবে ব্যবহার করবেন?Planned
  20. 20Intro to Docker Swarm – Multi-host Deployments in BanglaPlanned
  21. 21Docker Security Best Practices – Container নিরাপদ রাখুনPlanned
  22. 22Top 10 Docker Commands প্রতিদিনের কাজে লাগবেPlanned
  23. 23Docker Interview Questions – চাকরির জন্য প্রস্তুতিPlanned

Docker Volumes Explained – ডেটা কিভাবে সেভ করবেন Container এ

Docker · পাঠ 7 · বাংলা · ভিডিও বাংলায়

Docker Volumes Explained – ডেটা কিভাবে সেভ করবেন Container এWatch on YouTube

ভিডিওটির ভাষা বাংলা।

Contents

Docker কন্টেইনারগুলো সাধারণত ক্ষণস্থায়ী (ephemeral) হয়। এর মানে হলো, যখন একটি কন্টেইনার ডিলিট করা হয়, তখন তার ভিতরে তৈরি করা বা পরিবর্তন করা সমস্ত ডেটাও হারিয়ে যায়। এই সমস্যা সমাধানের জন্য Docker Volume ব্যবহার করা হয়।

কন্টেইনারে ডেটা পারসিস্টেন্সের সমস্যা

আসুন, আমরা একটি উদাহরণ দিয়ে বিষয়টি বুঝি। আমরা একটি Ubuntu কন্টেইনার চালু করব এবং তার ভিতরে একটি ফাইল তৈরি করব।

১. একটি Ubuntu কন্টেইনার রান করুন:

docker run -it --name my-ubuntu ubuntu bash
  • -it: কন্টেইনারের সাথে ইন্টারেক্টিভ টার্মিনাল সেশন চালু করে।
  • --name my-ubuntu: কন্টেইনারটির একটি নাম দেয়।

২. কন্টেইনারের ভিতরে একটি ফাইল তৈরি করুন:

কন্টেইনারের টার্মিনালে নিচের কমান্ডটি চালান:

# একটি নতুন ফাইল তৈরি করুন
echo "Hello from inside the container" > /data.txt

# ফাইলটি দেখুন
cat /data.txt

আপনি Hello from inside the container আউটপুট দেখতে পাবেন। এখন exit লিখে কন্টেইনার থেকে বেরিয়ে আসুন।

৩. কন্টেইনারটি ডিলিট করুন:

docker rm my-ubuntu

এখন আমরা যদি আবার একটি নতুন Ubuntu কন্টেইনার চালাই, তাহলে আগের তৈরি করা data.txt ফাইলটি আর খুঁজে পাওয়া যাবে না। কারণ কন্টেইনার ডিলিট করার সাথে সাথে তার ডেটাও ডিলিট হয়ে গেছে।

এই সমস্যার সমাধান হলো Docker Volume।

Docker Volume কী?

Docker Volume হলো হোস্ট মেশিনের একটি বিশেষ ডিরেক্টরি যা Docker নিজে ম্যানেজ করে। এই ভলিউম আমরা এক বা একাধিক কন্টেইনারের সাথে যুক্ত (mount) করতে পারি। যখন একটি ভলিউম কন্টেইনারের সাথে মাউন্ট করা হয়, তখন সেই ভলিউমে থাকা ডেটা কন্টেইনারের ভিতরে অ্যাক্সেস করা যায় এবং কন্টেইনারের ভিতরের নির্দিষ্ট ডিরেক্টরিতে করা পরিবর্তনগুলোও সেই ভলিউমে সেভ হয়।

কন্টেইনার ডিলিট করে দিলেও ভলিউম ডিলিট হয় না, ফলে আমাদের ডেটা সুরক্ষিত থাকে।

ডেটা পারসিস্ট করার জন্য দুটি প্রধান পদ্ধতি আছে:

১. Bind Mount: হোস্ট মেশিনের যেকোনো ফাইল বা ফোল্ডারকে সরাসরি কন্টেইনারের সাথে মাউন্ট করা। ২. Named Volume: Docker দ্বারা পরিচালিত একটি ভলিউম তৈরি করে সেটি কন্টেইনারের সাথে মাউন্ট করা।

আসুন, আমরা দুটি পদ্ধতিই বিস্তারিতভাবে দেখি।

পদ্ধতি ১: Bind Mount

Bind Mount ব্যবহার করে আমরা হোস্ট মেশিনের একটি নির্দিষ্ট ডিরেক্টরিকে কন্টেইনারের একটি ডিরেক্টরির সাথে সরাসরি যুক্ত করতে পারি।

১. হোস্ট মেশিনে একটি ডিরেক্টরি তৈরি করুন:

আপনার ডেস্কটপে docker-shared-folder নামে একটি ফোল্ডার তৈরি করুন এবং তার ভিতরে একটি ফাইল রাখুন।

# ডেস্কটপে একটি ডিরেক্টরি তৈরি করুন
mkdir ~/Desktop/docker-shared-folder

# সেই ডিরেক্টরিতে একটি ফাইল তৈরি করুন
echo "Data from host machine" > ~/Desktop/docker-shared-folder/host_file.txt

২. Bind Mount সহ কন্টেইনার রান করুন:

এখন আমরা একটি কন্টেইনার রান করব এবং হোস্টের ~/Desktop/docker-shared-folder ডিরেক্টরিকে কন্টেইনারের /app/data ডিরেক্টরির সাথে মাউন্ট করব।

docker run -it --name my-bound-container -v ~/Desktop/docker-shared-folder:/app/data ubuntu bash
  • -v ~/Desktop/docker-shared-folder:/app/data: এখানে -v ফ্ল্যাগটি ভলিউম মাউন্ট করার জন্য ব্যবহৃত হয়।
    • ~/Desktop/docker-shared-folder: এটি আপনার ডেস্কটপে থাকা ফোল্ডারের পাথ।
    • /app/data: এটি কন্টেইনারের ভিতরের ডিরেক্টরি যেখানে হোস্টের ফোল্ডারটি মাউন্ট হবে।
    • :: এটি হোস্ট পাথ এবং কন্টেইনার পাথের মধ্যে বিভাজক হিসেবে কাজ করে।

৩. ডেটা পরীক্ষা করুন:

কন্টেইনারের টার্মিনালে নিচের কমান্ডগুলো চালান:

# কন্টেইনারের মাউন্টেড ডিরেক্টরিতে যান
cd /app/data

# ফাইলগুলো দেখুন
ls

আপনি host_file.txt ফাইলটি দেখতে পাবেন। এখন কন্টেইনারের ভিতর থেকে একটি নতুন ফাইল তৈরি করুন:

echo "Data from container" > container_file.txt
ls

এখন container_file.txt ফাইলটিও দেখা যাবে। exit লিখে বেরিয়ে আসুন।

এবার আপনার হোস্ট মেশিনের my-app-data ফোল্ডারে দেখুন, container_file.txt ফাইলটি সেখানেও তৈরি হয়ে গেছে।

এভাবে Bind Mount ব্যবহার করে হোস্ট এবং কন্টেইনারের মধ্যে ডেটা শেয়ার করা যায় এবং ডেটা পারসিস্ট করা যায়।

পদ্ধতি ২: Named Volume

Named Volume হলো Docker দ্বারা পরিচালিত ভলিউম। এক্ষেত্রে আমরা Docker-কে একটি ভলিউম তৈরি করতে বলি এবং Docker তার নিজস্ব স্টোরেজ লোকেশনে সেই ভলিউম ম্যানেজ করে। এটি Bind Mount-এর চেয়ে বেশি নিরাপদ এবং ফ্লেক্সিবল।

১. একটি Named Volume তৈরি করুন:

docker volume create my-data-volume

এই কমান্ডটি my-data-volume নামে একটি ভলিউম তৈরি করবে।

২. Named Volume সহ কন্টেইনার রান করুন:

এখন আমরা এই ভলিউমটি একটি কন্টেইনারের সাথে মাউন্ট করব।

docker run -it --name my-volume-container -v my-data-volume:/app/data ubuntu bash
  • -v my-data-volume:/app/data: এখানে আমরা হোস্টের পাথের পরিবর্তে ভলিউমের নাম (my-data-volume) ব্যবহার করেছি।

৩. ডেটা পরীক্ষা করুন:

কন্টেইনারের টার্মিনালে যান এবং একটি ফাইল তৈরি করুন:

cd /app/data
echo "This is saved in a named volume" > test.txt
cat test.txt

exit লিখে বেরিয়ে আসুন এবং কন্টেইনারটি ডিলিট করুন:

docker rm my-volume-container

৪. ডেটা পুনরুদ্ধার করুন:

এখন আমরা একটি নতুন কন্টেইনার রান করব এবং একই ভলিউম মাউন্ট করব:

docker run -it --name another-container -v my-data-volume:/app/data ubuntu bash

কন্টেইনারের টার্মিনালে গিয়ে দেখুন:

ls /app/data

আপনি test.txt ফাইলটি দেখতে পাবেন। এর মানে হলো, কন্টেইনার ডিলিট হয়ে গেলেও আমাদের ডেটা ভলিউমে সুরক্ষিত আছে।

ভলিউম ম্যানেজমেন্ট:

  • সব ভলিউম দেখুন: docker volume ls
  • একটি ভলিউম সম্পর্কে বিস্তারিত জানুন: docker volume inspect my-data-volume
    • এই কমান্ডটি ভলিউম সম্পর্কে বিস্তারিত তথ্য দেখাবে, যার মধ্যে Mountpoint একটি গুরুত্বপূর্ণ অংশ। Mountpoint হলো হোস্ট মেশিনের সেই ফিজিক্যাল পাথ যেখানে আপনার ভলিউমের ডেটা সেভ করা হয়।
  • একটি ভলিউম ডিলিট করুন: docker volume rm my-data-volume (কেবলমাত্র কোনো কন্টেইনার দ্বারা ব্যবহৃত না হলেই ডিলিট করা যাবে)

এভাবেই আমরা Docker Volume ব্যবহার করে আমাদের অ্যাপ্লিকেশনের ডেটা স্থায়ীভাবে সংরক্ষণ করতে পারি।

কোনো ভুল পেয়েছেন? LinkedIn-এ জানান।