আমি কীভাবে কোনও ডকার-ধারকটির ডেটা-ভলিউম দিয়ে ব্যাকআপ নিতে পারি?


152

আমি একটি ওয়ার্ডপ্রেস ওয়েবসাইট প্রদর্শনের জন্য এই ডকার-ইমেজ টুটাম / ওয়ার্ডপ্রেসটি ব্যবহার করছি । সম্প্রতি আমি জানতে পেরেছিলাম যে ছবিটি মাইএসকিউএল-ডেটার জন্য ভলিউম ব্যবহার করে।

সুতরাং সমস্যাটি হ'ল: আমি যদি ধারকটি ব্যাকআপ করে পুনরুদ্ধার করতে চাই তবে আমি একটি চিত্র প্রতিশ্রুতি দেওয়ার চেষ্টা করতে পারি, এবং তারপরে ধারকটি মুছুন এবং প্রতিশ্রুতিবদ্ধ চিত্র থেকে একটি নতুন ধারক তৈরি করুন। তবে আমি যদি এটি করি যে ভলিউম মুছে ফেলা হবে এবং আমার সমস্ত ডেটা চলে গেছে।

আমার ধারক প্লাস এর ভলিউম-ডেটা ব্যাকআপ করার জন্য অবশ্যই কিছু সহজ উপায় থাকতে হবে তবে আমি এটি কোথাও খুঁজে পাচ্ছি না।


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

উত্তর:


141

আমি যদি ধারকটি ফিরিয়ে দিতে চাই তবে আমি একটি চিত্র প্রতিশ্রুতি দেওয়ার চেষ্টা করতে পারি এবং তারপরে ধারকটি মুছুন এবং প্রতিশ্রুতিবদ্ধ চিত্র থেকে একটি নতুন ধারক তৈরি করুন। তবে আমি যদি এটি করি যে ভলিউম মুছে ফেলা হবে এবং আমার সমস্ত ডেটা চলে গেছে

ডকার ব্যবহারকারীর গাইড ব্যাখ্যা করার সাথে সাথে, ডাটা ভলিউমগুলি বোঝানো হয় একটি ধারক ফাইল সিস্টেমের বাইরে থাকা ডেটা ধরে রাখা। এটি একাধিক ধারকগুলির মধ্যে ডেটা ভাগ করাও সহজ করে।

যদিও ডকার কখনই ভলিউমে ডেটা মুছে ফেলবে না (যদি আপনি এর সাথে সম্পর্কিত docker rm -vধারকটি মুছবেন না ) তবে যে ভলিউমগুলি কোনও ডকারের ধারক দ্বারা রেফারেন্স করা হয় না তাকে ড্যাংলিং ভলিউম বলে । এই ঝুঁকির পরিমাণগুলি পরিত্রাণ পাওয়া এবং অ্যাক্সেস করা কঠিন।

এর অর্থ হ'ল ভলিউম ব্যবহার করে শেষ পাত্রে মুছে ফেলার সাথে সাথে ডেটা ভলিউম ঝাঁকুনিতে পরিণত হয় এবং এর সামগ্রীটি অ্যাক্সেস করা কঠিন।

এই ঝুঁকির পরিমাণগুলি রোধ করার জন্য, কৌশলটি হ'ল আপনি যে ডেটা ভলিউম থাকতে চান তা ব্যবহার করে একটি অতিরিক্ত ডকার পাত্র তৈরি করুন; যাতে সর্বদা সর্বদা ভলিউমটি উল্লেখ করে এমন কমপক্ষে ডকার পাত্রে থাকবে। এইভাবে আপনি সেই ডেটা ভলিউম সামগ্রীতে অ্যাক্সেসের স্বাচ্ছন্দ্য না হারিয়ে ওয়ার্ডপ্রেস অ্যাপে চলমান ডকার ধারককে মুছতে পারেন।

এই জাতীয় পাত্রে ডেটা ভলিউম ধারক বলা হয় ।

আমার ধারক প্লাস ভলিউম ডেটা ব্যাক আপ করার জন্য কিছু সহজ উপায় থাকতে হবে তবে আমি এটি কোথাও খুঁজে পাচ্ছি না।

ব্যাকআপ ডকার ইমেজ

ডকার চিত্রগুলি ব্যাকআপ করতে, ডকার সেভ কমান্ডটি ব্যবহার করুন যা একটি ডার সংরক্ষণাগার তৈরি করবে যা পরে ডকার লোড কমান্ডের সাহায্যে একটি নতুন ডকার চিত্র তৈরি করতে ব্যবহার করা যেতে পারে ।

ব্যাকআপ ডকার পাত্রে

আপনি বিভিন্ন উপায়ে একটি ডকার ধারক ব্যাকআপ করতে পারেন

সচেতন থাকুন যে এই আদেশগুলি কেবল ডকারের ধারক স্তরযুক্ত ফাইল সিস্টেমকে ব্যাকআপ করবে। এটি ডেটা ভলিউম বাদ দেয়

ব্যাকআপ ডকার ডেটা ভলিউম

