الدرس 1: ما هو تغليف التطبيقات (Containerization) ولماذا Docker؟
المشكلة التي يحلها Docker: 'إنه يعمل على جهازي!'
قبل Docker، غالباً ما واجه المطورون المشكلة المحبطة حيث يفشل الكود الذي يعمل بشكل ممتاز على أجهزتهم المحلية في بيئات الاختبار أو الإنتاج. يحدث هذا عادةً بسبب الاختلافات في أنظمة التشغيل، التبعيات (dependencies)، إصدارات المكتبات، أو إعدادات البيئة.
تقديم مفهوم تغليف التطبيقات (Containerization)
تغليف التطبيقات هو حل يقوم بتغليف تطبيق ما وجميع تبعياته (المكتبات، الأُطر، ملفات الإعداد) في وحدة قياسية تسمى الحاوية (container). يمكن لهذه الحاوية بعد ذلك أن تعمل بشكل متسق على أي بيئة (التطوير، التدريج، الإنتاج) تدعم الحاويات.
الآلات الافتراضية (VMs) مقابل الحاويات
| Feature | Virtual Machines (VMs) | Docker Containers |
|---|---|---|
| العزل | عالٍ (نواة نظام تشغيل كاملة) | متوسط (نواة نظام تشغيل مضيف مشتركة) |
| نظام التشغيل | كل VM يتطلب نظام تشغيل ضيف خاص به | تشترك الحاويات في نظام التشغيل المضيف |
| الحجم | جيجابايت (ثقيل) | ميجابايت (خفيف الوزن) |
| وقت البدء | دقائق | ثوانٍ أو أجزاء من الثانية |
حاويات Docker أخف وأسرع بكثير لأنها لا تحمل الحمل الزائد لنظام تشغيل كامل.
المزايا الرئيسية لـ Docker
- الاتساق: البيئات متطابقة في كل مكان.
- العزل: التطبيقات معزولة عن بعضها البعض.
- قابلية النقل: تعمل الحاويات بنفس الطريقة على أي مضيف (Windows, Mac, Linux).
- الكفاءة: استهلاك أقل للموارد مقارنة بالآلات الافتراضية (VMs).
مصطلحات Docker الأساسية (نظرة مسبقة)
- Image (الصورة): قالب للقراءة فقط يستخدم لإنشاء الحاويات. يحتوي على التطبيق وجميع الملفات الضرورية.
- Container (الحاوية): نسخة قيد التشغيل من الصورة (image).
- Dockerfile: سكريبت يستخدم لتحديد كيفية بناء الصورة.
- Registry (السجل) (Docker Hub): مستودع عام أو خاص لتخزين ومشاركة الصور.