Docker
يجمع Docker التعليمات البرمجية والمكتبات وأوزان النماذج في صور حاويات تعمل بالطريقة نفسها على الحواسيب المحمولة وخوادم GPU ومشغّلات CI والأجهزة الطرفية.
Docker منصة مفتوحة المصدر لبناء التطبيقات ومشاركتها وتشغيلها في حاويات: وهي عمليات معزولة تتضمن نظام ملفاتها الخاص، بما فيه الشيفرة والمكتبات وحزم النظام، مع مشاركة نواة نظام تشغيل المضيف. أصدرت شركة dotCloud، التي أعادت تسمية نفسها لاحقًا إلى Docker, Inc.، البرنامج مفتوح المصدر في مارس 2013، وجعلت أداة سطر الأوامر وتنسيق الصور ذي الطبقات والسجل العام حاويات Linux أداةً يومية للمطورين. في التعلّم الآلي، تثبّت صورة Docker إصدار Python الدقيق ومكتبات CUDA وبنية PyTorch وأوزان النموذج، لذا يتصرف النموذج بالطريقة نفسها على حاسوب محمول وخادم GPU ومشغّل التكامل المستمر وجهاز طرفي.
آلية عمل Docker#
يسرد Dockerfile الخطوات التي تنشئ صورة: صورة أساسية للبدء منها، وأوامر لتثبيت الحزم، وملفات لنسخها، والأمر الذي يُنفّذ عند بدء التشغيل. تضيف كل تعليمة RUN أو COPY أو ADD طبقة للقراءة فقط، ويعيد البناء التالي استخدام الطبقات المخزّنة مؤقتًا إلى أن تتغير تعليمة أو أحد ملفات الإدخال، لذا تظل التبعيات المثبّتة مبكرًا مخزّنة مؤقتًا، بينما يُعاد بناء شيفرة التطبيق في ثوانٍ. الصورة هي مجموعة هذه الطبقات مع البيانات الوصفية. أما الحاوية فهي نسخة قيد التشغيل من صورة، تعلوها طبقة رقيقة قابلة للكتابة تُحذف مع الحاوية ما لم تُحفظ البيانات في وحدة تخزين موصولة.
يتصل الأمر docker بـDocker Engine، وهو عفريت يعمل في الخلفية ويسلّم كل حاوية إلى containerd وبيئة التشغيل منخفضة المستوى runc. وتستخدم هذه المكونات مساحات أسماء Linux لعزل عمليات الحاوية وشبكتها ونظام ملفاتها، كما تستخدم cgroups للحد من استخدام CPU والذاكرة. وتُشارك الصور عبر سجلات مثل Docker Hub وGitHub Container Registry وNVIDIA NGC والسجل الخاص بكل موفّر سحابي. وتتبع الصور تنسيق مبادرة الحاويات المفتوحة، لذا تشغّلها Podman وcontainerd وKubernetes دون تعديل.
تنشر Ultralytics صور Docker الرسمية لكل هدف عتادي، بما في ذلك CUDA GPUs وCPUs ولوحات ARM64 وأجهزة NVIDIA Jetson وAMD GPUs، وتُوسَم كل صورة أيضًا برقم إصدار Ultralytics لضمان إمكانية إعادة إنتاج عمليات البناء. تحتوي الصورة خفيفة الوزن latest-python المستخدمة أدناه مسبقًا على Python وPyTorch وحزمة ultralytics وأوزان nano الخاصة بـYOLO26، لذا لا يضيف Dockerfile الخاص بالمشروع سوى شيفرة المشروع:
# Official Ultralytics CPU image with Python, PyTorch, ultralytics, and yolo26n.pt
FROM ultralytics/ultralytics:latest-python
# Install extra dependencies in their own layer, cached until requirements.txt changes
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copy the application last, so code edits rebuild only this layer
COPY app.py .
# Command every container runs when it starts
CMD ["python", "app.py"]يحوّل docker build -t yolo-app . هذا الملف والملفات الموجودة بجانبه إلى صورة، ويبدأ docker run --rm yolo-app حاويةً منها. ويتيح دفع الصورة إلى سجل لأي جهاز آخر سحب البيئة المطابقة وتشغيلها، مثلًا على هيئة واجهة API لـخدمة النماذج أو مهمة استدلال ليلية.
Docker للتعلّم الآلي#
تصل الحاويات إلى وحدات GPU عبر مجموعة أدوات حاويات NVIDIA. ويبقى برنامج تشغيل NVIDIA على المضيف، ولا تحمل الصورة سوى مكتبات CUDA في مساحة المستخدم، التي يجب أن يدعمها برنامج التشغيل. في Linux، يفعّل Docker 28.2 والإصدارات الأحدث CDI افتراضيًا، لذا يطلب --device nvidia.com/gpu=all وحدات GPU بوصفها أجهزة CDI ويحافظ على الوصول إليها في الحاويات طويلة التشغيل، وهو الوصول الذي قد يفقده الخيار الأقدم --gpus all عند إعادة تحميل systemd على المضيف.
هناك إعدادان آخران مهمان للتدريب. ويمرر عمال محمّل البيانات في PyTorch الدُفعات إلى عملية التدريب عبر الذاكرة المشتركة في /dev/shm، التي يحدها Docker افتراضيًا إلى 64 MB؛ لذا تُشغّل حاويات التدريب مع --ipc=host أو --shm-size أكبر. ينبغي حفظ مجموعات البيانات والمخرجات في وحدات تخزين موصولة، لأن تشغيل التدريب الذي يكتب نقاط التحقق داخل الحاوية يفقدها عند إزالة الحاوية. ويضمن تثبيت وسم إصدار أو بصمة صورة بدلًا من latest استخدام التدريب الموزع أو نشر النماذج الصورة نفسها على كل جهاز، كما تشغّل خوادم الاستدلال مثل خادم استدلال NVIDIA Triton والخدمات المُدارة مثل Vertex AI النماذج بصفتها صور حاويات.
Docker مقارنةً بالآلات الافتراضية وKubernetes#
- الآلات الافتراضية: تحاكي وحدة مراقبة الأجهزة العتاد، ويُقلع كل VM بنواة ضيف خاصة به، ما يوفر عزلًا أقوى لأحمال العمل ويسمح باستخدام أي نظام تشغيل للضيف، مقابل الحاجة إلى صورة نظام تشغيل كاملة لكل VM وبطء بدء التشغيل. ولأن الحاويات تشارك نواة Linux الخاصة بالمضيف، يشغّل Docker Desktop على macOS وWindows الحاويات داخل VM خفيفة الوزن تعمل بنظام Linux.
- Docker Compose: يعرّف عدة حاويات تعمل معًا على مضيف واحد، مثل واجهة API للاستدلال وذاكرة تخزين مؤقت ومجمّع للمقاييس.
- Kubernetes: يجدول الحاويات عبر عنقود، ويعيد تشغيل الحاويات المتعطلة، ويوسّع النسخ المتماثلة وفقًا لحركة المرور. أزال Kubernetes 1.24 مكوّن dockershim، وهو المحوّل المدمج لـDocker Engine، لذا تشغّل العناقيد الحاويات عبر containerd أو CRI-O، وتظل الصور المبنية باستخدام Docker قابلة للتشغيل فيها لأنها صور OCI قياسية.










