سجل التعديلات
الفرق مقارنةً بالنسخة السابقة
+ **Docker** أداة لتغليف التطبيق مع كل ما يحتاجه (بيئة التشغيل، المكتبات، الإعدادات) في **صورة** (image) واحدة، ثم تشغيلها في **حاوية** (container) معزولة تعمل بالطريقة نفسها على أي جهاز.+ ## الصورة والحاوية++ - **الصورة**: قالب للقراءة فقط مبني من طبقات.+ - **الحاوية**: نسخة قيد التشغيل من صورة، لها نظام ملفات قابل للكتابة يُحذف بحذفها.++ ## Dockerfile++ ```dockerfile+ FROM node:22-alpine+ WORKDIR /app+ COPY package.json package-lock.json ./+ RUN npm ci --omit=dev+ COPY . .+ USER node+ EXPOSE 3000+ CMD ["node", "server.js"]+ ```++ نسخ ملفات الحزم قبل بقية الكود يستفيد من **ذاكرة الطبقات**: لا يُعاد تثبيت الحزم إلا إذا تغيّرت.++ ## أوامر أساسية++ ```bash+ docker build -t myapp:1.0 .+ docker run -d --name web -p 3000:3000 myapp:1.0+ docker logs -f web+ docker ps+ docker stop web+ ```++ ## حفظ البيانات++ ```bash+ docker volume create pgdata+ docker run -d -v pgdata:/var/lib/postgresql/data postgres:16+ ```++ البيانات في **حجم** (volume) تبقى بعد حذف الحاوية.++ ## Compose++ ```yaml+ # compose.yaml+ services:+ web:+ build: .+ ports: ["3000:3000"]+ depends_on: [db]+ db:+ image: postgres:16+ environment:+ POSTGRES_PASSWORD_FILE: /run/secrets/db_password+ volumes: [pgdata:/var/lib/postgresql/data]+ volumes:+ pgdata:+ ```++ `docker compose up -d` يشغّل الخدمات معاً على شبكة مشتركة.++ ## أخطاء شائعة++ - وضع الأسرار في `Dockerfile` (تبقى في طبقات الصورة).+ - التشغيل بالمستخدم `root` داخل الحاوية دون حاجة.+ - تخزين بيانات مهمة داخل الحاوية بلا حجم.+ - نسيان ملف `.dockerignore` فيُنسخ `node_modules` و`.git` إلى الصورة.
مقال مرجعي رسمي من فريق عرب كود
ملاحظة المراجعة: Approved for publication: site owner written instruction 2026-10-24 (final completion directive: populate the wiki via the official editorial identity)