0%
أساسيات Docker: دليل شامل للمطورين

أساسيات Docker: دليل شامل للمطورين

اكتشف المفاهيم الأساسية في Docker، وكيفية إنشاء الحاويات وإدارتها، وأفضل الممارسات للتكامل المستمر والنشر.

I

InSkillCoach

· دقيقة

أساسيات Docker: دليل شامل للمطورين

لقد أحدث Docker ثورة في طريقة تطوير التطبيقات ونشرها وتشغيلها. يقدّم لك هذا الدليل المفاهيم الأساسية في Docker وكيفية استخدامه بفعالية ضمن سير عمل التطوير لديك.

ما هو Docker؟

Docker هو منصة لتوفير الحاويات (containerization) تتيح تغليف تطبيق وجميع اعتماداته داخل “حاوية” معزولة، يمكن تشغيلها على أي خادم. وخلافًا للأجهزة الافتراضية، لا تحتاج الحاويات إلى hypervisor، بل تعمل مباشرة على نواة الجهاز المضيف.

مزايا Docker

  • اتساق البيئة: تتحول عبارة “تعمل على جهازي” إلى “تعمل في كل مكان”
  • العزل: تعمل التطبيقات بشكل معزول دون أن تتداخل مع بعضها
  • كفاءة استخدام الموارد: أخف من الأجهزة الافتراضية التقليدية
  • نشر سريع: بدء تشغيل سريع للحاويات
  • سهولة التوسّع: استنساخ الحاويات بسهولة

معمارية Docker

تتكون معمارية Docker من عدة مكوّنات رئيسية:

  • Docker Daemon (dockerd): الخدمة التي تدير الحاويات
  • Docker Client: واجهة سطر الأوامر
  • Docker Registry: المستودع الذي تُخزَّن فيه الصور (مثل Docker Hub)
  • Docker Images: قوالب للقراءة فقط تُستخدم لإنشاء الحاويات
  • Docker Containers: النسخ قيد التشغيل من الصور

تثبيت Docker

Windows

# تثبيت Docker Desktop لنظام Windows
# التنزيل من https://www.docker.com/products/docker-desktop
# اتباع تعليمات التثبيت

Linux (Ubuntu)

# تحديث قائمة الحزم
sudo apt-get update

# تثبيت المتطلبات المسبقة
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release

# إضافة مفتاح GPG الرسمي لـ Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# إعداد المستودع المستقر
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# تثبيت Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

# إضافة المستخدم الخاص بك إلى مجموعة docker
sudo usermod -aG docker $USER

macOS

# تثبيت Docker Desktop لنظام Mac
# التنزيل من https://www.docker.com/products/docker-desktop
# اتباع تعليمات التثبيت

أوامر Docker الأساسية

إدارة الصور

# تنزيل صورة
docker pull ubuntu:latest

# عرض قائمة الصور
docker images

# بناء صورة انطلاقًا من Dockerfile
docker build -t mon-app:1.0 .

# حذف صورة
docker rmi ubuntu:latest

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

# إنشاء حاوية وتشغيلها
docker run -d -p 8080:80 --name mon-conteneur nginx

# عرض الحاويات قيد التشغيل
docker ps

# عرض جميع الحاويات (بما فيها المتوقفة)
docker ps -a

# إيقاف حاوية
docker stop mon-conteneur

# تشغيل حاوية موجودة
docker start mon-conteneur

# حذف حاوية
docker rm mon-conteneur

التفاعل مع الحاويات

# تنفيذ أمر داخل حاوية قيد التشغيل
docker exec -it mon-conteneur bash

# عرض سجلات حاوية
docker logs mon-conteneur

# نسخ الملفات إلى الحاوية أو منها
docker cp mon-fichier.txt mon-conteneur:/chemin/destination
docker cp mon-conteneur:/chemin/source/fichier.txt .

إنشاء Dockerfile

