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


121

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

মূলত, এটি দুর্দান্ত লাগে। তবে একটি জিনিস আছে যা আমি বুঝতে পারি না।

এই ভলিউমগুলি (যা স্পষ্টভাবে পোর্টেবিলিটি কারণে হোস্টের কোনও ফোল্ডারে ম্যাপ করে না , যেমন ডকুমেন্টেশন হিসাবে বলা হয়) হোকারের অভ্যন্তরীণ ফোল্ডারে ডকার দ্বারা তৈরি এবং পরিচালনা করা হয় ( /var/docker/volumes/…)।

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


12
আপনি ডেটা কনটেইনার ডিরেক্টরিটি রফতানি করতে পারেন: docker run --volumes-from <data container> ubuntu tar -cO <volume path> | gzip -c > volume.tgzএটি ভলিউমের বাস্তবায়ন বিবরণগুলির উপর নির্ভর করে না। এবং দ্বিতীয় মেশিনে ট্যারের সাথে ডেটা আমদানি করুন।
জিরি

1
বাহ, এটি দুর্দান্ত, ধন্যবাদ :-)))! আপনি যদি এই মন্তব্যটি উত্তর হিসাবে লিখেন তবে আমি তা আনন্দের সাথে গ্রহণ করব!
গোলো রোডেন

উত্তর:


136

অফিসিয়াল উত্তরটি "ব্যাকআপ, পুনরুদ্ধার বা ডেটা ভলিউমগুলি স্থানান্তরিত করুন" বিভাগে পাওয়া যায় :

ব্যাকআপ:

sudo docker run --rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data
  • --rm: কনটেইনারটি বের হয়ে গেলে সরিয়ে ফেলুন
  • --volumes-from DATA: ডেটা ধারক দ্বারা ভাগ করা ভলিউমের সাথে সংযুক্ত করুন
  • -v $(pwd):/backup: বর্তমান ডিরেক্টরিটিকে ধারকটিতে বাঁধুন; ট্যারে ফাইল লিখতে
  • busybox: একটি ছোট সরল চিত্র - দ্রুত রক্ষণাবেক্ষণের জন্য ভাল
  • tar cvf /backup/backup.tar /data: / ডেটা ডিরেক্টরিতে সমস্ত ফাইলের একটি সঙ্কুচিত টার ফাইল তৈরি করে

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

# create a new data container
$ sudo docker create -v /data --name DATA2 busybox true
# untar the backup files into the new container᾿s data volume
$ sudo docker run --rm --volumes-from DATA2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
data/
data/sven.txt
# compare to the original container
$ sudo docker run --rm --volumes-from DATA -v `pwd`:/backup busybox ls /data
sven.txt

3
আপাতত docker createকেবলমাত্র ডেটা-পাত্রে ব্যবহার করা ভাল তবে সেগুলি শুরু করা হবে না। বন্ধ উদাহরণ দেখুন। ডকুমেন্টেশন: docs.docker.com/userguide/dockervolume/…
ফেলিকজেড

1
সুতরাং ... আমি যদি কোনও পোস্টগ্রিস ডাটাবেস ব্যাকআপ করার চেষ্টা করছি, আমি কী /dataদিয়ে প্রতিস্থাপন করব /var/lib/postgresql/data, সঠিক?
425nesp

