আমি স্বীকার করেই শুরু করব আমি ডকারের কাছে বেশ নতুন এবং অনুমানের ভুল সেট থেকে আমি এই সমস্যাটির দিকে এগিয়ে যাচ্ছি ... যদি তা হয় তবে আমাকে জানান। আমি ডকার মোতায়েনের জন্য কীভাবে কার্যকর তা নিয়ে প্রচুর আলোচনা দেখেছি কিন্তু বাস্তবে এটি কীভাবে হয়েছে তার কোনও উদাহরণ নেই।
আমি ভাবলাম যেভাবে এটি কার্যকর হবে:
- মেশিন এতে অবিচ্ছিন্ন কিছু তথ্য রাখতে ডেটা ধারক তৈরি করুন
- অ্যাপ্লিকেশন ধারক তৈরি করুন যা ডেটা ধারক থেকে ভলিউম ব্যবহার করে
- কিছু কাজ করুন, সম্ভাব্যভাবে ডেটা ধারকটিতে ডেটা পরিবর্তন করুন
- অ্যাপ্লিকেশন ধারক বন্ধ করুন
- প্রতিশ্রুতিবদ্ধ এবং ডেটা ধারক ট্যাগ করুন
- ডেটা ধারকটিকে একটি (প্রাইভেট) ভাণ্ডারে চাপ দিন
- মেশিন বিতে step ধাপ থেকে চিত্রটি টানুন এবং চালান
- আপনি বি মেশিনে কোথায় ফেলে এসেছেন তা বেছে নিন
এখানে মূল পদক্ষেপটি 5 ম পদক্ষেপ, যা আমি ভেবেছিলাম বর্তমান অবস্থা (ফাইল সিস্টেমের বিষয়বস্তু সহ) সংরক্ষণ করবে save তারপরে আপনি সেই রাজ্যটিকে কোনও ভাণ্ডারের দিকে ঠেলে দিতে পারেন এবং এটিকে অন্য কোথাও থেকে টেনে আনতে পারেন, আপনাকে এমন একটি নতুন ধারক সরবরাহ করতে হবে যা মূলত মূলরূপে অভিন্ন।
তবে এটি সেভাবে কাজ করবে বলে মনে হয় না। আমি যা পাই তা হ'ল যে পদক্ষেপ 5 আমার মনে হয় যা তা করে না বা ধাপ 7 (চিত্রটি টানতে এবং চালানো) এটি প্রাথমিক অবস্থায় কনটেইনারটিকে "পুনরায় সেট" করে।
এটি পরীক্ষা করার জন্য আমি তিনটি ডকার চিত্র এবং পাত্রে একটি সেট রেখেছি: ডাটা কনটেইনার, এমন একজন লেখক যা প্রতি 30 সেকেন্ডে তথ্য ধারকটিতে একটি ফাইলের জন্য এলোমেলো স্ট্রিং লিখেন, এবং এমন একটি পাঠক যা কেবল echo
ডেটাতে মান রাখে ধারক ফাইল এবং প্রস্থান।
ডেটা ধারক
সঙ্গে তৈরি
docker run \
--name datatest_data \
-v /datafolder \
myrepository:5000/datatest-data:latest
Dockerfile:
FROM ubuntu:trusty
# make the data folder
#
RUN mkdir /datafolder
# write something to the data file
#
RUN echo "no data here!" > /datafolder/data.txt
# expose the data folder
#
VOLUME /datafolder
লেখক
সঙ্গে তৈরি
docker run \
--rm \
--name datatest_write \
--volumes-from datatest_data \
myrepository:5000/datatest-write:latest
Dockerfile:
FROM ubuntu:trusty
# Add script
#
ADD run.sh /usr/local/sbin/run.sh
RUN chmod 755 /usr/local/sbin/*.sh
CMD ["/usr/local/sbin/run.sh"]
run.sh
#!/bin/bash
while :
do
sleep 30s
NEW_STRING=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)
echo "$NEW_STRING" >> /datafolder/data.txt
date >> /datafolder/data.txt
echo "wrote '$NEW_STRING' to file"
done
এই স্ক্রিপ্টটি /datafolder/data.txt
ডেটা ধারকটিতে একটি এলোমেলো স্ট্রিং এবং তারিখ / সময় লিখেছে ।
পাঠক
সঙ্গে তৈরি
docker run \
--rm \
--name datatest_read \
--volumes-from datatest_data \
myrepository:5000/datatest-read:latest
Dockerfile:
FROM ubuntu:trusty
# Add scripts
ADD run.sh /run.sh
RUN chmod 0777 /run.sh
CMD ["/run.sh"]
run.sh:
#!/bin/bash
echo "reading..."
echo "-----"
cat /datafolder/data.txt
echo "-----"
আমি যখন এই ধারকগুলি তৈরি করি এবং চালিত করি তখন সেগুলি ভালভাবে চালিত হয় এবং আমার প্রত্যাশা অনুযায়ী কাজ করে:
বন্ধ করুন এবং বিকাশ মেশিনে শুরু করুন:
- তথ্য ধারক তৈরি করুন
- লেখক চালান
- অবিলম্বে পাঠকটি চালান, "এখানে কোনও ডেটা নেই!" বার্তা
- একটু অপেক্ষা কর
- পাঠক চালান, এলোমেলো স্ট্রিং দেখুন
- লেখককে থামান
- লেখক পুনরায় আরম্ভ করুন
- পাঠক চালান, একই এলোমেলো স্ট্রিং দেখুন
কিন্তু প্রতিশ্রুতিবদ্ধ এবং জোর দেওয়া আমার প্রত্যাশা অনুযায়ী হয় না:
- তথ্য ধারক তৈরি করুন
- লেখক চালান
- অবিলম্বে পাঠকটি চালান, "এখানে কোনও ডেটা নেই!" বার্তা
- একটু অপেক্ষা কর
- পাঠক চালান, এলোমেলো স্ট্রিং দেখুন
- লেখককে থামান
- প্রতিশ্রুতিবদ্ধ এবং সাথে ডেটা ধারক ট্যাগ
docker commit datatest_data myrepository:5000/datatest-data:latest
- সংগ্রহস্থলের দিকে ধাক্কা
- সমস্ত পাত্রে মুছুন এবং তাদের পুনরায় তৈরি করুন
এই মুহুর্তে, আমি পাঠককে চালানো এবং একই র্যান্ডম স্ট্রিংটি দেখতে আশা করব, যেহেতু ডেটা ধারকটি প্রতিশ্রুতিবদ্ধ হয়েছে, সংগ্রহশালায় চাপানো হয়েছে এবং তারপরে একই চিত্র থেকে সংগ্রহস্থলটিতে পুনরায় তৈরি করা হবে। তবে, আমি আসলে যা দেখছি তা হ'ল "এখানে কোনও ডেটা নেই!" বার্তা।
কেউ এখানে ব্যাখ্যা করতে পারে যে আমি কোথায় ভুল করছি? অথবা, বিকল্পভাবে, আমাকে কীভাবে ডকারের সাথে মোতায়েন করা হয় তার একটি উদাহরণ দেখান?