Dockerfile هو ملف نصي يحتوي على جميع الأوامر اللازمة لتجميع صورة Docker.

# استخدام صورة أساسية
FROM node:14-alpine

# تحديد مجلد العمل
WORKDIR /app

# نسخ ملفات الاعتمادات
COPY package*.json ./

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

# نسخ بقية الملفات
COPY . .

# كشف منفذ
EXPOSE 3000

# تحديد الأمر الذي يُنفَّذ عند بدء تشغيل الحاوية
CMD ["npm", "start"]

أفضل الممارسات لملفات Dockerfile

  1. استخدام صور أساسية خفيفة مثل Alpine Linux
  2. دمج أوامر RUN لتقليل عدد الطبقات
  3. تنظيف ذاكرات التخزين المؤقت بعد تثبيت الحزم
  4. استخدام .dockerignore لاستبعاد الملفات غير الضرورية
  5. تحديد إصدارات دقيقة للاعتمادات
  6. استخدام مستخدمين غير root لتشغيل التطبيق

Docker Compose

Docker Compose أداة لتعريف التطبيقات متعددة الحاويات وتشغيلها.

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

version: '3'
services:
  web:
    build: .
    ports:
      - "8000:8000"
    volumes:
      - ./app:/app
    depends_on:
      - db
    environment:
      - DATABASE_URL=postgres://postgres:password@db:5432/app

  db:
    image: postgres:13
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=password
      - POSTGRES_USER=postgres
      - POSTGRES_DB=app

volumes:
  postgres_data:

أوامر Docker Compose

# تشغيل جميع الخدمات المعرّفة في docker-compose.yml
docker-compose up -d

# إيقاف جميع الخدمات
docker-compose down

# عرض سجلات جميع الخدمات
docker-compose logs

# إعادة بناء الصور ثم التشغيل
docker-compose up -d --build

شبكات Docker

ينشئ Docker افتراضيًا عدة شبكات:

  • bridge: الشبكة الافتراضية للحاويات
  • host: يزيل العزل الشبكي بين الحاوية والمضيف
  • none: يعطّل الشبكة

إنشاء الشبكات وإدارتها

# إنشاء شبكة
docker network create mon-reseau

# عرض قائمة الشبكات
docker network ls

# ربط حاوية بشبكة
docker network connect mon-reseau mon-conteneur

# فحص شبكة
docker network inspect mon-reseau

وحدات التخزين (Volumes) في Docker

تتيح وحدات التخزين الاحتفاظ بالبيانات خارج الحاويات.

أنواع وحدات التخزين

  1. وحدة تخزين مسمّاة (Named volume): يديرها Docker
  2. وحدة تخزين مرتبطة (Bind mount): مرتبطة بمسار محدد على المضيف
  3. وحدة تخزين tmpfs: تُخزَّن في الذاكرة (غير دائمة)

أوامر إدارة وحدات التخزين

# إنشاء وحدة تخزين مسمّاة
docker volume create mon-volume

# عرض قائمة وحدات التخزين
docker volume ls

# استخدام وحدة تخزين عند تشغيل حاوية
docker run -d -v mon-volume:/data --name mon-conteneur ubuntu

# ربط مجلد من المضيف بحاوية
docker run -d -v /chemin/hote:/data --name mon-conteneur ubuntu

# حذف وحدة تخزين
docker volume rm mon-volume

Docker Registry

الـ registry هو خدمة لتخزين صور Docker وتوزيعها.

التعامل مع Docker Hub

# تسجيل الدخول إلى Docker Hub
docker login

# وسم صورة
docker tag mon-app:1.0 utilisateur/mon-app:1.0

# دفع صورة إلى Docker Hub
docker push utilisateur/mon-app:1.0

# جلب صورة من Docker Hub
docker pull utilisateur/mon-app:1.0

نشر Registry خاص

# تشغيل registry محلي
docker run -d -p 5000:5000 --name registry registry:2