কোনও ডেটা ভলিউমের ব্যাকআপ রাখতে আপনি ডায়কার ব্যবহারকারী নির্দেশিকায় বর্ণিত ভলিউম সামগ্রীর আর্কাইভ উত্পাদন করতে টার্ম কমান্ডটি প্রয়োগ করতে চান ভলিউমটি ব্যবহার করে একটি নতুন ধারক চালাতে পারেন ।

আপনার বিশেষ ক্ষেত্রে, মাইএসকিউএল সার্ভারের জন্য ডেটা ভলিউম ডেটা সঞ্চয় করতে ব্যবহৃত হয়। সুতরাং আপনি যদি এই ভলিউমের জন্য একটি টাকার সংরক্ষণাগারটি রফতানি করতে চান তবে আপনাকে প্রথমে মাইএসকিউএল সার্ভারটি বন্ধ করতে হবে। এটি করতে আপনাকে ওয়ার্ডপ্রেস ধারকটি থামাতে হবে।

মাইএসকিউএল ডেটা ব্যাকআপ করুন

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


সম্পাদন করা

ডকার সম্প্রতি ডকার ভলিউম প্লাগইনগুলি চালু করেছে যা বিক্রেতারা প্রয়োগ করা প্লাগিনগুলিতে ভলিউম হ্যান্ডলিং প্রতিনিধিত্ব করতে দেয়।

docker runকমান্ড জন্য একটি নতুন আচরণ করল -vবিকল্প। এটি এখন একটি ভলিউমের নাম পাস করা সম্ভব । এইভাবে তৈরি ভলিউমগুলির নাম দেওয়া হয়েছে এবং পরে রেফারেন্স করা সহজ, ঝুঁকির ভলিউমের সাহায্যে সমস্যাগুলি সহজ করে দেওয়া ।

সম্পাদনা 2

ডকার docker volume pruneসমস্ত ঝুঁকির পরিমাণগুলি সহজেই মোছার জন্য আদেশটি চালু করেছিলেন ।


34
আসলে আমি সহজেই চলাচল করতে পারি এমন একটি ধারক তৈরি করতে আমি আরও আগ্রহী, আমি যে কনটেইনারটি সরানো যায় না তা বুঝতে পারি না don't
pguardiario


9
ডকার স্বয়ংক্রিয়ভাবে ডেটা ভলিউম মুছে ফেলছে না। Data volumes are designed to persist data, independent of the container’s life cycle. Docker therefore never automatically delete volumes when you remove a container, nor will it “garbage collect” volumes that are no longer referenced by a container. সুতরাং কেবলমাত্র ডেটা পাত্রে
হ'ল

2
আপনার জন্য কোনও দূরবর্তী সংযোগের দরকার নেই mysqldump। কেবল পাত্রে শেল দিন, এটি ফেলে দিন এবং তারপরে এটি অনুলিপি করুন docker cp
jiggunjer

@ অ্যান্ড্রি জারুবিন রে: data only container obsolete?মোটেও নয়। কেবলমাত্র ডেটা কনটেইনার আপনাকে docker exec data-container tar -czf snapshot.tgz /dataতখন docker cp data-container:snapshot.tgz ./snapshot.tgzএবং তার মতো একটি ধারক দেয় । আপনি যদি চান যে ধারকটি দীর্ঘায়ু বজায় থাকে, তবে তার কমান্ডটি এমন কিছু তৈরি করুন যাতে tail -f /dev/nullএটি কখনই বের হয় না, কম সংস্থান ব্যবহার করে।
জেসি চিশম

31

আপডেট 2

কাঁচা একক ভলিউম ব্যাকআপ ব্যাশ স্ক্রিপ্ট:

#!/bin/bash
# This script allows you to backup a single volume from a container
# Data in given volume is saved in the current directory in a tar archive.
CONTAINER_NAME=$1
VOLUME_NAME=$2

usage() {
  echo "Usage: $0 [container name] [volume name]"
  exit 1
}

if [ -z $CONTAINER_NAME ]
then
  echo "Error: missing container name parameter."
  usage
fi

if [ -z $VOLUME_NAME ]
then
  echo "Error: missing volume name parameter."
  usage
fi

sudo docker run --rm --volumes-from $CONTAINER_NAME -v $(pwd):/backup busybox tar cvf /backup/backup.tar $VOLUME_NAME

কাঁচা একক ভলিউম পুনরুদ্ধার বাশ স্ক্রিপ্ট:

#!/bin/bash
# This script allows you to restore a single volume from a container
# Data in restored in volume with same backupped path
NEW_CONTAINER_NAME=$1

usage() {
  echo "Usage: $0 [container name]"
  exit 1
}

if [ -z $NEW_CONTAINER_NAME ]
then
  echo "Error: missing container name parameter."
  usage
fi

sudo docker run --rm --volumes-from $NEW_CONTAINER_NAME -v $(pwd):/backup busybox tar xvf /backup/backup.tar

ব্যবহার এই মত হতে পারে:

$ volume_backup.sh old_container /srv/www
$ sudo docker stop old_container && sudo docker rm old_container
$ sudo docker run -d --name new_container myrepo/new_container
$ volume_restore.sh new_container

