تخطَّ إلى المحتوى
ARAB CODEمجتمع المطورين العرب

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 إلى الصورة.

المصادر

  1. Docker documentation
  2. Dockerfile reference
  3. Building best practices