# وسم صورة لتُدفع إلى registry المحلي
docker tag mon-app:1.0 localhost:5000/mon-app:1.0

# الدفع إلى registry المحلي
docker push localhost:5000/mon-app:1.0

أمان Docker

أفضل الممارسات

  1. إبقاء Docker محدّثًا للاستفادة من تصحيحات الأمان
  2. فحص الصور لاكتشاف الثغرات (باستخدام Docker Scout أو Trivy)
  3. تقييد صلاحيات الحاويات
  4. استخدام مستخدمين غير root داخل الحاويات
  5. توقيع الصور باستخدام Docker Content Trust
  6. تقييد الموارد (المعالج والذاكرة) للحاويات

الإعداد الآمن

# تشغيل حاوية مع قيود على الموارد
docker run -d --name mon-conteneur --memory="512m" --cpus="0.5" nginx

# تشغيل حاوية بمستخدم محدد
docker run -d --user 1000:1000 --name mon-conteneur nginx

# تشغيل حاوية في وضع القراءة فقط
docker run -d --read-only --name mon-conteneur nginx

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

تطبيقات الويب

# تشغيل تطبيق ويب Node.js
docker run -d -p 3000:3000 --name node-app node-app:1.0

# تشغيل خادم Nginx كوكيل عكسي
docker run -d -p 80:80 --name nginx -v ./nginx.conf:/etc/nginx/nginx.conf nginx

قواعد البيانات

# تشغيل قاعدة بيانات MySQL
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=password -v mysql_data:/var/lib/mysql mysql:8.0

# تشغيل قاعدة بيانات PostgreSQL
docker run -d --name postgres -e POSTGRES_PASSWORD=password -v postgres_data:/var/lib/postgresql/data postgres:13

CI/CD

# تنفيذ الاختبارات داخل حاوية
docker run --rm -v $(pwd):/app -w /app node:14 npm test

# بناء تطبيق داخل حاوية
docker run --rm -v $(pwd):/app -w /app maven:3.8-openjdk-11 mvn package

التكامل مع Kubernetes

يعمل Docker بشكل ممتاز مع Kubernetes، منسّق الحاويات (container orchestrator):

  1. إنشاء صور Docker لتطبيقك
  2. دفع الصور إلى registry يمكن الوصول إليه
  3. تعريف ملفات manifest الخاصة بـ Kubernetes لنشر الحاويات
  4. استخدام kubectl لإدارة عمليات النشر

الخاتمة

لقد غيّر Docker تطوير البرمجيات إذ جعل التطبيقات أكثر قابلية للنقل، وأسهل في النشر والتوسّع. وأصبح إتقان Docker مهارة أساسية للمطورين ومحترفي DevOps.

باتباعك هذا الدليل، اكتسبت المعارف الأساسية التي تمكّنك من:

  • فهم المفاهيم الرئيسية في Docker
  • إنشاء الحاويات وإدارتها
  • العمل مع الصور ووحدات التخزين
  • استخدام Docker Compose للتطبيقات متعددة الحاويات
  • اتباع أفضل ممارسات الأمان

وللمضي أبعد من ذلك، استكشف تنسيق الحاويات باستخدام Kubernetes، وخطوط CI/CD القائمة على Docker، ومعمارية الخدمات المصغّرة (microservices).

InSkillCoach

نبذة عن InSkillCoach

خبير في التدريب والتقنيات

مدرّب متخصص في التقنيات المتقدمة والذكاء الاصطناعي، تدعمه شركة GNeurone Inc.

الشهادات:

  • AWS Certified Solutions Architect – Professional
  • شهادات Google Cloud
  • Microsoft Certified: DevOps Engineer Expert
  • Certified Kubernetes Administrator (CKA)
  • CompTIA Security+
1.2k
185

التعليقات

التعليقات مدعومة عبر GitHub Discussions

سجّل الدخول باستخدام GitHub للمشاركة في النقاش

تم نسخ الرابط!