অনুমানগুলি হ'ল: ব্যাকআপ ফাইলটির নাম ব্যাকআপ.এটার, এটি একই ডিরেক্টরিতে থাকে ব্যাকআপ এবং পুনরুদ্ধার স্ক্রিপ্ট, ভোল্টারের নামটি ধারকগুলির মধ্যে একই।

হালনাগাদ

আমার কাছে মনে হয় যে ধারকগুলি থেকে ব্যাকআপ ভলিউমগুলি তথ্য ধারকগুলি থেকে ব্যাকআপ ভলিউম থেকে আলাদা নয়।

ভলিউম কোনও ধারকটির সাথে সংযুক্ত পাথগুলি ছাড়া আর কিছুই নয় তাই প্রক্রিয়াটি একই।

আমি জানি না ডকার-ব্যাকআপ একই ধারক ভলিউমের জন্যও কাজ করে তবে আপনি এটি ব্যবহার করতে পারেন:

sudo docker run --rm --volumes-from yourcontainer -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data

এবং:

sudo docker run --rm --volumes-from yournewcontainer -v $(pwd):/backup busybox tar xvf /backup/backup.tar

শেষ আপডেট

এই দুর্দান্ত সরঞ্জামটি উপলব্ধ রয়েছে যা আপনাকে ডকার ভলিউম পাত্রে ব্যাকআপ এবং পুনরুদ্ধার করতে দেয়:

https://github.com/discordianfish/docker-backup

আপনার যদি এমন কোনও ধারক ভলিউমের সাথে কোনও ধারক যুক্ত থাকে:

$ docker run --volumes-from=my-data-container --name my-server ...

আপনি এর মতো সমস্ত ভলিউম ব্যাকআপ করতে পারেন:

$ docker-backup store my-server-backup.tar my-server

এবং এই মত পুনরুদ্ধার:

$ docker-backup restore my-server-backup.tar

অথবা আপনি সরকারী উপায়ে অনুসরণ করতে পারেন:

কীভাবে কেবল এক হোস্ট থেকে অন্যটিতে ডেটা-ভলিউম পোর্ট করবেন?


না এটি কোনও "- ভলিউমস-থেকে" পরিস্থিতি নয়, বরং ভলিউমগুলি ডকফাইফাইলে সংজ্ঞায়িত করা হয়েছে যার ফলে ডেটা অস্তিত্ব রক্ষায় না। আপনি যদি টুটম / ল্যাম্পের জন্য ডকফেরিলের দিকে তাকান তবে আপনি দেখতে পাবেন যে আমি কী বোঝাতে চাইছি।
pguardiario

আমি ইতিমধ্যে যে উত্তরটি দিয়েছি তা কোনও ধরণের ভলিউমের পক্ষে ভাল কারণ ভলিউমগুলি ভলিউম এবং পাত্রে পাত্রে থাকে কোনও পার্থক্য নেই যদি আপনি একটি ভলিউম দৃষ্টিকোণ থেকে ডেটা ধারক হিসাবে একটি ধারক ব্যবহার করেন
টমমাস্প

ডকফাইফায়লে যে ভলিউমটি সংজ্ঞায়িত করা হয়েছে সেটি কনটেইনারটি নষ্ট হয়ে গেলে ধ্বংস হয়ে যায়। সুতরাং আপনি যখন ধারকটি সরান তখন সেই তথ্য ফিরে পাওয়ার কোনও উপায় নেই।
pguardiario

আপনাকে
ধারকটি

1
আমি একটি ত্রুটি পাই: unknown shorthand flag: 'r' in -rm.এটি হওয়া উচিত --rm? (ডকার সংস্করণ 18.09.5, বিল্ড e8ff056)
কুগা

22

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

দ্রষ্টব্য: আপনি যদি থাকে তাহলে উবুন্টু , Dockerhost আপনার স্থানীয় মেশিন। আপনার উপর হন ম্যাক , Dockerhost আপনার ভার্চুয়াল মেশিন।

উবুন্টুতে

আপনি এখানে ভলিউম সহ সমস্ত ফোল্ডার সন্ধান /var/lib/docker/volumes/করতে পারেন : যাতে আপনি সেগুলি অনুলিপি করতে পারেন এবং যেখানেই চান সংরক্ষণাগারভুক্ত করতে পারেন।

ম্যাক অন

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

ভার্চুয়াল মেশিন (যেখানে ডকার সার্ভার চলছে) থেকে ভলিউম সহ সমস্ত ফোল্ডার কীভাবে আপনার স্থানীয় মেশিনে অনুলিপি করবেন তার একটি স্ক্রিপ্ট এখানে রয়েছে। আমরা ধরে নিই যে আপনার ডকার-মেশিন ভিএম এর নাম ডিফল্ট

docker-machine ssh default sudo cp -v -R /var/lib/docker/volumes/ /home/docker/volumes

docker-machine ssh default sudo chmod -R 777 /home/docker/volumes

docker-machine scp -R default:/home/docker/volumes ./backup_volumes

