আপডেট ২০১-0-০৩-০২ : ডকার ১.৯.০ হিসাবে, ডকার ভলিউমের নাম দিয়েছে যা কেবলমাত্র ডেটা-পাত্রে প্রতিস্থাপন করে । নীচের উত্তরটির সাথে সাথে আমার লিঙ্কযুক্ত ব্লগ পোস্টটির ডকারের অভ্যন্তরে থাকা ডেটা সম্পর্কে কীভাবে চিন্তা করা যায় সেই অর্থে এখনও মূল্য রয়েছে তবে ডেটা পাত্রে নয় বরং নীচে বর্ণিত প্যাটার্নটি প্রয়োগ করতে নামকরণকৃত ভলিউমগুলি ব্যবহার করার বিষয়টি বিবেচনা করুন।
আমি বিশ্বাস করি এটি সমাধানের মূল উপায়টি কেবলমাত্র ডেটা-পাত্রে ব্যবহার করা । এই পদ্ধতির সাথে, ভলিউম ডেটাতে সমস্ত অ্যাক্সেস এমন পাত্রে থাকে যা -volumes-from
ডেটা ধারক ব্যবহার করে, তাই হোস্ট ইউআইডি / জিড কোনও ব্যাপার নয়।
উদাহরণস্বরূপ, ডকুমেন্টেশনে দেওয়া একটি ব্যবহারের ক্ষেত্রে ডেটা ভলিউম ব্যাক আপ করা হয়। এটি করার জন্য অন্য ধারকটি এর মাধ্যমে ব্যাকআপটি ব্যবহার করতে ব্যবহৃত হয় tar
এবং এটি -volumes-from
ভলিউম মাউন্ট করার জন্যও ব্যবহার করে। সুতরাং আমি মনে করি কুঁচকে যাওয়ার মূল বিষয়টি: সঠিক অনুমতি নিয়ে হোস্টের ডেটাতে কীভাবে অ্যাক্সেস পাওয়া যায় সে সম্পর্কে চিন্তাভাবনা করার পরিবর্তে, আপনার যা প্রয়োজন - ব্যাকআপ, ব্রাউজিং ইত্যাদি কীভাবে করবেন তা নিয়ে ভাবুন - অন্য ধারক মাধ্যমে container । পাত্রে তাদের নিজেরাই সামঞ্জস্যপূর্ণ ইউআইডি / গিডগুলি ব্যবহার করা দরকার তবে তাদের হোস্টের কোনও কিছুতে মানচিত্রের দরকার নেই, যার ফলে বহনযোগ্য remaining
এটি আমার জন্যও তুলনামূলকভাবে নতুন তবে আপনার যদি কোনও নির্দিষ্ট ব্যবহারের ক্ষেত্রে মন্তব্য করতে দ্বিধা বোধ হয় এবং আমি উত্তরের প্রসারিত করার চেষ্টা করব।
আপডেট : মন্তব্যগুলিতে প্রদত্ত ব্যবহারের ক্ষেত্রে আপনার some/graphite
গ্রাফাইট চালানোর জন্য একটি চিত্র some/graphitedata
এবং ডেটা ধারক হিসাবে একটি চিত্র থাকতে পারে । সুতরাং, বন্দরগুলি এবং এগুলি উপেক্ষা করে Dockerfile
চিত্রের চিত্রটি some/graphitedata
হ'ল কিছু:
FROM debian:jessie
# add our user and group first to make sure their IDs get assigned consistently, regardless of other deps added later
RUN groupadd -r graphite \
&& useradd -r -g graphite graphite
RUN mkdir -p /data/graphite \
&& chown -R graphite:graphite /data/graphite
VOLUME /data/graphite
USER graphite
CMD ["echo", "Data container for graphite"]
ডেটা ধারক তৈরি এবং তৈরি করুন:
docker build -t some/graphitedata Dockerfile
docker run --name graphitedata some/graphitedata
some/graphite
Dockerfile একই ইউআইডি / gids পাওয়া উচিত, সুতরাং এটি ভালো কিছু চেহারা পারে:
FROM debian:jessie
# add our user and group first to make sure their IDs get assigned consistently, regardless of other deps added later
RUN groupadd -r graphite \
&& useradd -r -g graphite graphite
# ... graphite installation ...
VOLUME /data/graphite
USER graphite
CMD ["/bin/graphite"]
এবং এটি নিম্নলিখিত হিসাবে চালানো হবে:
docker run --volumes-from=graphitedata some/graphite
ঠিক আছে, এখন এটি আমাদের গ্রাফাইট ধারক এবং কেবলমাত্র সঠিক ব্যবহারকারী / গোষ্ঠীর সাথে সম্পর্কিত ডেটা-কনটেইনার সরবরাহ করে (নোট করুন যে আপনি some/graphite
ধারকটি পুনরায় ব্যবহার করতে পারেন , চালানোর সময় এন্ট্রিপিং / সেন্টিমিডি ওভাররাইড করে তবে সেগুলি যেমন রয়েছে পৃথক চিত্র আইএমও পরিষ্কার হয়)।
এখন, ধরুন আপনি ডেটা ফোল্ডারে কিছু সম্পাদনা করতে চান। সুতরাং হোস্টটিতে ভলিউম মাউন্ট করা এবং এটি সম্পাদনা করার পরিবর্তে সেই কাজটি করার জন্য একটি নতুন ধারক তৈরি করুন। এটি কল করতে দেয় some/graphitetools
। some/graphite
চিত্রের মতো উপযুক্ত ব্যবহারকারী / গোষ্ঠী তৈরি করতে দেয় ।
FROM debian:jessie
# add our user and group first to make sure their IDs get assigned consistently, regardless of other deps added later
RUN groupadd -r graphite \
&& useradd -r -g graphite graphite
VOLUME /data/graphite
USER graphite
CMD ["/bin/bash"]
ডকফাইফিলের কাছ থেকে some/graphite
বা উত্তরাধিকার সূত্রে some/graphitedata
আপনি এই ডিআরওয়াই তৈরি করতে পারবেন বা একটি নতুন চিত্র তৈরি করার পরিবর্তে বিদ্যমান বিদ্যমানগুলির মধ্যে একটিটিকে পুনরায় ব্যবহার করুন (প্রয়োজনীয় হিসাবে অ্যান্ট্রাইপিং / সেন্টিমিটার ওভাররাইড)।
এখন, আপনি কেবল চালান:
docker run -ti --rm --volumes-from=graphitedata some/graphitetools
এবং তারপর vi /data/graphite/whatever.txt
। এটি নিখুঁতভাবে কাজ করে কারণ সমস্ত পাত্রে uid / gid এর সাথে মিলে একই গ্রাফাইট ব্যবহারকারী রয়েছে।
যেহেতু আপনি মাউন্ট কখনো /data/graphite
হোস্ট থেকে, আপনি কি দেখেন না কিভাবে হোস্ট ইউআইডি / gid ইউআইডি / gid ভিতরে সংজ্ঞায়িত মানচিত্র graphite
এবং graphitetools
পাত্রে। এই ধারকগুলি এখন যে কোনও হোস্টে স্থাপন করা যেতে পারে এবং তারা নিখুঁতভাবে কাজ চালিয়ে যাবে।
এ সম্পর্কে ঝরঝরে বিষয় হ'ল graphitetools
সমস্ত ধরণের দরকারী ইউটিলিটি এবং স্ক্রিপ্ট থাকতে পারে, যা আপনি এখন একটি বহনযোগ্য পদ্ধতিতে স্থাপন করতে পারেন।
আপডেট 2 : এই উত্তরটি লেখার পরে, আমি এই পদ্ধতির সম্পর্কে আরও একটি সম্পূর্ণ ব্লগ পোস্ট লেখার সিদ্ধান্ত নিয়েছি । আমি আসা করি এটা সাহায্য করবে.
আপডেট 3 : আমি এই উত্তরটি সংশোধন করে আরও বিশদ যুক্ত করেছি। এটিতে মালিকানা এবং পারমস সম্পর্কে কিছু ভুল অনুমান ছিল - মালিকানা সাধারণত ভলিউম তৈরির সময় অর্থাত্ ডেটা ধারক হিসাবে নির্ধারিত হয়, কারণ এটি তখনই যখন ভলিউম তৈরি হয়। এই ব্লগ দেখুন । এটি অবশ্য প্রয়োজন হয় না - আপনি কেবল "রেফারেন্স / হ্যান্ডেল" হিসাবে ডেটা ধারকটি ব্যবহার করতে পারেন এবং একটি প্রবেশপথের শাঁসের মাধ্যমে অন্য ধারকটিতে মালিকানা / পার্মস সেট করতে পারেন, যা সঠিক ব্যবহারকারী হিসাবে কমান্ড চালানোর জন্য গোসুর সাথে শেষ হয়। যদি কেউ এই পদ্ধতির প্রতি আগ্রহী হন তবে দয়া করে মন্তব্য করুন এবং আমি এই পদ্ধতির ব্যবহার করে কোনও নমুনার লিঙ্ক সরবরাহ করতে পারি।