تمهيد
عمومًا، نستعمل حاويات Docker لمرة وحيدة فقط، وهي تعمل إلى أن ينتهي تنفيذ الأمر الموكل إليها. وافتراضيًا تكون البيانات المُنشَأة داخل الحاوية متاحةً فقط إلى الحاوية وقابلة للوصول عند تشغيل الحاوية فقط.
حجوم Docker (أي Docker volumes) يمكن أن تُستخدَم لمشاركة الملفات بين النظام المضيف (host system) وحاوية Docker. لنقل –على سبيل المثال– أننا نريد استخدام صورة Nginx الرسمية ونحتفظ بسجل دائم لخادوم Nginx لكي نحلل معلوماته لاحقًا. وافتراضيًا، ستكتب صورة Niginx الرسمية سجلاتها إلى /var/log/nginx
داخل الحاوية، والتي لا نستطيع في الحالة العادية الوصول إلى ذاك الملف من النظام المضيف.
سنشرح في هذا الدرس كيفية جعل البيانات الموجودة داخل الحاوية متاحةً للجهاز المضيف.
المتطلبات المسبقة
-
خادوم أوبنتو 16.04 (أو 14.04) مضبوطٌ كما في درس «الإعداد الابتدائي لخادوم أوبنتو 14.04»، بما في ذلك إعداد حساب مستخدم عادي لكنه يملك امتيازات الجذر (root) عبر الأداة
sudo
. - برمجية Docker مثبّتة على حاسوبك
إذا كنتَ جديدًا على Docker، فسلسلة «docker ecosystem» المنشورة على الأكاديمية تعطيك لمحةً عن طريقة استعمالها.
Quoteصحيحٌ أننا نفترض أنَّك ستستعمل Docker على أوبنتو 16.04، لكن أوامر
docker
التي تتعامل مع حجوم Docker والمذكورة في هذا الدرس يجب أن تعمل عملًا صحيحًا على بقية الأنظمة لطالما كانت Docker مثبّتةً عليها.
الخطوة الأولى: الوصل الترابطي لحجم التخزين
الأمر الآتي سيُنشِئ مجلدًا باسم nginxlogs
في مجلد المنزل (Home) للمستخدم الحالي ويصله وصلًا ترابطيًا (bindmount) إلى /var/log/nginx
في الحاوية:
docker run --name=nginx -d -v ~/nginxlogs:/var/log/nginx -p 5000:80 nginx
لنأخذ دقيقةً من الزمن لتفحص الأمر بالتفصيل:
-
--name=nginx
: تسمية الحاوية لكي نستطيع الإشارة إليها لاحقًا بسهولة. -
-d
: فصل العملية الحالية من الطرفية وتشغيلها في الخلفية، وإلا فسنرى مِحَث Nginx فارغ ولن نتمكن من استعمال جلسة الطرفية إلا بعد انتهاء تنفيذ Nginx. -
-v ~/nginxlogs:/var/log/nginx
: ضبط حجم الوصل الترابطي الذي يربِط بين مجلد/var/log/nginx
داخل حاوية Nginx إلى مجلد~/nginxlogs
في الجهاز المضيف. تَستعمِل Docker النقطتين الرأسيتين:
لفصل مسار المضيف عن مسار الحاوية، ويجب ذكر مسار المضيف أولًا. -
-p 5000:80
: ضبط تمرير المنافذ؛ حيث تستمع خدمة Nginx داخل الحاوية إلى المنفذ 80 افتراضيًا، وهذا الخيار يؤدي إلى ربط المنفذ 80 في الحاوية إلى المنفذ 5000 في النظام المضيف. -
nginx
: تحديد أنَّ هذه الحاوية يجب بناؤها على صورة Nginx، والتي تُنفِّذ الأمرnginx -g "deamon off"
لتشغيل Nginx.
Quoteالخيار
-v
هو خيارٌ مرنٌ جدًا، إذ يستطيع إنشاء وصل ترابطي، أو يمكنه إنشاء حجم جديد بتعديلٍ بسيط جدًا في شكله. فلو بدأ أوّل وسيم بشرطة مائلة/
أو~/
فسيُنشِئ وصلًا ترابطيًا، لكن إن حذفت الشرطة في أوّل وسيط، فسيُنشِئ حجمًا.
-
-v /path:/path/in/container
وصل المسار/path
في الجهاز المضيف إلى/path/in/container
في الحاوية. -
-v path:/path/in/container
إنشاء حجم باسمpath
دون علاقة بالمضيف.
الخطوة الثانية: الوصول إلى البيانات من المضيف
لدينا الآن خادوم Nginx يعمل داخل حاوية موجودة في جهازنا المحلي، ولدينا المنفذ 5000 الموجود في جهاز المضيف مرتبطٌ بالمنفذ 80 للحاوية.
افتح عنوان خادوم الويب في متصفحك، مستخدمًا عنوان IP لجهازك المحلي ورقم المنفذ 5000، مثلًا: http://203.0.113.0:5000
ويجب أن تشاهد الرسالة الآتية:
وإذا نظرنا الآن في مجلد ~/nginxlogs
الموجود في المضيف، فسنرى الملف access.log
المُنشَأ من حاوية nginx
والذي تظهر فيه الطلبية التي أجريناها:
cat ~/nginxlogs/access.log
يجب أن يحتوي شيئًا شبيهًا بما يلي:
203.0.113.0 - - [11/Nov/2016:00:59:11 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36" "-"
إذا أجريتَ أيّة تعديلات إلى مجلد ~/nginxlogs
فيجب أن تراها من داخل الحاوية مباشرةً.
الخلاصة
شرحنا في هذا الدرس كيفية إنشاء حجم Docker لمشاركة المعلومات بين الحاوين والنظام المضيف، مما يفيدنا كثيرًا في بيئات التطوير، حيث من الضروري الوصول إلى السجلات لتحليلها.
ترجمة -وبتصرّف- للمقال How To Share Data between the Docker Container and the Host لصاحبته Melissa Anderson
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.