تعلم البرمجة بالدارجة المغربية

مقدمة في تقنية الحاويات دوكر (Docker) للمبتدئين - دليل شامل

مقدمة في تقنية الحاويات دوكر (Docker) للمبتدئين - دليل شامل

محتويات المقال

ما هي تقنية الحاويات دوكر (Docker)؟

دوكر (Docker) هي منصة مفتوحة المصدر تسمح بإنشاء وتشغيل ونشر التطبيقات داخل حاويات (Containers). الحاويات هي بيئات معزولة خفيفة الوزن تحتوي على كل ما يحتاجه التطبيق للعمل، بما في ذلك الكود والمكتبات ومتغيرات البيئة والملفات التكوينية. تم إطلاق دوكر في عام 2013، وسرعان ما أصبح معيارًا صناعيًا في مجال تطوير البرمجيات ونشرها.

تسمح تقنية الحاويات للمطورين بإنشاء بيئة موحدة للتطبيق، مما يضمن أنه سيعمل بنفس الطريقة في أي مكان - على جهاز المطور المحلي، في بيئة الاختبار، أو في بيئة الإنتاج على السحابة.

لماذا تعتبر تقنية دوكر مهمة للمطورين؟

1. تبسيط عملية “يعمل على جهازي”

أحد أكبر التحديات في تطوير البرمجيات هي مشكلة “يعمل على جهازي” (Works on my machine) - عندما يعمل التطبيق بشكل صحيح على جهاز المطور ولكنه يفشل في بيئات أخرى. تحل الحاويات هذه المشكلة من خلال تغليف التطبيق وجميع تبعياته في وحدة واحدة يمكن تشغيلها في أي مكان.

2. تسريع عملية التطوير

تسمح دوكر بإعداد بيئات تطوير متسقة وقابلة للتكرار بسرعة. يمكن للمطورين الجدد في المشروع البدء بسرعة دون قضاء ساعات في إعداد البيئة المحلية.

3. تحسين كفاءة استخدام الموارد

على عكس الآلات الافتراضية التقليدية (VMs)، تشترك الحاويات في نواة نظام التشغيل المضيف، مما يجعلها أكثر كفاءة في استخدام موارد النظام. يمكن تشغيل عشرات أو حتى مئات من الحاويات على نفس الخادم الذي قد يستضيف بضع آلات افتراضية فقط.

4. دعم البنية المعمارية للخدمات المصغرة (Microservices)

تعد دوكر مثالية لتطوير وتشغيل تطبيقات الخدمات المصغرة، حيث يمكن تشغيل كل خدمة في حاوية منفصلة، مما يسهل تطويرها ونشرها وتحديثها بشكل مستقل.

5. تكامل سلس مع أدوات DevOps

تتكامل دوكر بسهولة مع أدوات التكامل المستمر والتسليم المستمر (CI/CD)، مما يسهل أتمتة عمليات الاختبار والنشر.

المفاهيم الأساسية في دوكر

1. الصور (Images)

الصورة في دوكر هي قالب للقراءة فقط يحتوي على مجموعة من التعليمات لإنشاء حاوية. تتضمن الصورة كل ما يحتاجه التطبيق للتشغيل: الكود، وقت التشغيل، الأدوات، المكتبات، والإعدادات. يمكن تشبيه الصورة بقرص DVD أو ISO - إنها تحتوي على كل شيء لكنها غير نشطة حتى يتم “تشغيلها”.

2. الحاويات (Containers)

الحاوية هي نسخة قابلة للتشغيل من صورة دوكر. يمكنك إنشاء وتشغيل وإيقاف وحذف الحاويات باستخدام واجهة سطر أوامر دوكر. يمكن تشبيه الحاوية بجهاز افتراضي خفيف الوزن - إنها تعمل معزولة عن النظام المضيف ولكنها تشترك في موارد النظام.

3. ملف دوكر (Dockerfile)

ملف دوكر هو ملف نصي يحتوي على سلسلة من التعليمات لبناء صورة دوكر. يحدد هذا الملف نظام التشغيل الأساسي، والتبعيات اللازمة، وملفات التطبيق، وأي إعدادات أخرى مطلوبة.

4. سجل دوكر (Docker Registry)

سجل دوكر هو مستودع لتخزين ومشاركة صور دوكر. Docker Hub هو السجل العام الرسمي، ويحتوي على آلاف الصور الجاهزة للاستخدام. يمكن للشركات أيضًا إنشاء سجلات خاصة لتخزين صورها الداخلية.

5. دوكر كومبوز (Docker Compose)

دوكر كومبوز هي أداة لتعريف وتشغيل تطبيقات دوكر متعددة الحاويات. باستخدام ملف YAML، يمكنك تكوين خدمات التطبيق وتشغيلها جميعًا بأمر واحد.

كيفية البدء مع دوكر

