مقدمة مفصلة لسائق تخزين Docker
لقد عملت مؤخرًا في مشروع ولم أكن أعرف كيفية استخدام برنامج تشغيل Docker Storage خلال هذه الفترة ، لذلك بحثت عن معلومات عبر الإنترنت وحلها. سوف أسجلها هنا.
غاية
Docker هو محرك حاوية تطبيق مفتوح المصدر يستخدم مساحة اسم Linux kernel بشكل أساسي لتحقيق عزل صندوق الرمل ويستخدم CGROUP لتحقيق الحد من الموارد. Docker هي حاوية Linux خفيفة الوزن تستخدم للتطوير والنشر الموحدين ، في محاولة لحل مشكلة "التبعية الجحيم" ، الجمع بين الخدمات والمكونات التابعة ، على غرار الحاويات التي تستخدمها السفن ، وتحقيق التثبيت والنشر السريع.
1. الهندسة المعمارية الأساسية للرسوم
دعونا أولاً نفهم عملية الهندسة المعمارية الأساسية وبدء تشغيل Docker. في الواقع ، يعتمد Docker بنية C/S ، بما في ذلك العميل والخادم. يقبل Docker Daemon الطلبات من العملاء كخادم ويعالج هذه الطلبات (إنشاء ، تشغيل ، إرسال الحاويات). يتصل العميل والخادم على نفس الجهاز من خلال واجهة برمجة تطبيقات RESTFLE. في عملية الاستخدام المحددة ، بعد تنفيذ Service Docker ، يتم إنشاء عملية Docker Deamon Daemon على المضيف ، وتشغيلها في الخلفية وانتظر تلقي الرسائل من العميل (أي ، أوامر Docker الإدخال ، مثل Docker Pull XXX Run ... ، Docker Commice XXX) لتحقيق التفاعل مع Docker Deamon. بعد بدء خدمة Docker ، يمكنك رؤية عملية Docker.
تقصير
[Root@LocalHost ~]# PS -Aux | Grep Dockerroot 11701 0.0 0.4 359208 16624؟ SSL 21:05 0:00/USR/BIN/Docker -D -H FD: // -SELINUX -ENFORD -INSUCURE -Registry 186.100.8.216:5000ROOT 11861 0.0 0.0 113004 2256 PTS/0 S+ 23:01 0:00 GREP -COLOR =
يرجع ذلك بشكل أساسي إلى ذلك عند تحديد نظام الملفات لاحقًا ، تحتاج إلى تكوين برنامج تشغيل التخزين المحدد في/etc/sysconfig/docker (سيؤدي ذلك إلى كتابة مدونة خاصة) ، ثم ابدأ Docker Daemon ، ولا يمكن العمل من خلال معلمات الأمر Run. يمكنك أيضًا تعيينه مباشرة من سطر الأوامر المضيف من خلال Docker D.
2. طريقة تخزين Docker - سائق التخزين
الجزء الأساسي من نموذج Docker هو الاستفادة الفعالة من آلية النسخ المتطابق الهرمي. يمكن أن تكون المرآة موروثة من خلال التسلسل الهرمي. استنادًا إلى الصورة الأساسية (بدون صورة الأصل) ، يمكن إجراء صور مختلفة للتطبيق. يمكن أن تشارك حاويات Docker المختلفة بعض طبقات نظام الملفات الأساسية ، وفي الوقت نفسه ، إلى جانب طبقات التغيير الفريدة الخاصة بها ، وتحسين كفاءة التخزين بشكل كبير. تتمثل الآلية الرئيسية في النموذج الهرمي وتثبيت أدلة مختلفة لنظام الملفات الافتراضية (توحيد العديد من الدلائل في نظام ملفات افتراضية واحدة ، من هذه المقالة). يتم استخدام العديد من برامج تشغيل التخزين المختلفة في Docker لتخزين المرآة ، بما في ذلك: AUFS ، Devicemapper ، BTRFS والتراكب (من الموقع الرسمي). فيما يلي مقدمة موجزة لبرامج تخزين مختلفة.
aufs
AUFS (oneunionfs) هو نظام ملفات مشتركة. يدعم AUFS إعداد أذونات readonly و readwrite و whatout لكل دليل عضو (على غرار GIT). في الوقت نفسه ، هناك مفهوم مماثل في AUFs ، حيث يمكن تعديل الفروع ذات الأذونات للقراءة فقط بشكل منطقي (لا تؤثر على الجزء للقراءة فقط). يمكن لبرنامج التخزين الوحيد في AUFS أن يدرك مشاركة مكتبات وقت التشغيل القابلة للتنفيذ والقابلة للمشاركة بين الحاويات ، لذلك عندما تقوم بتشغيل مئات من أوقات التشغيل مع نفس رمز البرنامج أو مكتبات وقت التشغيل ، يعد AUFS اختيارًا جيدًا للغاية.
جهاز Mapper
Mapper Mapper هي آلية إطار رسم خرائط من الأجهزة المنطقية إلى الأجهزة المادية المتوفرة في Kernel Linux 2.6. بموجب هذه الآلية ، يمكن للمستخدمين صياغة استراتيجيات الإدارة بسهولة لتنفيذ موارد التخزين وفقًا لتلبية احتياجاتهم (انظر التفاصيل). سيقوم برنامج تشغيل Mapper Driver بإنشاء ملف بسيط 100 جرام يحتوي على صورك وحاوياتك ، تقتصر كل حاوية على حجم من حجم 10G (ملاحظة: هذا ملف متناثر تم إنشاؤه تلقائيًا باستخدام Loopback ، وتحديداً البيانات والبيانات الوصفية تحت/var/lib/docker/devicemapper/devicemapper ، والتي يمكن توسيعها ديناميكيًا). يمكنك ضبط حجم حاوية Docker ، للحصول على مرجع محدد) ، يمكنك استخدام المعلمة -S لتحديد برنامج التشغيل عند بدء تشغيل Docker Daemon ، أي أنه يمكنك تعيين برنامج Docker Storage بواسطة Docker -D -S Devicemapper. قم أولاً بإغلاق خدمة Docker وتنفيذ الأمر:
تقصير
[root@localhost ~]# docker -d -s devicemapperInfo [0000] +Job serveapi (unix: ///var/run/docker.sock) info [0000] = موافق (0) معلومات [0000] حاويات التحميل: ابدأ. .... معلومات [0000] حاويات التحميل: تم. معلومات [0000] Docker Daemon: 1.4.0 4595d4f/1.4.0 ؛ execdriver: Native-0.2 ؛ GraphDriver: DevicEmapper Info [0000] +acceptconnections () info [0000] -job accounconnections () = OK (0)
بالإضافة إلى ذلك ، يمكن لـ Docker تحديد معلمة تخزين OPT عند بدء تشغيل الحاوية ، ولكن الآن يمكن لـ DevicEmapper فقط قبول إعدادات المعلمة. سيكون هناك عروض مدونة مستهدفة لاحقًا.
BTRFS
يمكن أن يكون برنامج تشغيل BTRFS فعالًا للغاية في Build Docker. ومع ذلك ، مثل Devicemapper ، فإنه لا يدعم التخزين المشترك بين الأجهزة (المشاركة في الموقع الرسمي). يدعم BTRFS اللقطات والاستنساخ ، ويمكنها أيضًا إدارة الأجهزة المادية المتعددة بسهولة. (للحصول على التفاصيل ، يرجى الرجوع إلى مقدمة IBM إلى BTRFS)
تراكب
التراكب يشبه إلى حد كبير AUFs ، ولكن أدائها أفضل من AUFs ولديه استخدام ذاكرة جيدة. تم دمجها الآن في Linux kernel 3.18. أمر الاستخدام المحدد: Docker DS Overlay
ملاحظة على الموقع الرسمي: إنه غير مدعوم حاليًا على BTRFS أو أي نسخة على نظام ملفات الكتابة ويجب استخدامه فقط على أقسام Ext4.
3 هيكل دليل Docker
أهم مفهومين من Docker هما المرايا والحاويات. فأين الصورة التي ننسحبها مخزنة؟ بعد بدء تشغيل حاوية تشغيل المرآة ، أين يتم تعديل محتوى عمليتنا؟ لأن برامج التشغيل المحددة مختلفة ، فإن تأثير التنفيذ النهائي مختلف. دعنا نحلل بنية التخزين لـ Docker باستخدام برنامج تشغيل تخزين Mapper كمثال.
1. أدخل دليل/var/lib/docker وسرد المحتويات:
تقصير
[root@localhost ~]# cd/var/lib/docker/[root@localhost docker]# lscontainers devicemapper graph execdriver init linkgraph.db repositories-devicemapper tmp ائتمان
وفقًا لمحتوى الدليل ، فمن الواضح أن برنامج DevicEmapper يستخدم.
ملاحظة: المجلدات الموضحة أدناه هي جميعها تحت/var/lib/docker.
2. أي مجلد يسحب ملف الصورة الموجود؟ (الرجوع إلى)
يتم حفظ معلومات صورة السحب في مجلد الرسم البياني ، ويوجد محتوى الصورة تحت DevicEmapper/ DevicEmapper/ Data.
3. أين يتم تشغيل الحاوية التي تبدأ؟
يتم حفظ معلومات تكوين الحاوية التي تبدأ في الحاويات ، ويتم عرض execdriver/ native/ أيضًا.
يتم حفظ محتويات العملية في الحاوية تحت devicemapper/devicemapper/البيانات.
4. دور الرسم البياني
في بنية Docker ، تلعب دور الحارس في صورة الحاوية التي تم تنزيلها ومسجل العلاقة بين صورة الحاوية التي تم تنزيلها. في الدليل المحلي للرسوم البيانية ، تكون المعلومات المحددة المخزنة لكل صورة حاوية هي: البيانات الوصفية (JSON) لصورة الحاوية ، معلومات حجم الطبقة (الطبقات) لصورة الحاوية ، و ROUTFs المحددة التي تمثلها صورة الحاوية.
5. الاختبار التجريبي:
- في البداية لم يتم تمكين أي حاوية:
تقصير
[Root@LocalHost Docker]# LL Containers/Total 0
- بدء حاوية:
تقصير
[Root@LocalHost Docker]# Docker Run -I -T -RM Centos: 7 /Bin /Bash [Root@187a8f9d2865 /]#
uuid من الحاوية التي بدأت = 187A8F9D2865
- قبل بدء الحاوية ، تحقق من الحجم الفعلي للملف تحت/var/lib/docker/devicemapper/devicemapper/
تقصير
[Root@Bhdocker216 Docker]# du -h devicemapper/devicemapper/*2.1g devicemapper/devicemapper/data3.5m devicemapper/devicemapper/metadata
- عرض على المضيف
تقصير
[ROOT@BHDOCKER216 DOCKER]# LS حاويات/187A8F9D2865C2AC *** 91B981
تحقق من محتويات الحاوية التي بدأت أسفل مجلد UUID:
تقصير
[ROOT@BHDOCKER216 حاويات]# LL 187A8F9D2865C2AC *** 91B981TOTAL 24-RW -----. 1 Root Root 273 Mar 5 23:59 187a8f9d2865 ***-Json.Log-Rw-R--. 1 الجذر الجذر 1683 مارس 5 23:58 config.json-rw-r--. 1 الجذر الجذر 334 مارس 5 23:58 HostConfig.json-Rw-R--. 1 جذر الجذر 13 مارس 5 23:58 Hostname-Rw-R--. 1 الجذر الجذر 174 مارس 5 23:58 Hosts-RW-R--. 1 ROOT ROOT 69 MAR 5 23:58 Resolv.Conf- أضف ملفًا في حاوية بدء التشغيل وعرضه.
قم أولاً بإنشاء ملف في الحاوية الجارية:
تقصير
[ROUT@8A1E3AD05D9E/]# DD if =/dev/Zero of = floppy.IMG BS = 512 COUNT = 57605760+0 سجلات في 5760+0 سجلات Out2949120 بايت (2.9 ميجابايت) نسخ ، 0.0126794 ثانية ، 233 ميجابايت/ثانية
ثم عرض الملف تحت/var/lib/docker/devicemapper/devicemapper/:
تقصير
[Root@Bhdocker216 Docker]# du -h devicemapper/devicemapper/*5.5g devicemapper/devicemapper/data4.6m devicemapper/devicemapper
يختلف حجم هذا المكان قليلاً لأنني قمت أولاً بتنفيذ #DD if =/dev/Zero of = test.txt bs = 1m count = 8000 لإنشاء ملف بحجم 8g. لقد أنهيت ذلك لأنه كان بطيئًا للغاية ، لكن يمكنني أن أرى بوضوح أن كلا المجلدين قد تغير (تمت إضافته) عند العمل في الحاوية الجارية.
- تحقق من الرسم البياني. عندما يتم سحب صورة واحدة فقط (Ubuntu14.10) ، تظهر 7 أدلة Long Uuid المسماة. كيف حدث هذا؟
استخدم شجرة Docker Images لسرد بنية شجرة المرآة ، ويمكننا رؤية بنية التخزين الهرمية للمرآة. تعتمد Ubuntu النهائي (الطبقة 7) على تغييرات الطبقة 6 ، أي أن الطبقة N-Th في هذه الشجرة المنطقية تعتمد على تغييرات N-1 ، ويعتمد الطبقة N على صورة N-1. الطبقة 0 ، الحجم 0 ، يسمى الصورة الأساسية.
- ما هو المحتوى في دليل الرسم البياني/UUID؟
تقصير
[root@localhost الرسم البياني]# ll 01BF15A18638145EB *** -HTOTAL 8.0K-RW -----. 1 ROOT ROOT 1.6K MAR 5 18:02 JSON-RW -----. 1 جذر الجذر 9 مارس 5 18:02
عرض محتوى الطبقات: حجم طبقة التمثيل الرقمي (الوحدة: ب). JOSN: احفظ بيانات تعريف هذه الصورة (مثل: الحجم ، الهندسة المعمارية ، التكوين ، الحاوية ، ** uuid's uuid ** ، إلخ).
- عرض مجلد devicemapper/devicemapper
هناك نوعان من المجلدات والبيانات والبيانات الوصفية. في الواقع ، يقوم برنامج تشغيل Mapper Driver بتخزين ملفات المرآة والحاوية في ملف ** بيانات **. يمكنك عرض حجم البيانات والبيانات الوصفية من خلال معلومات Docker. بالإضافة إلى ذلك ، يمكنك استخدام du h (المستخدم أعلاه) لعرض الأحجام الفعلية لهذين الملف المتفرق.
- execdriver
تقصير
[root@bhdocker216 docker]# ls execdriver/native/8a1e3ad05d9e66a455e683a2c *** 2437bdccdfdfa //
- مجلدات
المجلدات بدون المعلمة -v فارغة. بعد الاختبار ، في حالة بدء تشغيل الحاوية ، أضف المعلمة -v ، وسيتم عرض UUID في مجلد الأحجام. سيتم إجراء بحث عالمي على المضيف ولا يزال موجودًا فقط تحت وحدات التخزين. لا علاقة له بالصورة و uuid للحاوية.
تقصير
[root@bhdocker216 docker]# find/-name 86eb7f9f5e25676f100 *** d5a/var/lib/docker/volumes/86eb77f9f5e25676f100 *** d5a // عرض المحتوى من الداخل: 86EB77F9F5E25676F100 *** D5ACONFIG.JSON {"id": "86EB77F9F5E25676F100A89BA727BC15185303236AAE0DCF4C17223E37651D5A" ، "path": وصف جدول وظيفة المجلد
قم بإجراء ملخص ، وقم بتنظيم جدول ، وشرح وظائف المجلدات المختلفة تحت/var/lib/docker:
شكرا لك على القراءة ، آمل أن تساعدك. شكرا لك على دعمك لهذا الموقع!