docker-machine ssh default sudo rm -r /home/docker/volumes

এটি আপনার বর্তমান ডিরেক্টরিতে একটি ফোল্ডার তৈরি করতে চলেছে। / ব্যাকআপ_ভলিউমগুলি এবং এই ফোল্ডারে সমস্ত খণ্ড অনুলিপি করে।

আপনার স্থানীয় ডিরেক্টরি ( ./backup_volume ) থেকে ডকারহোস্ট মেশিনে সমস্ত সংরক্ষিত খণ্ডগুলি কীভাবে অনুলিপি করবেন তার একটি স্ক্রিপ্ট এখানে রয়েছে

docker-machine scp -r ./backup_volumes default:/home/docker

docker-machine ssh default sudo mv -f /home/docker/backup_volumes /home/docker/volumes

docker-machine ssh default sudo chmod -R 777 /home/docker/volumes

docker-machine ssh default sudo cp -v -R /home/docker/volumes /var/lib/docker/

docker-machine ssh default sudo rm -r /home/docker/volumes

এখন আপনি এটি পরীক্ষা করে দেখতে পারেন যে এটি দ্বারা কাজ করে:

docker volume ls

/var/lib/docker/volumesউবুন্টুর নীচে সেই ফোল্ডারটির একটি ব্যাকআপ তৈরি করার জন্য আমাদের কি ধারকটি বন্ধ করতে হবে ?
onknows

2
প্রয়োজন নেই, আপনি যে কোনও সময় ফোল্ডারটি অনুলিপি করতে পারেন।
Andrii Dvoiak

4
প্রযুক্তিগতভাবে হ্যাঁ, আপনি পারেন তবে অনুলিপি হিসাবে অনুলিপিযুক্ত হওয়ায় আপনি ডেটা দুর্নীতির সমস্যার মুখোমুখি হয়েছিলেন এবং ভলিউমে সমবর্তী লেখাগুলি থাকতে পারে, আমি বরং প্রথমে ধারকটি থামিয়ে দেব।
আলেসান্দ্রো এস।

13

আপনার ভলিউমের নামটি বলা যাক data_volume। আপনি নামকৃত ডকার চিত্রটিতে এবং থেকে ভলিউমটি ব্যাকআপ এবং পুনঃস্থাপন করতে নিম্নলিখিত কমান্ডগুলি ব্যবহার করতে পারেন data_image:

ব্যাক আপ:

docker run --rm --mount source=data_volume,destination=/data alpine tar -c -f- data | docker run -i --name data_container alpine tar -x -f-
docker container commit data_container data_image
docker rm data_container

পুনঃস্থাপন করা:

docker run --rm data_image tar -c -f- data | docker run -i --rm --mount source=data_volume,destination=/data alpine tar -x -f-

এটি কি রিয়েল-টাইম ব্যাক-আপ?
কং অ্যান্ড্রু

2
একই ভলিউমটি একাধিক ডকারে মাউন্ট করা যেতে পারে, হ্যাঁ এটি রিয়েল-টাইম ব্যাকআপ। যেমন। মাইএসকিএল ধারকটিতে লাগানো ভলিউমের ব্যাক আপ নেওয়া যেতে পারে (কোনও ডেটা-দুর্নীতি ধরে নিই না)। কিন্তু পরিষেবাগুলির জন্য যা ডেটা দুর্নীতির ভয়ে বন্ধ করা দরকার, এটি কোনও আসল সময় নয়।
সাহিল আহুজা

9

আমি জানি এটি পুরানো, তবে আমি বুঝতে পারি যে ডকার হাবের জন্য কোনও ডাটা পাত্রে (ব্যাকআপ হিসাবে) চাপ দেওয়ার জন্য একটি ভাল নথিভুক্ত সমাধান নেই। আমি কীভাবে https://dzone.com/articles/docker-backup-your-data-volume-to-docker-hub এ এটি করা যায় তার একটি সংক্ষিপ্ত উদাহরণ প্রকাশ করেছি

নীচে নীচে লাইন

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

ডেটা-ধারক-থেকে-ব্যাকআপ নামক ডেটা ধারক থেকে ডেটা ভলিউমের ব্যাকআপ দিন

docker run --rm --volumes-from data-container-backup --name tmp-backup -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /folderToBackup

এই টার ফাইলটি একটি নতুন ধারক হিসাবে প্রসারিত করুন যাতে আমরা এটির চিত্রের অংশ হিসাবে এটি প্রতিশ্রুতিবদ্ধ করতে পারি

docker run -d -v $(pwd):/backup --name data-backup ubuntu /bin/sh -c "cd / && tar xvf /backup/backup.tar"

একটি কাঙ্ক্ষিত ট্যাগ ($ সংস্করণ) দিয়ে চিত্রটি প্রতিশ্রুতিবদ্ধ এবং চাপ দিন

docker commit data-backup repo/data-backup:$VERSION
docker push repo/data-backup:$VERSION

অবশেষে, পরিষ্কার করা যাক

docker rm data-backup
docker rmi $(docker images -f "dangling=true" -q)

