Docker
Docker أداة لتغليف التطبيق مع كل ما يحتاجه (بيئة التشغيل، المكتبات، الإعدادات) في صورة (image) واحدة، ثم تشغيلها في حاوية (container) معزولة تعمل بالطريقة نفسها على أي جهاز.
الصورة والحاوية
- الصورة: قالب للقراءة فقط مبني من طبقات.
- الحاوية: نسخة قيد التشغيل من صورة، لها نظام ملفات قابل للكتابة يُحذف بحذفها.
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"]
نسخ ملفات الحزم قبل بقية الكود يستفيد من ذاكرة الطبقات: لا يُعاد تثبيت الحزم إلا إذا تغيّرت.
أوامر أساسية
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
حفظ البيانات
docker volume create pgdata
docker run -d -v pgdata:/var/lib/postgresql/data postgres:16
البيانات في حجم (volume) تبقى بعد حذف الحاوية.
Compose
# 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إلى الصورة.