ডকার ভলিউম ব্যাকআপ এবং পুনরুদ্ধার


23

আমি একটি CentOS 6.4 সার্ভারে কিছু পরিষেবা মোতায়েনের জন্য ডকার ব্যবহার করছি এবং তারা কীভাবে ডেটা উত্পন্ন করে তা সঠিকভাবে ব্যাকআপ করবেন কীভাবে তা নির্ধারণ করার চেষ্টা করছি।

উদাহরণস্বরূপ, পরিষেবাগুলির মধ্যে একটি হ'ল একটি ওয়েব অ্যাপ্লিকেশন যেখানে ব্যবহারকারীরা ফাইল আপলোড করতে পারেন। এই ধারকটির জন্য, আমার একটি /filesভলিউম রয়েছে যা আমি ব্যাকআপ করতে চাই। হোস্ট মাউন্টগুলি দেখে মনে হচ্ছে যে তারা কিছুটা ভ্রূণ হয়েছে, কারণ এই জাতীয় মাউন্ট কোনওভাবেই পোর্টেবল নয় - যেমনটি এই ব্লগ পোস্টে এবং ভলিউমের জন্য ডকার ডকুমেন্টেশনতে বলা আছে

আমি একই ব্লগ পোস্ট থেকে জানি যে ভলিউমে ফাইলগুলি অ্যাক্সেস করার জন্য আমার কাছে হোস্ট মাউন্টের দরকার নেই , আমি docker inspectফাইলগুলি কোথায় তা জানতে ব্যবহার করতে পারি ।

তবে এখানে আমার সমস্যা: আমি ধারকগুলি এবং তার সাথে যুক্ত ভলিউমগুলি তৈরি করার জন্য প্রয়োজনীয় ডকস্পাইলগুলি ব্যাক আপ করার বিষয়ে ভাবছিলাম। আমাকে ব্যাকআপ থেকে সবকিছু পুনরুদ্ধার করতে হবে এমন সম্ভাব্য ইভেন্টে আমি কীভাবে জানব যে কোন ভলিউম ডিরেক্টরিটি কোন ধারকটির সাথে সামঞ্জস্যপূর্ণ? কনটেইনারটি পুনর্নির্মাণের ফলে আইডি এবং ভলিউমের পাথ পরিবর্তিত হয়, সুতরাং সেগুলি মেলে আমার আরও কিছু অতিরিক্ত তথ্য প্রয়োজন। আর কি, যদি কিছু হয় তবে আমার সমস্ত কিছু পুনরুদ্ধারে সক্ষম হওয়ার জন্য ব্যাকআপ করা উচিত?

উত্তর:


24

তুমি ঠিক বলছো. যেহেতু আপনার নিজের ভলিউম সহ একাধিক পাত্রে থাকতে পারে, তাই কোন ভলিউমটি কোন ধারকটির সাথে সামঞ্জস্য করে তা আপনার ট্র্যাক করে রাখতে হবে। এটি কীভাবে করবেন তা আপনার সেটআপের উপর নির্ভর করে: আমি ডেটা ধারকটির জন্য নাম-ডেটা ব্যবহার করি, তাই এটি কোন স্পষ্টির সাথে সম্পর্কিত তা স্পষ্ট। এইভাবে এটির মতো ব্যাক আপ নেওয়া যায়:

VOLUME=`docker inspect $NAME-data | jq '.[0].Volumes["/path/in/container"]'`
tar -C $VOLUME . -czvf $NAME.tar.gz

এখন আপনাকে কেবল আপনার চিত্রটি পুনর্নির্মাণ এবং আপনার ডেটা ধারকটি পুনরায় তৈরি করতে হবে:

cat $NAME.tar.gz | docker run -name $NAME-data -v /path/in/container \
                              -i busybox tar -C /path/int/container -xzf -

সুতরাং এর অর্থ আপনার ব্যাকআপ নিতে হবে:

  • Dockerfile
  • আয়তন
  • ধারক মধ্যে ভলিউম পাথ
  • ধারকটির নাম ভলিউমের সাথে সম্পর্কিত

