سأبدأ بالاعتراف بأنني جديد جدا على عامل الإرساء وقد أقترب من هذه المشكلة من مجموعة الافتراضات الخاطئة... اسمحوا لي أن أعرف إذا كان هذا هو الحال. لقد رأيت الكثير من النقاش حول مدى فائدة عامل الإرساء للنشر ولكن لا توجد أمثلة على كيفية القيام بذلك بالفعل.
ها هي الطريقة التي الفكر انها ستعمل:
- إنشاء حاوية البيانات لعقد بعض البيانات المستمرة على الجهاز أ
- قم بإنشاء حاوية التطبيق التي تستخدم وحدات التخزين من حاوية البيانات
- القيام ببعض الأعمال ، يحتمل تغيير البيانات في حاوية البيانات
- أوقف حاوية التطبيق
- ارتكاب وعلامة حاوية البيانات
- ادفع حاوية البيانات إلى مستودع (خاص)
- سحب وتشغيل الصورة من الخطوة 6 على الجهاز ب
- التقاط المكان الذي تركته على الجهاز ب
الخطوة الرئيسية هنا هي الخطوة 5 ، والتي اعتقدت أنها ستوفر الحالة الحالية (بما في ذلك محتويات نظام الملفات). هل يمكن بعد ذلك دفع تلك الدولة إلى مستودع & أمبير; تسحبه من مكان آخر, مما يتيح لك حاوية جديدة التي هي متطابقة أساسا إلى الأصل.
ولكن لا يبدو أن العمل بهذه الطريقة. ما أجده هو أن الخطوة 5 لا تفعل ما أعتقد أنه يفعل أو الخطوة 7 (سحب وتشغيل الصورة) "إعادة تعيين" الحاوية إلى حالتها الأولية.
لقد وضعت مجموعة من ثلاث صور وحاويات لعامل الميناء لاختبار هذا: حاوية بيانات ، كاتب يكتب سلسلة عشوائية في ملف في حاوية البيانات كل 30 ثانية ، وقارئ ببساطة echo
وفاق القيمة في ملف حاوية البيانات ومخارج.
حاوية البيانات
تم إنشاؤها باستخدام
docker run \ --name datatest_data \ -v /datafolder \ myrepository:5000/datatest-data:latest
دوكيرفيل:
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
دوكيرفيل:
FROM ubuntu:trusty# Add script#ADD run.sh /usr/local/sbin/run.shRUN chmod 755 /usr/local/sbin/*.shCMD ["/usr/local/sbin/run.sh"]
run.sh
#!/bin/bashwhile :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
دوكيرفيل:
FROM ubuntu:trusty# Add scriptsADD run.sh /run.shRUN chmod 0777 /run.shCMD ["/run.sh"]
run.sh:
#!/bin/bashecho "reading..."echo "-----"cat /datafolder/data.txtecho "-----"
عندما أقوم ببناء وتشغيل هذه الحاويات ، فإنها تعمل بشكل جيد وتعمل بالطريقة التي أتوقعها:
توقف & أمبير; بدء على الجهاز التنمية:
- إنشاء حاوية البيانات
- تشغيل الكاتب
- قم بتشغيل القارئ على الفور ، راجع " لا توجد بيانات هنا!"الرسالة
- انتظر قليلا
- تشغيل القارئ ، انظر سلسلة عشوائية
- أوقف الكاتب
- أعد تشغيل الكاتب
- تشغيل القارئ ، انظر نفس سلسلة عشوائية
ولكن ارتكاب ودفع لا تفعل ما أتوقع:
- إنشاء حاوية البيانات
- تشغيل الكاتب
- قم بتشغيل القارئ على الفور ، راجع " لا توجد بيانات هنا!"الرسالة
- انتظر قليلا
- تشغيل القارئ ، انظر سلسلة عشوائية
- أوقف الكاتب
- ارتكاب وعلامة حاوية البيانات مع
docker commit datatest_data myrepository:5000/datatest-data:latest
- ادفع إلى المستودع
- حذف جميع الحاويات وإعادة إنشائها
في هذه المرحلة ، أتوقع تشغيل القارئ ورؤية نفس السلسلة العشوائية ، حيث تم الالتزام بحاوية البيانات ، ودفعها إلى المستودع ، ثم إعادة إنشائها من نفس الصورة في المستودع. ومع ذلك, ما أراه بالفعل هو "لا توجد بيانات هنا!"رسالة.
يمكن للشخص أن يفسر أين أنا ذاهب الخطأ هنا? أو, بدلا من ذلك, يشير لي إلى مثال على كيفية نشر يتم مع عامل الميناء?