ডিফল্টভাবে, Docker সব কিছু "/var/lib/docker"-এ সংরক্ষণ করে, যা রুট (/) পার্টিশনে অবস্থিত। আপনার কন্টেইনারগুলো বড় হলে এই ফোল্ডার দ্রুত ফুল হয়ে যেতে পারে। আপনি যদি লক্ষ্য করেন আপনার সার্ভার স্লো চলছে, ডেটা সেভ করতে ব্যর্থ হচ্ছে, বা র্যান্ডমলি ক্র্যাশ করছে, তবে এর কারণ হলো রুট পার্টিশন স্পেস আউট হয়ে গেছে। এই গাইডে, আমরা আপনার Docker ভলিউম (বা ডেটা) অন্য পার্টিশনে মুভ করার মেথডগুলো শিখব এবং রুট পার্টিশনে স্পেস ফ্রি আপ করব।
Table of Contents
কেন Docker ভলিউম অন্য পার্টিশনে মুভ করতে হয়
Docker কন্টেইনারগুলো প্রায়শই বড় পরিমাণে পেরসিস্টেন্ট ডেটা জেনারেট করে। সময়ের সাথে সাথে, এই ডেটা আপনার রুট পার্টিশনের স্টোরেজ স্পেস কনসিউম করতে পারে। Docker ভলিউম অন্য পার্টিশনে মুভ করলে আপনাকে সাহায্য করে:
- রুট ফাইলসিস্টেমে স্পেস ফ্রি আপ করতে
- ডিস্ক এক্সহশন কারণে সিস্টেম ক্র্যাশ প্রতিরোধ করতে
- বড় অ্যাপ্লিকেশন ডেটা ডেডিকেটেড স্টোরেজে স্টোর করতে
- সামগ্রিক স্টোরেজ ম্যানেজমেন্ট উন্নত করতে
উদাহরণস্বরূপ, MySQL বা PostgreSQL-এর মতো ডাটাবেস কন্টেইনার ভলিউমে গিগাবাইট পরিমাণ ডেটা স্টোর করতে পারে। সেগুলো বড় ডেডিকেটেড পার্টিশনে মুভ করলে সিস্টেম স্ট্যাবিলিটি মেইনটেইন করতে সাহায্য করে।
Docker ভলিউম ডিরেক্টরি লোকেট করুন
Docker ভলিউম মুভ করার আগে, আমাদের প্রথমে লোকেট করতে হবে Docker সিস্টেমে কোথায় সেটি স্টোর করে। নিচের কমান্ড চালান সব উপলব্ধ Docker ভলিউম লিস্ট করতে:
docker volume ls
ভলিউম নাম আইডেন্টিফাই করার পর, নিচের কমান্ড চালান স്പেসিফিক ভলিউম ইন্সপেক্ট করতে:
docker volume inspect volume_name
এই কমান্ড ভলিউম সম্পর্কে ডিটেইল্ড ইনফোর্মেশন ডিসপ্লে করে। আউটপুটে, Mountpoint ফিল্ড খুঁজুন। এটি সঠিক ডিরেক্টরি দেখায় যেখানে Docker ভলিউম ডেটা স্টোর করে।
সম্পূর্ণ Docker ডেটা রুট মুভ করুন
Docker ডেটা অন্য পার্টিশনে মুভ করার একটি উপায় হলো সম্পূর্ণ Docker স্টোরেজ ডিরেক্টরি রিলোকেট করা, যেটি ভলিউম, ইমেজ, কন্টেইনার, এবং লগস ইনক্লুড করে। এটি সবচেয়ে ক্লিন এবং সেফ মেথড যদি "/var/lib/docker" ফুল হয়ে যায়।
এই উদ্দেশ্যে, প্রথমে Docker সার্ভিস বন্ধ করুন যাতে মাইগ্রেশন করার সময় কোনো ফাইল চেঞ্জ না হয়:
sudo systemctl stop docker
এরপর, rsync কমান্ড ব্যবহার করে Docker ডেটা কপি করুন:
sudo rsync -avxP /var/lib/docker/ /path/to/new/partition/docker-data/
নোট: "/path/to/new/partition/" কে নতুন পার্টিশনের পাথে চেঞ্জ করুন যেখানে আপনি ফোল্ডারটি মাইগ্রেট করতে চান।
এই কমান্ড Docker ডিরেক্টরি কপি করে পারমিশন প্রিজার্ভ করে এবং ট্রান্সফারের সময় প্রগ্রেস দেখায়।
বিকল্পভাবে, আপনি নিচের কমান্ড ব্যবহার করতে পারেন, যা ডকার অ্যাট্রিবিউটস যেমন হার্ড লিংক, ACLs, এবং এক্সটেন্ডেড অ্যাট্রিবিউটস প্রিজার্ভ করে:
sudo rsync -aHAX --info=progress2 /var/lib/docker/ /mnt/docker-data/
এই ভার্সনটি Docker ডেটা মাইগ্রেট করার জন্য রিকমেন্ডেড কারণ এটি বেশি ফাইলসিস্টেম মেটাডেটা প্রিজার্ভ করে এবং ক্লিয়ার ওভারঅল প্রগ্রেস ইন্ডিকেটর প্রদান করে।
এখানোর পর, পুরনো ডেটা ডিরেক্টরিকে রিনেম করুন ব্যাকআপ করার জন্য ডিলিট করার আগে।
sudo mv /var/lib/docker /var/lib/docker.old
এখন, Docker-এর কনফিগারেশন আপডেট করুন ডেমন ফাইল খুলে এই কমান্ড দিয়ে:
sudo nano /etc/docker/daemon.json
এই ফাইলে নিচের কন্টেন্ট যোগ করুন:
{ "data-root": "/path/to/new/partition/docker-data" }
অবশেষে, sudo systemctl start docker দিয়ে Docker রিস্টার্ট করুন। এরপর, নিচের কমান্ড দিয়ে নতুন Docker ডেটা ডিরেক্টরি কনফার্ম করুন:
docker info | grep "Docker Root Dir"
সব ঠিক থাকলে, পুরনো ব্যাকআপ রিমুভ করুন:
sudo rm -rf /var/lib/docker.old
Docker Desktop (GUI মেথড) ব্যবহার করে সব Docker ডেটা মুভ করুন
Docker Desktop আপনাকে Disk Image Location পরিবর্তন করে সব Docker ডেটা অন্য পার্টিশনে মুভ করতে দেয়। এই অপশন Docker দ্বারা স্টোর করা সব কিছু ট্রান্সফার করে, ইমেজ, কন্টেইনার, ভলিউম, এবং বিল্ড ক্যাশে, আপনার সিস্টেমে একটি নতুন লোকেশনে।
এটি করতে, Docker Desktop খুলুন এবং Settings-এ নেভিগেট করুন, Resources → Advanced-এ যান, এবং Disk Image Location অপশন খুঁজুন।
Browse ক্লিক করুন এবং নতুন পার্টিশন বা ড্রাইভে একটি ফোল্ডার বেছে নিন যেখানে আপনি Docker-কে তার ডেটা স্টোর করতে চান, যেমন "/mnt/newdisk/docker-data"। নতুন লোকেশন সিলেক্ট করার পর, Apply & Restart ক্লিক করুন। Docker Desktop তারপর রিস্টার্ট হবে এবং সমস্ত বিদ্যমান Docker ডেটা সিলেক্টেড পার্টিশনে মুভ করবে।
নোট: এটি সব Docker ডেটা মুভ করে। বর্তমানে কোনো GUI অপশন নেই ইনডিভিজুয়াল ভলিউম মুভ করার জন্য।
শুধু স্পেসিফিক ভলিউম ডেটা রিলোকেট করুন
আপনি একটি স্পেসিফিক Docker ভলিউম অন্য পার্টিশনে মুভ করতে পারেন এবং হোস্ট বাইন্ড মাউন্ট ব্যবহার করে আপনার কন্টেইনারের সাথে ব্যবহার করতে পারেন। এই অ্যাপ্রোচ সিম্পল, সেফ, এবং ইজি টু ব্যাকআপ। ভলিউম মুভ করার আগে, সেটি ব্যবহারকারী কন্টেইনার বন্ধ করুন:
docker stop container_name
এখানোর পর, rsync ব্যবহার করে সব ডেটা নিরাপদে আপনার নতুন ডিরেক্টরিতে মুভ করুন:
sudo rsync -a /var/lib/docker/volumes/my_volume/_data/ /data/docker/my_volume/
এটি পুরনো ভলিউম থেকে সব কিছু "/data/docker/my_volume"-এ কপি করবে।
আপনার "docker-compose.yml" ফাইল এডিট করুন বাইন্ড মাউন্ট ব্যবহার করতে Docker-ম্যানেজড ভলিউমের বদলে:
services: my_service: volumes: - /data/docker/my_volume:/container/path
/container/path কে কন্টেইনারের ভেতরের পাথে রিপ্লেস করুন যেখানে ভলিউমটি মূলত মাউন্ট করা ছিল। তারপর কন্টেইনার রি-ডিপ্লয় করুন নিচের কমান্ড দিয়ে:
docker-compose up -d
উপসংহার
Docker ভলিউম বা সম্পূর্ণ Docker ডেটা ডিরেক্টরি বড় পার্টিশনে মুভ করলে আপনার রুট ফাইলসিস্টেমে স্পেস ফ্রি হয় এবং আপনার সার্ভার স্ট্যাবল থাকে। কন্টেইনারগুলো কোনো ডেটা লস ছাড়া স্মুথলি চলতে থাকে, এবং ভবিষ্যতের স্টোরেজ ম্যানেজমেন্ট অনেক সহজ হয়ে যায়।
সম্পূর্ণ Docker ডিরেক্টরি রিলোকেট করা সম্ভব না হলে, আপনি অন্যান্য মেথড দিয়ে স্পেস রিক্লেইম করতে পারেন। এগুলো شامل: অনউজড কন্টেইনার, ইমেজ, নেটওয়ার্ক, এবং ক্যাশে prune করা docker system prune বা ইনডিভিজুয়াল prune কমান্ড দিয়ে, এবং Linux বাইন্ড মাউন্ট ব্যবহার করে বড় ডিরেক্টরি মুভ করা Docker-এর রানটাইম প্রভাবিত ছাড়া।