تثبيت دوكر

أول خطوة هي تثبيت دوكر على نظامك. يتوفر دوكر لأنظمة Windows وMacOS وLinux:

بعد التثبيت، يمكنك التحقق من نجاح التثبيت بتنفيذ الأمر التالي في سطر الأوامر:

docker --version

أول حاوية دوكر

لنبدأ بتشغيل أول حاوية دوكر. سنستخدم صورة “hello-world” الرسمية:

docker run hello-world

سيقوم هذا الأمر بتنزيل صورة hello-world من Docker Hub وتشغيلها. ستظهر رسالة تؤكد أن دوكر يعمل بشكل صحيح.

إنشاء تطبيق ويب بسيط باستخدام دوكر

لنقم بإنشاء تطبيق ويب بسيط باستخدام Node.js ودوكر:

  1. إنشاء دليل للمشروع:
mkdir docker-node-app
cd docker-node-app
  1. إنشاء ملف package.json:
{
  "name": "docker-node-app",
  "version": "1.0.0",
  "description": "تطبيق Node.js بسيط باستخدام دوكر",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.18.2"
  }
}
  1. إنشاء ملف server.js:
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;

app.get('/', (req, res) => {
  res.send('مرحبًا بك في تطبيق Node.js باستخدام دوكر!');
});

app.listen(PORT, () => {
  console.log(`التطبيق يعمل على المنفذ ${PORT}`);
});
  1. إنشاء ملف Dockerfile:
# استخدام صورة Node.js الرسمية كصورة أساسية
FROM node:14

# إنشاء دليل العمل
WORKDIR /usr/src/app

# نسخ ملفات package.json و package-lock.json
COPY package*.json ./

# تثبيت التبعيات
RUN npm install

# نسخ ملفات المشروع
COPY . .

# كشف المنفذ 3000
EXPOSE 3000

# تشغيل التطبيق
CMD ["node", "server.js"]
  1. بناء صورة دوكر:
docker build -t my-node-app .
  1. تشغيل الحاوية:
docker run -p 3000:3000 my-node-app

الآن يمكنك فتح متصفح الويب والانتقال إلى http://localhost:3000 لرؤية التطبيق قيد التشغيل.

أوامر دوكر الأساسية

إليك بعض أوامر دوكر الأساسية التي ستحتاجها:

إدارة الصور

  • عرض الصور المحلية:

    docker images
    
  • تنزيل صورة من Docker Hub:

    docker pull [اسم_الصورة]
    
  • حذف صورة:

    docker rmi [معرف_الصورة]
    

إدارة الحاويات

  • عرض الحاويات النشطة:

    docker ps
    
  • عرض جميع الحاويات (النشطة وغير النشطة):

    docker ps -a
    
  • تشغيل حاوية:

    docker run [اسم_الصورة]
    
  • تشغيل حاوية في الخلفية:

    docker run -d [اسم_الصورة]
    
  • إيقاف حاوية:

    docker stop [معرف_الحاوية]
    
  • حذف حاوية:

    docker rm [معرف_الحاوية]
    
  • عرض سجلات الحاوية:

    docker logs [معرف_الحاوية]
    

استخدام دوكر كومبوز (Docker Compose)

دوكر كومبوز يسمح بتعريف وتشغيل تطبيقات متعددة الحاويات. بدلاً من استخدام أوامر دوكر المتعددة، يمكنك استخدام ملف YAML واحد لتكوين خدمات التطبيق.

مثال على ملف docker-compose.yml

لنفترض أننا نريد إنشاء تطبيق ويب يتكون من خدمة Node.js وقاعدة بيانات MongoDB:

version: '3'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - mongo
    environment:
      - MONGO_URL=mongodb://mongo:27017/myapp

  mongo:
    image: mongo
    ports:
      - "27017:27017"
    volumes:
      - mongo-data:/data/db

volumes:
  mongo-data:

تشغيل التطبيق باستخدام دوكر كومبوز

بعد إنشاء ملف docker-compose.yml، يمكنك تشغيل التطبيق بأكمله باستخدام أمر واحد:

docker-compose up

لتشغيل التطبيق في الخلفية:

docker-compose up -d

لإيقاف التطبيق:

docker-compose down

أفضل الممارسات لاستخدام دوكر

1. استخدام صور رسمية وموثوقة

استخدم الصور الرسمية من Docker Hub عندما يكون ذلك ممكنًا، فهي تخضع للصيانة والتحديث المنتظم وتتبع أفضل الممارسات الأمنية.

2. جعل الصور خفيفة الوزن

استخدم صور أساسية خفيفة الوزن مثل Alpine Linux عندما يكون ذلك ممكنًا. تجنب تثبيت حزم غير ضرورية داخل الحاوية.

3. استخدام .dockerignore

