🐳

Docker & Containers

تغليف التطبيقات في حاويات محمولة وقابلة للتكرار. ثورة في طريقة بناء ونشر البرمجيات.

متوسط Open Source أساس Kubernetes

📖 ما هو Docker؟

الحاويات (Containers)

Docker يتيح لك تغليف التطبيق مع كل اعتمادياته (مكتبات، إعدادات، كود) في "حاوية" واحدة تعمل على أي نظام. بخلاف الآلات الافتراضية، الحاويات تشارك نفس نواة النظام أخف وأسرع.

📦

Image (الصورة)

قالب جاهز يحتوي التطبيق والاعتماديات. يُبنى من Dockerfile.

🏃

Container (الحاوية)

نسخة قيد التشغيل من الصورة. يمكن تشغيل عدة حاويات من صورة واحدة.

📋

Dockerfile

ملف نصي يحتوي تعليمات بناء الصورة خطوة بخطوة.

🎼

Docker Compose

ملف YAML لتشغيل عدة حاويات معاً كخدمة متكاملة.

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

Terminal — Docker Commands
# تشغيل حاوية docker run -d -p 8080:80 --name myapp nginx # عرض الحاويات النشطة docker ps # عرض كل الحاويات (حتى المتوقفة) docker ps -a # إيقاف حاوية docker stop myapp # حذف حاوية docker rm myapp # عرض الصور docker images # حذف صورة docker rmi nginx # عرض السجلات docker logs -f myapp # الدخول لداخل الحاوية docker exec -it myapp /bin/bash

📋 كتابة Dockerfile

Dockerfile — Node.js App
# صورة الأساس FROM node:20-alpine # مجلد العمل WORKDIR /app # نسخ ملفات الاعتماديات COPY package*.json ./ # تثبيت الاعتماديات RUN npm ci --production # نسخ كود التطبيق COPY . . # المنفذ EXPOSE 3000 # أمر التشغيل CMD ["node", "server.js"]
Terminal — بناء وتشغيل
# بناء الصورة docker build -t myapp:latest . # تشغيل الحاوية docker run -d -p 3000:3000 --name app myapp:latest # فحص حجم الصورة docker images myapp
⚠️ استخدم صور Alpine الصغيرة لتقليل الحجم. node:20-alpine أصغر بـ 10x من node:20.

🎼 Docker Compose

docker-compose.yml — Full Stack
version: '3.8' services: app: build: . ports: - "3000:3000" environment: - DB_HOST=database - DB_PASSWORD=secret depends_on: - database volumes: - ./src:/app/src database: image: postgres:16-alpine environment: - POSTGRES_PASSWORD=secret volumes: - pgdata:/var/lib/postgresql/data redis: image: redis:7-alpine ports: - "6379:6379" volumes: pgdata:
Terminal — Compose Commands
# تشغيل كل الخدمات docker compose up -d # عرض الخدمات docker compose ps # عرض السجلات docker compose logs -f app # إيقاف وحذف docker compose down # إيقاف وحذف البيانات docker compose down -v

💾 Volumes و Networks

💿

Volumes (التخزين)

حفظ البيانات خارج الحاوية. تبقى حتى بعد حذف الحاوية. مثال: قواعد البيانات.

🔗

Networks (الشبكات)

عزل الحاويات عن بعضها. الحاويات في نفس الشبكة تتواصل بالأسماء.

Terminal — Volumes & Networks
# إنشاء volume docker volume create mydata # استخدام volume docker run -v mydata:/data nginx # إنشاء شبكة docker network create mynet # تشغيل حاوية في شبكة docker run --network mynet --name web nginx

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

🎯 1. استخدم صور Alpine لتقليل الحجم
2. استخدم Multi-stage builds للفصل بين البناء والتشغيل
3. لا تشغل الحاوية كـ root — استخدم USER
4. استخدم .dockerignore مثل .gitignore
5. ثبّت إصدارات محددة: node:20-alpine وليس node:latest
6. استخدم Docker Compose للبيئة المحلية
السابق: الشبكات التالي: إدارة الخوادم