এখন আমাদের রেপোতে ডেটা-ব্যাকআপ নামের একটি চিত্র রয়েছে যা কেবল ব্যাকআপ ফাইল এবং ফোল্ডার সহ একটি ফাইল সিস্টেম। এই চিত্রটি ব্যবহার করতে (ওরফে ব্যাকআপ থেকে পুনরুদ্ধার করুন), আমরা নিম্নলিখিতটি করি:

ডেটা-ব্যাকআপ ইমেজ সহ ডেটা ধারক চালান

run -v /folderToBackup --entrypoint "bin/sh" --name data-container repo/data-backup:${VERSION}

ডেটা-কনটেইনার থেকে ভলিউম সহ আপনার যা-ইমেজ চিত্রটি চালান

docker run --volumes-from=data-container repo/whatEver

এটাই.

আমি অবাক হয়েছি যে এই কাজের চারপাশে কোনও দলিল নেই। আমি আশা করি যে কেউ এই সহায়ক পেয়েছেন। আমি জানি এটি সম্পর্কে চিন্তা করতে আমার কিছুটা সময় লেগেছে।


8

যদি আপনার প্রকল্পটি ডকার-রচনা ব্যবহার করে, আপনার ভলিউমগুলিকে ব্যাক আপ এবং পুনরুদ্ধার করার জন্য এখানে একটি পদ্ধতি রয়েছে।

Docker-compose.yml

মূলত আপনি আপনার ডকার-কমপোজ.আইএমএল ফাইলটিতে সংযুক্ত db-backupএবং db-restoreপরিষেবাগুলি যুক্ত করেন এবং আপনার ভলিউমের নামের জন্য এটি অভিযোজিত। আমার আয়তন dbdataএই উদাহরণে নামকরণ করা হয়।

version: "3"

services:
  db:
    image: percona:5.7
    volumes:
      - dbdata:/var/lib/mysql

  db-backup:
    image: alpine    
    tty: false
    environment:
      - TARGET=dbdata
    volumes:
      - ./backup:/backup
      - dbdata:/volume
    command: sh -c "tar -cjf /backup/$${TARGET}.tar.bz2 -C /volume ./"

  db-restore:
    image: alpine    
    environment:
      - SOURCE=dbdata
    volumes:
      - ./backup:/backup
      - dbdata:/volume
    command: sh -c "rm -rf /volume/* /volume/..?* /volume/.[!.]* ; tar -C /volume/ -xjf /backup/$${SOURCE}.tar.bz2"

দুর্নীতি এড়িয়ে চলুন

ডেটা ধারাবাহিকতার জন্য, ব্যাক আপ বা পুনরুদ্ধার করার আগে আপনার ডিবি ধারকটি বন্ধ করুন

docker-compose stop db

ব্যাক আপ

ডিফল্ট গন্তব্য ( backup/dbdata.tar.bz2) এ ব্যাক আপ নিতে :

docker-compose run --rm db-backup

অথবা, যদি আপনি একটি বিকল্প লক্ষ্য নাম নির্দিষ্ট করতে চান, তবে:

docker-compose run --rm -e TARGET=mybackup db-backup

পুনরুদ্ধার করা হচ্ছে

থেকে পুনরুদ্ধার করতে backup/dbdata.tar.bz2, করুন:

docker-compose run --rm db-restore

অথবা নির্দিষ্ট ফাইল থেকে পুনরুদ্ধার করে:

docker-compose run --rm -e SOURCE=mybackup db-restore

আমি এই পদ্ধতির তৈরি করতে https://loomchild.net/2017/03/26/backup-restore-docker- নাম-volume/ থেকে আদেশগুলি গ্রহণ করেছি।


5

নিম্নলিখিত কমান্ডটি মাউন্ট করা সমস্ত নামযুক্ত ডেটা ভলিউমযুক্ত একটি ধারকটিতে টর্প চালাবে এবং আউটপুটটিকে একটি ফাইলে পুনঃনির্দেশ করবে:

docker run --rm `docker volume list -q | egrep -v '^.{64}$' | awk '{print "-v " $1 ":/mnt/" $1}'` alpine tar -C /mnt -cj . > data-volumes.tar.bz2

কিছু ভুল হয়ে গেলে ফলাফল সংরক্ষণাগারটি পরীক্ষা করে দেখুন:

tar -tjf data-volumes.tar.bz2

4

আপনার যদি কেবল কোনও সংরক্ষণাগারটিতে একটি সাধারণ ব্যাকআপের প্রয়োজন হয় তবে আপনি আমার সামান্য উপযোগিতা চেষ্টা করতে পারেন: https://github.com/loomchild/volume-backup

উদাহরণ

ব্যাকআপ:

docker run -v some_volume:/volume -v /tmp:/backup --rm loomchild/volume-backup backup archive1

ভলিউম সংরক্ষণাগার হবে নামে some_volumeকরার /tmp/archive1.tar.bz2আর্কাইভ ফাইল

পুনঃস্থাপিত করো:

docker run -v some_volume:/volume -v /tmp:/backup --rm loomchild/volume-backup restore archive1