أنشئ ملف .dockerignore لاستبعاد الملفات والمجلدات غير الضرورية من سياق البناء، مما يقلل من حجم الصورة ويسرع عملية البناء.

4. عدم تشغيل الحاويات كمستخدم root

لأسباب أمنية، من الأفضل تشغيل التطبيقات داخل الحاويات كمستخدم غير root.

5. استخدام متغيرات البيئة للتكوين

استخدم متغيرات البيئة لتكوين التطبيق بدلاً من تضمين الإعدادات مباشرة في الصورة.

6. استخدام الحجوم (Volumes) للبيانات الدائمة

استخدم حجوم دوكر لتخزين البيانات التي تحتاج إلى الاستمرار بعد إعادة تشغيل الحاوية أو حذفها.

حالات استخدام شائعة لدوكر

1. بيئات التطوير المحلية

يمكن للمطورين استخدام دوكر لإنشاء بيئات تطوير متسقة، مما يضمن أن جميع أعضاء الفريق يعملون في نفس البيئة بالضبط.

2. التكامل المستمر والتسليم المستمر (CI/CD)

تسمح دوكر بأتمتة عمليات البناء والاختبار والنشر، مما يجعلها أداة أساسية في خطوط أنابيب CI/CD.

3. تطبيقات الخدمات المصغرة (Microservices)

تعد دوكر مثالية لتطوير وتشغيل تطبيقات الخدمات المصغرة، حيث يمكن تشغيل كل خدمة في حاوية منفصلة.

4. نشر التطبيقات على السحابة

تسهل دوكر نشر التطبيقات على منصات السحابة المختلفة مثل AWS وAzure وGoogle Cloud، حيث تدعم جميعها تشغيل حاويات دوكر.

5. التوسع الأفقي (Horizontal Scaling)

يمكن استخدام دوكر مع أدوات مثل Kubernetes لتوسيع التطبيقات أفقيًا بسهولة استجابة للطلب المتزايد.

التكامل مع أدوات أخرى

1. Kubernetes

Kubernetes هو نظام مفتوح المصدر لأتمتة نشر وتوسيع وإدارة تطبيقات الحاويات. يوفر إطار عمل لتشغيل أنظمة موزعة بمرونة.

2. Docker Swarm

Docker Swarm هو أداة تجميع وجدولة مدمجة في دوكر، تسمح بإنشاء وإدارة مجموعة من الخوادم التي تعمل بدوكر.

3. أدوات CI/CD

تتكامل دوكر بسهولة مع أدوات CI/CD مثل Jenkins وGitHub Actions وCircleCI، مما يسهل أتمتة عمليات البناء والاختبار والنشر.

التحديات والاعتبارات

1. منحنى التعلم

قد يكون هناك منحنى تعلم للمبتدئين، خاصة عند التعامل مع مفاهيم متقدمة مثل الشبكات والأمان.

2. الأمان

يجب اتباع أفضل الممارسات الأمنية عند استخدام دوكر، مثل مسح الصور بحثًا عن الثغرات الأمنية وعدم تشغيل الحاويات كمستخدم root.

3. إدارة الموارد

قد تتطلب إدارة موارد النظام (مثل الذاكرة وCPU) اهتمامًا خاصًا، خاصة عند تشغيل العديد من الحاويات على نفس المضيف.

الخلاصة

تقنية الحاويات دوكر (Docker) أحدثت ثورة في طريقة تطوير ونشر وتشغيل التطبيقات. توفر دوكر بيئة موحدة ومتسقة للتطبيقات، مما يحل العديد من المشكلات التقليدية في تطوير البرمجيات ونشرها.

للمبتدئين، يمكن أن تبدو دوكر معقدة في البداية، لكن مع الممارسة والتعلم المستمر، ستصبح أداة قيمة في مجموعة أدواتك كمطور. ابدأ بالمفاهيم الأساسية والأمثلة البسيطة، ثم انتقل تدريجيًا إلى الاستخدامات الأكثر تعقيدًا.

سواء كنت مطورًا فرديًا أو تعمل في فريق كبير، فإن إتقان دوكر سيساعدك على تحسين سير عملك وزيادة إنتاجيتك وتقديم تطبيقات أكثر موثوقية.

هل أنت مستعد لبدء رحلتك مع دوكر؟ ابدأ اليوم بتثبيت دوكر وتجربة الأمثلة المذكورة في هذا المقال، وشارك تجاربك وأسئلتك في التعليقات أدناه!

Digital Arabians Author

DigitalArabians

مدونة DigitalArabians متخصصة في تعليم البرمجة بالدارجة المغربية، تهدف إلى تبسيط مفاهيم البرمجة والتقنية للمتحدثين بالعربية. نقدم محتوى تعليمي عالي الجودة لمساعدة المبتدئين والمحترفين على تطوير مهاراتهم البرمجية.