مقدمة عن Docker SDK for Python
الحاويات (Containerization) هي حجر الزاوية في البنية التحتية الحديثة لـ DevOps. أصبح Docker المعيار الفعلي لعزل التطبيقات وإدارة البيئات. ولكن عندما تحتاج إلى تحكم أكثر مرونة وقابلية للبرمجة في الحاويات، يأتي دور Docker SDK for Python، المعروف باسم docker-py.
تتيح لك هذه المكتبة التفاعل مباشرة مع خادم Docker (Docker daemon) عبر كود Python، لإدارة الحاويات والصور والشبكات ووحدات التخزين وكل ما تفعله عادة من سطر الأوامر CLI. بفضل ذلك، يُستخدم docker-py على نطاق واسع في خطوط CI/CD والأتمتة والاختبار والتحكم الديناميكي في التنسيق (Orchestration).
ما هو Docker SDK for Python
Docker SDK for Python هي مكتبة Python رسمية توفر واجهة عالية المستوى للتفاعل مع Docker Engine API. تسمح المكتبة للمطورين بدمج وظائف Docker مباشرة في تطبيقات Python، وأتمتة عمليات النشر وإدارة الحاويات.
الميزات الرئيسية للمكتبة
توفر Docker SDK مجموعة كاملة من الأدوات للعمل مع Docker:
- التحكم البرمجي في دورة حياة الحاويات
- أتمتة بناء ونشر الصور (Images)
- تكوين الشبكات ووحدات التخزين
- التكامل مع أنظمة المراقبة وتسجيل السجلات
- دعم Docker Swarm للتنسيق
- معالجة أحداث Docker في الوقت الفعلي
التثبيت والإعداد الأولي
تثبيت المكتبة
لتثبيت Docker SDK، استخدم مدير الحزم pip القياسي:
pip install docker
للتثبيت مع التبعيات الإضافية لدعم SSH و TLS:
pip install docker[ssh,tls]
الاتصال بـ Docker Engine
الاتصال الأساسي بخادم Docker المحلي:
import docker
# اتصال تلقائي عبر متغيرات البيئة
client = docker.from_env()
# تحديد معلمات الاتصال بشكل صريح
client = docker.DockerClient(base_url='unix://var/run/docker.sock')
# الاتصال بـ Docker Engine عن بُعد
client = docker.DockerClient(base_url='tcp://192.168.1.100:2376')
التحقق من الاتصال
try:
# التحقق من توفر Docker Engine
print("Docker Engine متاح:", client.ping())
# الحصول على معلومات النظام
info = client.info()
print(f"إصدار Docker: {info['ServerVersion']}")
print(f"البنية: {info['Architecture']}")
except docker.errors.DockerException as e:
print(f"خطأ في الاتصال بـ Docker: {e}")
الهيكل المعماري للمكتبة
تم بناء Docker SDK for Python كغلاف (Wrapper) حول REST API الخاص بـ Docker Engine، مما يوفر واجهات عالية ومنخفضة المستوى للتفاعل مع Docker.
هيكل الوحدات
تم تنظيم المكتبة في عدة وحدات رئيسية:
- docker.DockerClient — العميل الرئيسي للتفاعل عالي المستوى
- docker.APIClient — عميل API منخفض المستوى
- docker.models — نماذج موجهة للكائنات للعمل مع الموارد
- docker.types — أنواع بيانات مساعدة
- docker.errors — الاستثناءات ومعالجة الأخطاء
المبادئ المعمارية
تتبع المكتبة مبادئ REST API الخاصة بـ Docker Engine:
- كل مورد (حاوية، صورة، شبكة) يتم تمثيله بكائن منفصل
- يتم تنفيذ العمليات عبر طرق الكائنات
- دعم التنفيذ غير المتزامن للعمليات
- معالجة تلقائية للاتصالات وإعادة الاتصال