আপডেট: এর মধ্যে আমি কনটেইনারগুলি এবং তাদের পরিমাণ (গুলি) (ধারক) গুলি ব্যাকআপ করার জন্য একটি সরঞ্জাম তৈরি করেছি: https://github.com/discordianfish/docker-backup এবং একটি ব্যাকআপ চিত্র যা ব্যাকআপ তৈরি করতে পারে এবং এগুলিকে এতে চাপ দিতে পারে এস 3: https://github.com/discordianfish/docker-lloyd


ধন্যবাদ এটি একটি ন্যায্য আপস। ডেটার জন্য পৃথক ধারক ব্যবহারের কি স্পষ্ট সুবিধা রয়েছে?
fcoelho

এটি আবার আপনার সেটআপের উপর নির্ভর করে। এটি একটি ডেটা কনটেইনারটি ব্যবহার করা বোধগম্য কারণ আপনি সহজেই 'ভলিউম-থেকে' ব্যবহার করে এটিকে উল্লেখ করতে পারেন এবং সমস্ত অভ্যন্তর বিমূর্ত করে ফেলেছেন: আপনি কেবল পথ এবং মাউন্ট পয়েন্টের বিবেচনার পরিবর্তে ধারক থেকে অন্য ধারকগুলিতে ভলিউম সংযুক্ত করেন।
জোহানেস 'ফিশ' জিমকে

আমার এই ত্রুটিটি অবৈধ বিকল্প রয়েছে - z দেখে মনে হচ্ছে ব্যস্তবক্সে ডিফল্ট টার এটি সমর্থন করে না।
জাজং নুগেইন

6
jq খুব শান্ত, বরং নির্ভরশীলতার, কেন ব্যবহার করবেন উপস্থাপক চেয়ে docker inspectতাই মত টেমপ্লেট সালে নির্মিত S: VOLUME=$( docker inspect -f '{{index .Volumes "/path/in/container"}}' "${NAME}-data" )। লোকেরা সক্রিয়ভাবে ব্যবহারের সময় যেমন (যেমন ডাটাবেসগুলি) ফাইলগুলি ব্যাকআপ না রাখার প্রত্যাশা করবেন না তা বোঝানো সম্ভবত বুদ্ধিমানের কাজ।
mc0e

2
ডকারে 1.8 এ ফর্ম্যাটটি পরিবর্তিত হয়েছে - Volumesচলে গেছে এবং Mountsপরিবর্তে বিভিন্ন কাঠামো রয়েছে। আমাদের rangeআগ্রহী মাউন্ট পয়েন্টটি খুঁজে পেতে আমাদের আরও কিছুটা কাজ করা দরকারVOLUME=$(docker inspect --format '{{ range .Mounts }}{{ if eq .Destination "/path/in/container" }}{{ .Source }}{{ end }}{{ end }}' "${NAME}-data")
জারেক প্রাইজিডজকি

5

আরও নতুন ডকারে (পরীক্ষিত 1.9.1, build 9894698) আপনি cpকমান্ডটি ব্যবহার করতে পারেন ।

কনটেইনার থেকে হোস্টে ডিরেক্টরি কীভাবে কপি করবেন তা এখানে একটি উদাহরণ:

docker cp wordpress:/var/www/html backups/wordpress.`date +"%Y%m%d"`/

কনটেইনার থেকে কোনও tarফাইলে ডিরেক্টরি কীভাবে কপি করবেন তা এখানে একটি উদাহরণ :

docker cp wordpress:/var/www/html - > backups/wordpress.`date +"%Y%m%d"`.tar

কনটেইনার থেকে কোনও tar.gzফাইলে ডিরেক্টরি কীভাবে অনুলিপি করবেন তা শেষ কিন্তু কোনও উদাহরণ নয় :

docker cp wordpress:/var/www/html - | gzip > backups/wordpress.`date +"%Y%m%d"`.tar.gz

2
docker cpনেটওয়ার্কের মাধ্যমে সমস্ত কিছু প্রেরণ করে। এটি এমন কিছু যা আপনি এড়াতে চান বিশেষত যদি আপনার ডকার ভলিউম ইতিমধ্যে একটি বিটিআরএফস ভলিউম হয়।
জারেক প্রাইজিডজকি

2
প্রশ্নটিতে ব্যাকআপ এবং পুনরুদ্ধারের উল্লেখ রয়েছে । এই উত্তরে একটি পুনরুদ্ধার উদাহরণ ব্যবহার করে দুর্দান্ত docker cpহবে।
ম্যাডমাইক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.