,

Docker Networks: كيف تتواصل الحاويات مع بعضها البعض بأمان

عندما تبدأ بتشغيل أكثر من حاوية 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، تضمن بناء معمارية خادم قوية ومحمية من الاختراقات.

تذكر دائماً: أمن بياناتك يبدأ من عزل مكونات خادمك، والشبكة المعزولة هي خط دفاعك الأقوى لحماية أسرار تطبيقك.

روابط ذات صلة

اترك تعليقاً