সংরক্ষণাগার ফাইল থেকে নামকরণ ভলিউম মুছা এবং পুনরুদ্ধার করবে ।some_volume/tmp/archive1.tar.bz2

আরও তথ্য: https://medium.com/@loomchild/backup-restore-docker- নাম-volume-350397b8e362


আমি একটি অনুরূপ সরঞ্জাম তৈরি করেছি github.com/01e9/docker-backup এটি ব্যাকআপ সংরক্ষণাগার তৈরি করে এবং এগুলিকে একটি রেজিলিও সিঙ্ক ডিরেক্টরিতে যুক্ত করে
ওলেগ

2

আমি ডেটা এবং মাইএসকিএল কনটেইনারগুলির ব্যাকআপ এবং লঞ্চ করার জন্য একটি সরঞ্জাম তৈরি করেছি, যাকে কেবল ডকার-ব্যাকআপ বলা হয় । এমনকি ডকার হাবটিতে ব্যবহারের জন্য প্রস্তুত ব্যবহারের চিত্রও রয়েছে

এটি মূলত বাশে লেখা হয়েছে কারণ এটি মূলত অর্কেস্টেশন। এটি duplicityআসল ব্যাকআপ ইঞ্জিনের জন্য ব্যবহার করে । আপনি বর্তমানে এফটিপি (এস) এবং অ্যামাজন এস 3 এ ব্যাকআপ নিতে পারেন।

কনফিগারেশনটি বেশ সহজ: ওয়াইএএমএলে একটি কনফিগার ফাইল লিখুন যা ব্যাকআপ করবে এবং কোথায়, এবং আপনি এখানে যান!

ডেটা পাত্রে, এটি স্বয়ংক্রিয়ভাবে আপনার ধারক দ্বারা ভাগ করা ভলিউমগুলিকে ব্যাকআপ এবং প্রক্রিয়া করতে মাউন্ট করে। মাইএসকিএল পাত্রে, এটি তাদের সাথে লিঙ্ক করে এবং আপনার ধারকটির সাথে বান্ডিলযুক্ত একটি মাইএসকিএলডাম্প কার্যকর করে ফলাফলটি প্রক্রিয়া করে।

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


2

আপনি যদি একটি সম্পূর্ণ ব্যাকআপ চান, আপনার কয়েকটি পদক্ষেপ সম্পাদন করতে হবে:

  1. একটি ইমেজ ধারক প্রতিশ্রুতিবদ্ধ
  2. ছবিটি সংরক্ষণ করুন
  3. ধারকটির ভলিউমের মাউন্ট পয়েন্টের একটি টার ফাইল তৈরি করে ধারকটির ভলিউম ব্যাকআপ করুন।
  4. পাশাপাশি ডাটাবেস ধারকটির জন্য পদক্ষেপগুলি পুনরায় করুন।

মনে রাখবেন যে কোনও চিত্রের সাথে ধারকটির কেবল একটি ডকার কমিট করার ক্ষেত্রে ধারকটির সাথে সংযুক্ত ভলিউম অন্তর্ভুক্ত নয় (রেফ: ডকার কমিট ডকুমেন্টেশন )।

" প্রতিশ্রুতিবদ্ধ অপারেশনটিতে ধারকটির ভিতরে মাউন্ট করা ভলিউমে থাকা কোনও ডেটা থাকবে না। "


1

আপনি যদি কমান্ড লাইন থেকে আরকেন অপারেটরগুলি প্রবেশ করতে চান তবে আপনি এই ম্যানুয়াল ধারক ব্যাকআপ কৌশলগুলি পছন্দ করবেন। মনে রাখবেন, ব্যাকআপ কনটেইনারগুলির জন্য একটি দ্রুত এবং আরও কার্যকর উপায় যা ঠিক তত কার্যকর। আমি এখানে নির্দেশাবলী লিখেছি: https://www.morpheusdata.com/blog/2017-03-02-how-to-create-a-docker-backup-with-morpus

পদক্ষেপ 1: যে কোনও মেঘে একটি ডকার হোস্ট যুক্ত করুন মরফিয়াস সমর্থন সাইটের টিউটোরিয়ালে যেমন ব্যাখ্যা করা হয়েছে, আপনি কয়েক সেকেন্ডের মধ্যে নিজের পছন্দমতো মেঘে একটি ডকার হোস্ট যুক্ত করতে পারেন। প্রধান মরফিয়াস নেভিগেশন বারে অবকাঠামো চয়ন করে শুরু করুন। পরিকাঠামো উইন্ডোর শীর্ষে হোস্টগুলি নির্বাচন করুন এবং উপরের ডানদিকে "+ কনটেইনার হোস্টগুলি" বোতামটি ক্লিক করুন।

মরফিয়াসের মাধ্যমে কোনও ডকার হোস্টকে মেঘে ব্যাক আপ করতে, ইনফ্রাস্ট্রাকচার স্ক্রিনে নেভিগেট করুন এবং "+ ধারক হোস্টগুলি" মেনু খুলুন।