6
"ব্যাকআপ, পুনরুদ্ধার করুন, বা ডেটা ভলিউমগুলি স্থানান্তরিত করুন" বিভাগটি ডকার ডকুমেন্টেশন থেকে সরিয়ে ফেলা হয়েছে বলে মনে হচ্ছে :-(
স্টিভসি

2
@ ডাটজ এটি কেবলমাত্র একটি কমান্ড যা ডেটা কনটেইনার তৈরি করতে বলা হয় এটি কোনও আদেশ হতে পারে যা আসলে কিছুই করে না। ধারকটি শুরু হয় এবং সঙ্গে সঙ্গে প্রস্থান হয় তবে এটি ডেটা অব্যাহত রাখতে ব্যবহৃত হয়।
টমমসপ

1
@rszalski যদি কোনও কারণে আপনার চালকের চালনার জন্য ধারক প্রয়োজন (বলুন, আপনি docker execএটিতে চান ) তবে একটি সাধারণ কমান্ড tail -f /dev/nullযা কখনও প্রস্থান করতে পারে না, তবে স্বল্প সংস্থান ব্যবহার করে। যখন আপনার আর এটির চলমান দরকার নেই, docker stop data-containerএটি আপনার জন্য করবে। ভলিউম অন্যান্য পাত্রে থাকে।
জেসি চিশলম

16

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

# you can list shared directories of the data container
docker inspect <data container> | grep "/vfs/dir/"

# you can export data container directory to tgz
docker run --cidfile=id.tmp --volumes-from <data container> ubuntu tar -cO <volume path> | gzip -c > volume.tgz

# clean up: remove exited container used for export and temporary file
docker rm `cat id.tmp` && rm -f id.tmp

আপনার উত্তরের জন্য ধন্যবাদ. আমি কীভাবে ডেটা ধারকটিকে একটি হোস্ট থেকে অন্য হোস্টে স্থানান্তর করতে পারি?
জাজং নগুইন

1
@nXqd ডেটা ধারকটি তৈরি করেছে docker run -v /data-volume -name datacointainer busybox true- আপনি এটি যে কোনও জায়গায় চালাতে পারেন। আপনি ডেটা পাত্রে তৈরি করার পরে, উত্তরে বর্ণিত হিসাবে আপনি টার সংরক্ষণাগারটি আমদানি করতে পারেন।
জিরি

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

@ এনএক্সকিডি শিওর - আপনাকে --cidfile=id.txtরান প্যারামিটার হিসাবে ব্যবহার করতে হবে । ধারক আইডি ফাইলটিতে সংরক্ষণ করা হবে id.txt। আমি উত্তর আপডেট করেছি।
জিরি

9
আপনি কেবল docker run --rmপরিবর্তে ব্যবহার করতে পারেন docker run --cidfile ... ; docker rm
ফেলিক্স রাবে

16

ডকার ডক্স এবং শীর্ষস্থানীয় উত্তর থেকে সরকারী উত্তর প্রসারিত করার জন্য , আপনার .bashrc বা .zshrc এ নিম্নলিখিত বিকল্প থাকতে পারে

# backup files from a docker volume into /tmp/backup.tar.gz
function docker-volume-backup-compressed() {
  docker run --rm -v /tmp:/backup --volumes-from "$1" debian:jessie tar -czvf /backup/backup.tar.gz "${@:2}"
}
# restore files from /tmp/backup.tar.gz into a docker volume
function docker-volume-restore-compressed() {
  docker run --rm -v /tmp:/backup --volumes-from "$1" debian:jessie tar -xzvf /backup/backup.tar.gz "${@:2}"
  echo "Double checking files..."
  docker run --rm -v /tmp:/backup --volumes-from "$1" debian:jessie ls -lh "${@:2}"
}
# backup files from a docker volume into /tmp/backup.tar
function docker-volume-backup() {
  docker run --rm -v /tmp:/backup --volumes-from "$1" busybox tar -cvf /backup/backup.tar "${@:2}"
}
# restore files from /tmp/backup.tar into a docker volume
function docker-volume-restore() {
  docker run --rm -v /tmp:/backup --volumes-from "$1" busybox tar -xvf /backup/backup.tar "${@:2}"
  echo "Double checking files..."
  docker run --rm -v /tmp:/backup --volumes-from "$1" busybox ls -lh "${@:2}"
}

নোট করুন যে ব্যাকআপটি এতে সংরক্ষণ করা হয়েছে /tmp, সুতরাং আপনি সেখানে ডক হোস্টের মধ্যে সংরক্ষণ করা ব্যাকআপ ফাইলটি সরাতে পারবেন।

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


3

আমি এখানে আইবিএম থেকে আরেকটি সাম্প্রতিক সরঞ্জাম যুক্ত করব যা আসলে একটি ধারক হোস্ট থেকে অন্য কন্টেন্টে ভলিউম স্থানান্তরের জন্য তৈরি। এটি বর্তমানে চলমান একটি প্রকল্প। সুতরাং, আপনি ভবিষ্যতে অতিরিক্ত বৈশিষ্ট্যগুলির সাথে একটি আলাদা সংস্করণ খুঁজে পেতে পারেন।

কার্গো একটি হোস্ট থেকে অন্য হোস্টে ন্যূনতম ডাউনটাইম সহ তাদের ডেটা সহ পাত্রে স্থানান্তরিত করার জন্য বিকাশ করা হয়েছিল। কার্গো উত্স এবং লক্ষ্য হোস্ট জুড়ে ডেটাগুলির একটি সংযুক্ত ভিউ (প্রধানত রুট ফাইল সিস্টেম) তৈরি করতে ইউনিয়ন ফাইল সিস্টেমের ডেটা ফেডারেশন ক্ষমতা ব্যবহার করে । এটি কার্গো টার্গেট হোস্টে প্রায় অবিলম্বে (মিলিসেকেন্ডের মধ্যে) একটি ধারক শুরু করার অনুমতি দেয় কারণ উত্স রুট ফাইল সিস্টেমের ডেটা অন-ডিমান্ড ( অনুলিপি ( অনুলিপি) পার্টিশনটি ব্যবহার করে ) অথবা আলস্যভাবে হোস্টগুলিকে অনুলিপি করা হয় as ব্যাকগ্রাউন্ডে (rsync ব্যবহার করে)

গুরুত্বপূর্ণ বিষয়গুলি হ'ল: - একটি centralizedসার্ভার মাইগ্রেশন প্রক্রিয়া পরিচালনা করে

প্রকল্পের লিঙ্কটি এখানে দেওয়া হয়েছে:

https://github.com/nadgowdas/cargo

3

যদি আপনার মেশিনগুলি বিভিন্ন ভিপিসিতে থাকে বা আপনি স্থানীয় মেশিন থেকে / আমার কাছে অনুলিপি করতে চান (যেমন আমার ক্ষেত্রে) আপনি আমার তৈরি ডিভিসিএনসি ব্যবহার করতে পারেন । এটি মূলত এনগ্রোককেrsync দুটি ছোট (উভয় ~ 25MB) চিত্রের মধ্যে এসএসএইচ প্যাকেজযুক্ত সংযুক্ত করে combined প্রথমে, আপনি যে dvsync-serverমেশিন থেকে ডেটা অনুলিপি করতে চান সেটি চালু করুন (আপনার এনগ্রোক ড্যাশবোর্ডNGROK_AUTHTOKEN থেকে প্রাপ্ত হওয়া দরকার ):

$ docker run --rm -e NGROK_AUTHTOKEN="$NGROK_AUTHTOKEN" \
  --mount source=MY_VOLUME,target=/data,readonly \
  quay.io/suda/dvsync-server

তারপরে আপনি dvsync-clientযে মেশিনটিতে ফাইলগুলি অনুলিপি করতে চান DVSYNC_TOKENসেটি সার্ভারের দেখানো পাস দিয়ে শুরু করতে পারেন :

docker run -e DVSYNC_TOKEN="$DVSYNC_TOKEN" \
  --mount source=MY_TARGET_VOLUME,target=/data \
  quay.io/suda/dvsync-client 

অনুলিপিটি শেষ হয়ে গেলে, ক্লায়েন্টটি প্রস্থান করবে। এটি ডকার সিএলআই, রচনা, স্বর্ম এবং কুবারনেটসের সাথেও কাজ করে।

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