عندما تبدأ بتشغيل أكثر من حاوية Docker على سيرفرك — مثل تشغيل موقع ووردبريس، وقاعدة بيانات MySQL، ولوحة تحكم Portainer — فإن السؤال الأبرز الذي يطرح نفسه هو: كيف تتواصل هذه الحاويات مع بعضها البعض بأمان وكفاءة؟
الاعتماد على فتح منافذ قواعد البيانات للعامة لكي يتصل بها التطبيق هو خطأ أمني كارثي. الحل الصحيح هو الاعتماد على شبكات دكر (Docker Networks)؛ وهي الميزة التلقائية التي تتيح لك إنشاء بيئات شبكات افتراضية معزولة تماماً تتيح للحاويات تبادل البيانات سراً وبأعلى سرعة ممكنة. في هذا الدليل العملي والمفصل، سنشرح أنواع شبكات Docker وكيفية إعداد تواصل آمن بين حاوياتك.
الأنواع الرئيسية لشبكات Docker
يوفر محرك Docker عدة تعريفات افتراضية للشبكات لتناسب متطلبات التشغيل المختلفة:
| نوع الشبكة | طريقة العمل | أبرز الحالات الاستخدامية | |
|---|---|---|---|
| Bridge Network (الافتراضية) | تنشئ نفقاً افتراضياً داخلياً معزولاً يربط الحاويات معاً وتتحكم في المنافذ الخارجية عبر التمرير (Port Mapping) | الاستخدام القياسي والافتراضي لأغلب الحاويات والتطبيقات المشتركة | |
| Host Network | تلغي العزل بالكامل وتربط حاوية Docker بمنافذ السيرفر المضيف (Host) مباشرة | التطبيقات الحساسة للسرعة أو التي تتطلب فتح منافذ عشوائية كثيرة (مثل Plex) | |
| Overlay Network | تربط حاويات متعددة تعمل على خوادم فيزيائية مختلفة (في بيئة Docker Swarm) | إدارة العناقيد والمشاريع الكبيرة متعددة الخوادم | |
| None Network | تعزل الحاوية بالكامل عن الشبكة والإنترنت والاتصالات الأخرى | حاويات معالجة البيانات الحساسة أو الحسابات الرياضية التي لا تتطلب اتصالاً بالإنترنت |
قوة تصفح الحاويات بالأسماء (Embedded DNS Server)
الميزة الأهم عند إنشاء شبكة مخصصة من نوع User-Defined Bridge Network هي ميزة اكتشاف الخدمة التلقائي (Service Discovery). في هذه الشبكة المخصصة، يحتوي Docker على خادم DNS داخلي مدمج يتيح للحاويات الاتصال ببعضها البعض باستخدام **اسم الحاوية** كعنوان إنترنت بدلاً من استخدام عناوين الـ IP الديناميكية المتغيرة.
مثلاً، يمكن لحاوية موقعك الاتصال بقاعدة البيانات بمجرد كتابة db-container في حقل المضيف (Host)، وسيقوم Docker بتوجيه المرور بالخلفية بشكل تلقائي وآمن تماماً.
خطوات إعداد شبكة معزولة وتوصيل الحاويات
الخطوة 1: إنشاء شبكة مخصصة جديدة:
docker network create my_secure_net
الخطوة 2: تشغيل حاوية قاعدة البيانات وتوصيلها بالشبكة:
لاحظ أننا لن نقوم بفتح أي منفذ خارجي لقاعدة البيانات (لم نضع المعامل -p 3306:3306) حماية لها من العالم الخارجي:
docker run -d
--name db-container
--network my_secure_net
-e MYSQL_ROOT_PASSWORD=strong_password
mysql:8
الخطوة 3: تشغيل حاوية التطبيق وربطها بنفس الشبكة:
هنا سنفتح المنفذ الخارجي للتطبيق فقط ليتمكن الزوار من الدخول للموقع:
docker run -d
--name web-app
--network my_secure_net
-p 8083:80
wordpress:latest
الآن، يستطيع web-app الاتصال بـ db-container عبر منفذ MySQL الداخلي 3306 بنجاح وتام، بينما يستحيل على أي شخص من خارج السيرفر حتى رؤية منفذ قاعدة البيانات.
إعداد الشبكات الاحترافي في Docker Compose
في المشاريع المهنية، يمكنك زيادة درجة الأمان عبر عزل الحاويات في شبكات متعددة داخل ملف docker-compose.yml واحد. في المثال التالي، سنعزل قاعدة البيانات في شبكة داخلية خلفية لا ترى الإنترنت الخارجي، بينما نضع ووردبريس في شبكة الواجهة الأمامية وشبكة قاعدة البيانات معاً:
version: '3.8'
services:
wordpress:
image: wordpress:latest
ports:
- "8083:80"
networks:
- frontend_net
- backend_net
environment:
WORDPRESS_DB_HOST: mysql-db
WORDPRESS_DB_PASSWORD: strong_pass
mysql-db:
image: mysql:8
networks:
- backend_net
environment:
MYSQL_ROOT_PASSWORD: strong_pass
networks:
frontend_net: # شبكة واجهة الويب للاتصال الخارجي
backend_net: # شبكة معزولة تماماً تمنع قاعدة البيانات من رؤية الإنترنت
خاتمة
استخدام شبكات Docker المخصصة هو الفارق الحاسم بين عشوائية الإعداد وتأمين بيئات العمل باحترافية كاملة. من خلال عزل حاوياتك، وتجنب فتح المنافذ الحساسة للعامة، واستغلال ميزة خادم DNS الداخلي لـ Docker، تضمن بناء معمارية خادم قوية ومحمية من الاختراقات.
تذكر دائماً: أمن بياناتك يبدأ من عزل مكونات خادمك، والشبكة المعزولة هي خط دفاعك الأقوى لحماية أسرار تطبيقك.
اترك تعليقاً
يجب أنت تكون مسجل الدخول لتضيف تعليقاً.