মেনুতে একটি ধারক হোস্ট প্রকারটি চয়ন করুন, একটি গোষ্ঠীটি নির্বাচন করুন এবং তারপরে পাঁচটি ক্ষেত্রে ডেটা প্রবেশ করুন: নাম, বিবরণ, দৃশ্যমানতা, একটি মেঘ নির্বাচন করুন এবং ট্যাগগুলি প্রবেশ করুন (optionচ্ছিক)। পরবর্তী ক্লিক করুন, এবং তারপরে একটি পরিষেবা পরিকল্পনা চয়ন করে হোস্ট বিকল্পগুলি কনফিগার করুন। নোট করুন যে ভলিউম, মেমরি এবং সিপিইউ গণনা ক্ষেত্রগুলি কেবল তখনই দৃশ্যমান হবে যখন আপনি নির্বাচিত পরিকল্পনাটি কাস্টম বিকল্পগুলি সক্ষম করে।

এখানে আপনি ভলিউম যুক্ত এবং আকার, মেমরির আকার এবং সিপিইউ গণনা সেট করে এবং একটি নেটওয়ার্ক চয়ন করেন। আপনি ওএস ব্যবহারকারীর নাম এবং পাসওয়ার্ড, ডোমেন নাম এবং হোস্টনাম কনফিগার করতে পারেন যা পূর্বনির্ধারিত ধারক নাম default পরবর্তী ক্লিক করুন এবং তারপরে যেকোন অটোমেশন ওয়ার্কফ্লো যুক্ত করুন (alচ্ছিক) .আপনি আপনার সেটিংস পর্যালোচনা করুন এবং সেগুলি সংরক্ষণ করতে সম্পূর্ণ ক্লিক করুন।

পদক্ষেপ 2: পাবলিক বা প্রাইভেট ক্লাউডগুলিতে ডকার রেজিস্ট্রি ইন্টিগ্রেশন যুক্ত করুন অ্যাডাম হিক্স অন্য একটি মরফিয়াস টিউটোরিয়ালে বর্ণনা করেছেন যে কোনও প্রাইভেট ডকার রেজিস্ট্রির সাথে সংহত করা কতটা সহজ। (ডকারের পাবলিক হাবের সাথে পাবলিক ডকার এপিআই ব্যবহার করে চিত্রগুলি সরবরাহ করার জন্য মরফিয়াস ব্যবহারের জন্য কোনও যুক্ত কনফিগারেশন প্রয়োজন নেই is)

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

মরফিয়াস "নতুন সংহতকরণ" ডায়ালগ বাক্সের মাধ্যমে একটি ব্যক্তিগত মেঘের সাথে একটি ডকার রেজিস্ট্রি সংহত করুন।

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

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


0

আমার মত যদি আপনার কেস সহজ হয় তবে আপনি নিম্নলিখিতটি করতে পারেন:

  1. এমন একটি ডকফায়াইল তৈরি করুন যা আপনার ধারকটির বেস ইমেজ প্রসারিত করে
  2. আমি ধরে নিলাম যে আপনার ভলিউমগুলি আপনার ফাইল সিস্টেমে ম্যাপ করা হয়েছে, সুতরাং আপনি কেবল সেগুলি ব্যবহার করে আপনার চিত্রটিতে এই ফাইলগুলি / ফোল্ডারগুলি যুক্ত করতে পারেন ADD folder destination
  3. সম্পন্ন!

উদাহরণস্বরূপ, ধরে নেওয়া আপনার নিজের ডিরেক্টরি ডিরেক্টরিতে ভলিউম থেকে ডেটা রয়েছে, উদাহরণস্বরূপ /home/mydataআপনি নিম্নলিখিতটি চালাতে পারেন:

DOCKERFILE=/home/dockerfile.bk-myimage
docker build --rm --no-cache -t $IMAGENAME:$TAG -f $DOCKERFILE /home/pirate

যেখানে আপনার ডক্কারফিলটি কোনও ফাইলের দিকে এটি নির্দেশ করে:

FROM user/myimage
MAINTAINER Danielo Rodríguez Rivero <example@gmail.com>

WORKDIR /opt/data
ADD mydata .

বাকি জিনিসগুলি বেস চিত্র থেকে উত্তরাধিকার সূত্রে প্রাপ্ত। আপনি এখন সেই চিত্রটিকে ডকার মেঘের দিকে ঠেলে দিতে পারেন এবং আপনার ব্যবহারকারীদের সরাসরি তাদের পাত্রে ডেটা পাওয়া যাবে


আপনি যদি শেষ পর্যন্ত চিত্রটিতে এটি বেক করতে যাচ্ছেন তবে একটি ভলিউম ব্যবহারে কী লাভ।
jiggunjer

@ জিগঞ্জঞ্জার ভলিউম থাকা আপনাকে ধারকটিতে থাকা ডেটাগুলি ওভাররাইড করতে দেয়
ড্যানিয়েলো 515

আমি ভলিউম ছাড়াই ডেটা ওভাররাইড করতে পারি, ব্যবহার করে docker cp
jiggunjer

0

