وهنا تبرز أهمية Docker Networking، كنظام متكامل لإدارة الشبكات داخل بيئة Docker، يسمح لحاوياتك بالتواصل بكفاءة وأمان، وفقاً لاحتياجات التطبيق.
يوفر Docker عدة أنواع من الشبكات لتلبية احتياجات مختلفة، من العزل التام إلى الوصول المباشر للشبكة الفيزيائية.
أنواع شبكات Docker:
- Default Bridge - الشبكة الافتراضية البسيطة
- User-Defined Bridge - شبكة مخصصة بمزايا إضافية
- Host - الوصول المباشر لشبكة الخادم
- MacVLAN: تجعل الحاويات تبدو كأجهزة مستقلة
- IPVLAN - عناوين IP منفصلة باستخدام عنوان MAC مشترك
- Overlay - للتواصل عبر خوادم متعددة
- None -تمنع الحاوية من الوصول لأي شبكة (عزل تام)
Default Bridge Network (الشبكة الافتراضية)
عندما تشغل حاوية بدون تحديد شبكة معينة، Docker يضعها تلقائياً في الشبكة الافتراضية المسماة docker0.
ما تحصل عليه كل حاوية في هذه الشبكة:
- واجهة Ethernet افتراضية خاصة بها
- عنوان IP خاص
ملاحظة: لا يمكن للحاويات في هذه الشبكة الوصول إلى بعضها عبر الأسماء (DNS) بشكل افتراضي، وإنما باستخدام عناوين IP فقط، ما لم يتم تهيئة ذلك يدوياً.
# لعرض الشبكات المتاحة

# تشغيل حاوية (بدون تحديد شبكة)

# فحص الشبكة الافتراضية

كيف يعمل التواصل:
- الحاويات في نفس الشبكة الافتراضية يمكنها التحدث مع بعضها
- يمكنها الوصول للإنترنت: حاوية → bridge → خادم → إنترنت
- من خادمك لا يمكنك الوصول مباشرة لمنافذ الحاوية (عزل) إلا إذا سمحت بذلك
User-Defined Bridge Network (شبكة مخصصة)
مثل الشبكة الافتراضية تماماً، لكن هذه المرة أنت من ينشئها. إنشاء شبكتك الخاصة يوفر مزايا رائعة:
المزايا:
- حل أسماء النطاقات (DNS) التلقائي بين الحاويات
- عزل أفضل وتسمية واضحة
- تحكم أكبر في الإعدادات
# إنشاء شبكة مخصصة

➜ ~ docker network create my-network2
# عرض الشبكات (ستجد شبكتك الجديدة)

➜ ~ docker network ls
NETWORK ID NAME DRIVER SCOPE
d720a3092fe2 MacVLANNetwork macvlan local
4c7c3a8ddff5 bridge bridge local
c650a15753be host host local
4d8c79859579 my-network bridge local
fa86ef00c648 none null local
# تشغيل حاويتين في الشبكة المخصصة

➜ ~ docker run -itd --rm --network my-network --name container4 app:v1

➜ ~ docker run -itd --rm --network my-network --name container5 app:v1
# الآن container4 يمكنها الوصول لـ container5 باستخدام الاسم مباشرة!

➜ ~ docker exec -it container4 sh
الفرق الأساسي: في الشبكة المخصصة، يمكن للحاويات التحدث مع بعضها باستخدام أسمائها مباشرة بدلاً من عناوين IP!
Host Network (شبكة الخادم)
شبكة الخادم تعطي حاويتك وصولاً كاملاً لشبكة خادمك.
الخصائص:
- لا توجد حاجة لتعيين منافذ (port mapping)
- سهل التنفيذ لكن بدون عزل
- الحاوية تشارك كل شيء مع الخادم: IP، منافذ، كل شيء!
# تشغيل حاوية مع شبكة الخادم

➜ ~ docker run -itd --rm --network host --name container6 app:v1
متى تستخدمها: عندما تحتاج وصولاً مباشراً بدون تعقيدات الـ NAT أو تعيين المنافذ - مثل خوادم VPN.
تحذير: لا توجد عزلة، لذا استخدمها بحذر!
MacVLAN Network
MacVLAN تجعل حاوياتك تبدو كأجهزة فيزيائية منفصلة على شبكتك الحقيقية.
كل حاوية تحصل على:
- عنوان IP خاص بها على شبكتك المحلية (LAN)
- عنوان MAC خاص بها (مثل جهاز حقيقي)
# إنشاء شبكة macvlan

➜ ~ docker network create -d macvlan \
--subnet 10.7.1.0/24 \
--gateway 10.7.1.3 \
-o parent=enp0s31f6 \
MacVLANNetwork
الفرق:
- الطريقة العادية: حاوية → Bridge → خادم → إنترنت
- مع MacVLAN: حاوية → (مباشرة إلى) الشبكة المحلية
تنبيه: قد تحتاج لتفعيل "promiscuous mode" على network switch.
IPVLAN Network
IPVLAN يسمح لحاوياتك بالحصول على عناوين IP منفصلة لكن تشارك نفس عنوان MAC الخاص بالخادم.
كل حاوية تحصل على:
- عنوان IP خاص بها على الشبكة
- تستخدم نفس عنوان MAC الخاص بالخادم
# إنشاء شبكة ipvlan

➜ ~ docker network create -d ipvlan \
--subnet 10.7.1.0/24 \
--gateway 10.7.1.3 \
-o parent=enp0s31f6 \
ipVLANetwork
المزايا:
- يعمل في وضعين: Layer 2 و Layer 3
- مثالي عندما لا تسمح الشبكة بعناوين MAC متعددة
- يعيد استخدام عنوان MAC الخادم لكن يعطي كل حاوية IP منفصل
Overlay Network (للشبكات الموزعة)
شبكة Overlay تسمح للحاويات التي تعمل على خوادم مختلفة بالتحدث مع بعضها كأنها على نفس الشبكة.
متى نحتاجها:
- في الإنتاج، عندما يكون لديك عدة خوادم
- مع أدوات مثل Docker Swarm أو Kubernetes
- لإدارة الكثير من الحاويات الموزعة
None Network (بدون شبكة)
شبكة "None" تعني عدم وجود اتصال شبكي على الإطلاق للحاوية.
إنها مثل وضع الحاوية في صندوق بدون إنترنت، بدون شبكة محلية... لا شيء.
# تشغيل حاوية بدون شبكة

➜ ~ docker run -d --name isolated --network none alpine
متى تستخدمها:
- الخيار الأكثر أمانا
- غالباً للاختبار أو البيئات عالية الأمان
- عندما تريد عزلاً تاماً
الأوامر الشائعة التي ستستخدمها:
docker network ls # عرض جميع الشبكات
docker network create my-network # إنشاء شبكة جديدة
docker network inspect bridge # فحص تفاصيل شبكة معينة
docker network rm my-network # حذف شبكة
Docker Networking ليس مجرد وسيلة لربط الحاويات، بل هو حجر الأساس في تصميم أنظمة موزعة وآمنة وقابلة للتوسع. اختيار نوع الشبكة المناسب يعتمد على:
- مستوى الأمان المطلوب.
- عدد وتعقيد الخدمات.
- هل يعمل التطبيق على خادم واحد أم عدة خوادم.
- متطلبات الأداء والوصول.
تذكّر:
إتقان إدارة الشبكات في Docker يمكّنك من بناء تطبيقات قوية، مستقرة، وجاهزة للإنتاج الحقيقي.
