0Pricing
React Academy · درس

وضع تطبيق React/Next.js داخل Docker

اكتب Dockerfile متعدد المراحل لتطبيق Next.js وشغّله محليًا باستخدام Docker Compose.

وضع تطبيق React/Next.js داخل Docker درس مجاني في React Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.

لماذا Docker؟

تجمع حاويات Docker تطبيقك وتبعياته معًا، مما يضمن سلوكًا متسقًا في بيئات التطوير والتجهيز والإنتاج. وتعمل الصورة نفسها في كل مكان.

Dockerfile لتطبيق React SPA بسيط

بناء من مرحلتين: استخدام Node.js للبناء وNginx لتقديم الناتج الثابت.

# Stage 1: Build
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# Stage 2: Serve with Nginx
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

إعداد Nginx لتوجيه SPA

اضبط Nginx لتقديم index.html لجميع المسارات، لدعم التوجيه من جانب العميل.

# nginx.conf
server {
  listen 80;
  root /usr/share/nginx/html;
  index index.html;

  location / {
    try_files $uri $uri/ /index.html; # SPA routing
  }

  location ~* \.(js|css|png|jpg|woff2)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
  }
}

Dockerfile لوضع Standalone في Next.js

يدعم Next.js 12 والإصدارات الأحدث الخيار output: 'standalone'، الذي ينسخ الملفات المطلوبة فقط لإنشاء صورة إنتاجية صغيرة.

// next.config.js
module.exports = { output: 'standalone' };

# Dockerfile (Next.js standalone)
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/public ./public
EXPOSE 3000
CMD ["node", "server.js"]

.dockerignore

استبعد الملفات غير الضرورية من سياق بناء Docker لتسريع عمليات البناء وتقليل حجم الصورة.

node_modules
.next
dist
.env*
.git
README.md
*.test.ts

البناء والتشغيل

أنشئ الصورة وشغّلها محليًا.

# Build:
docker build -t my-next-app .

# Run:
docker run -p 3000:3000 -e DATABASE_URL=postgres://... my-next-app

# Check size:
docker images my-next-app

Docker Compose للتطوير المحلي

استخدم Docker Compose لتشغيل التطبيق إلى جانب تبعياته، مثل قاعدة البيانات وRedis، باستخدام أمر واحد.

# docker-compose.yml
services:
  web:
    build: .
    ports: ['3000:3000']
    environment:
      DATABASE_URL: postgresql://postgres:password@db:5432/myapp
    depends_on: [db]
  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_PASSWORD: password
      POSTGRES_DB: myapp
    volumes:
      - pgdata:/var/lib/postgresql/data
volumes:
  pgdata:

فحوصات الصحة

أضف فحصًا للصحة إلى Dockerfile حتى تعرف أدوات تنسيق الحاويات متى تصبح الحاوية جاهزة.

HEALTHCHECK --interval=30s --timeout=3s \
  CMD curl -f http://localhost:3000/api/health || exit 1

متغيرات البيئة وقت التشغيل

مرّر متغيرات البيئة عند تنفيذ docker run أو عبر --env-file. لا تضمّن الأسرار في الصورة مطلقًا.

docker run -p 3000:3000 \
  --env-file .env.production \
  my-next-app

عمليات البناء متعددة المنصات

أنشئ صورًا لمعمارية CPU متعددة، مثل ARM64 لأجهزة Mac المزودة بشريحة M1 والآلات الافتراضية السحابية، وAMD64 لمعظم الخوادم، باستخدام Docker Buildx.

docker buildx build \
  --platform linux/amd64,linux/arm64 \
  -t myregistry/my-next-app:latest \
  --push .

تحقق سريع

ما فائدة استخدام عمليات بناء Docker متعددة المراحل لتطبيق React/Next.js؟

مراجعة

استخدم Dockerfile متعدد المراحل: استخدم Node.js للبناء وNginx أو node:alpine لتقديم التطبيق. أضف output: 'standalone' إلى إعدادات Next.js لإنشاء صور صغيرة. استخدم Docker Compose للتطوير المحلي، ومرّر الأسرار وقت التشغيل عبر متغيرات البيئة، وأنشئ صورًا متعددة المنصات باستخدام Buildx لضمان التوافق مع ARM وAMD64.

الأسئلة الشائعة

هل درس «وضع تطبيق React/Next.js داخل Docker» مجاني؟

نعم — نص درس «وضع تطبيق React/Next.js داخل Docker» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.

ماذا ستتعلم في «وضع تطبيق React/Next.js داخل Docker»؟

اكتب Dockerfile متعدد المراحل لتطبيق Next.js وشغّله محليًا باستخدام Docker Compose. تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟

لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «وضع تطبيق React/Next.js داخل Docker»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟

نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. النشر إلى Vercel: دون إعداد وعناوين URL للمعاينة
  2. استضافة React SPA على AWS S3 وCloudFront
  3. وضع تطبيق React/Next.js داخل Docker
  4. ‏CI/CD لـ React باستخدام GitHub Actions
← العودة إلى React Academy