সমস্যা : আপনি এতে ইমেজ ধারকটিতে ডেটা ভলিউমের সাথে ব্যাকআপ করতে চান তবে এই বিকল্পটি বক্সের বাইরে নয়, সোজা সামনে এবং তুচ্ছ উপায়টি ভলিউমের পাথটি অনুলিপি করা এবং ডকারের চিত্রটিকে ব্যাকআপ করে এটি পুনরায় লোড করবে এবং এটি লিঙ্ক করবে উভয় একসঙ্গে. তবে এই সমাধানটি আনাড়ি বলে মনে হচ্ছে এবং এটি টেকসই এবং রক্ষণাবেক্ষণযোগ্য নয় - আপনার ক্রোন জব তৈরি করতে হবে যা প্রতিবার এই প্রবাহকে প্রবাহিত করবে।

সমাধান : ডকআপ ব্যবহার করে - আপনার ডকারের ধারক ভলিউমের ব্যাকআপ নেওয়ার জন্য ডকার চিত্র এবং এটি এস 3 (ডকার + ব্যাকআপ = ডকআপ) এ আপলোড করুন। ডকআপ আপনার অ্যাডব্লিউএস শংসাপত্রগুলি এনভায়রনমেন্ট ভেরিয়েবল অনুযায়ী নামের সাথে একটি নতুন বালতি তৈরি করতে ব্যবহার করবে, কনফিগার করা ভলিউম পাবে এবং টার্বল্ট, গিজিপ, টাইম স্ট্যাম্পড এবং এস 3 বালতিতে আপলোড হবে।

পদক্ষেপ :

  1. এটির docker-compose.ymlসাথে env.txtকনফিগারেশন ফাইলটি কনফিগার করুন এবং সংযুক্ত করুন , ডেটা ডেডিকেটেড সুরক্ষিত এস 3 বাল্টিতে আপলোড করা উচিত এবং ডিআরপি মৃত্যুদন্ড কার্যকর করার সময় পুনরায় লোড করার জন্য প্রস্তুত থাকতে হবে। কোনটি ভলিউম পাথটি কনফিগার করতে হবে docker inspect <service-name>এবং ভলিউমগুলি সনাক্ত করতে হবে তা যাচাই করার জন্য :

"ভলিউম": {"/ ইত্যাদি / পরিষেবা-উদাহরণ": {}, "/ পরিষেবা-উদাহরণ": {}},

  1. কনফিগারেশন ফাইলের সামগ্রী সম্পাদনা করুন env.txtএবং এটি প্রকল্পের পথে রাখুন:

    AWS_ACCESS_KEY_ID=<key_here>
    AWS_SECRET_ACCESS_KEY=<secret_here>
    AWS_DEFAULT_REGION=us-east-1
    BACKUP_NAME=service-backup
    PATHS_TO_BACKUP=/etc/service-example /service-example
    S3_BUCKET_NAME=docker-backups.example.com
    RESTORE=false
    
  2. ডকআপ ধারক চালান

$ docker run --rm \
--env-file env.txt \
--volumes-from <service-name> \
--name dockup tutum/dockup:latest
  1. পরে আপনার এস 3 বালতিটি প্রাসঙ্গিক ডেটা যাচাই করুন

-1

এটি একটি ভলিউম-ফোল্ডার-ব্যাকআপ উপায়।
আপনার যদি ডকার রেজিস্ট্রি ইনফ্রা থাকে তবে এই পদ্ধতিটি খুব সহায়ক।
জিপ ফাইলটি সহজেই সরানোর জন্য এটি ডকার রেজিস্ট্রি ব্যবহার করে।

#volume folder backup script. !/bin/bash

#common bash variables. set these variable before running scripts
REPO=harbor.otcysk.org:20443/levee
VFOLDER=/data/mariadb
TAG=mariadb1

#zip local folder for volume files
tar cvfz volume-backup.tar.gz $VFOLDER

#copy the zip file to volume-backup container.
#zip file must be in current folder.
docker run -d -v $(pwd):/temp --name volume-backup ubuntu \
       bash -c "cd / && cp /temp/volume-backup.tar.gz ."


#commit for pushing into REPO
docker commit volume-backup $REPO/volume-backup:$TAG

#check gz files in this container
#docker run --rm -it --entrypoint bash --name check-volume-backup \
        $REPO/volume-backup:$TAG

#push into REPO
docker push $REPO/volume-backup:$TAG

অন্য সার্ভারে

#pull the image in another server
docker pull $REPO/volume-backup:$TAG

#restore files in another server filesystem
docker run --rm -v $VFOLDER:$VFOLDER --name volume-backup $REPO/volume-backup:$TAG \
       bash -c "cd / && tar xvfz volume-backup.tar.gz"

আপনার চিত্রটি চালান যা এই ভলিউম ফোল্ডারটি ব্যবহার করে।
আপনি এমন একটি চিত্র তৈরি করতে পারেন যার মধ্যে একটি রান-ইমেজ এবং একটি ভলিউম জিপ ফাইল সহজেই রয়েছে।
তবে আমি বিভিন্ন কারণে (চিত্রের আকার, প্রবেশ কমান্ড, ..) পুনরুদ্ধার করি না।

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