🌐 Detecting your location…

كيفية نشر حاوية Docker للإنتاج في عام 2026: دليل عملي

⏱️2 min read  ·  250 words

من السهل تشغيل حاوية Docker محليًا. إن تشغيله بأمان في مرحلة الإنتاج — من خلال التكوين المناسب، وفحوصات السلامة، والتحديثات بدون توقف — يتطلب بضع خطوات إضافية. يتناول هذا الدليل نشر تطبيق موجود في حاوية للإنتاج بالطريقة الصحيحة في عام 2026، بدءًا من صورة جاهزة للإنتاج وحتى وكيل عكسي وتحديثات لا تؤدي إلى انخفاض حركة المرور.

الخطوة 1: كتابة ملف Dockerfile جاهز للإنتاج

ابدأ ببناء متعدد المراحل بحيث تحتوي صورتك النهائية فقط على ما تحتاج إلى تشغيله – وليس بناء الأدوات وتبعيات التطوير. الصور الأصغر حجمًا تسحب بشكل أسرع، وتبدأ بشكل أسرع، ولها سطح هجوم أصغر.

# Build stage
FROM node:22-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# Runtime stage
FROM node:22-alpine
WORKDIR /app
ENV NODE_ENV=production
COPY package*.json ./
RUN npm ci --omit=dev
COPY --from=build /app/dist ./dist
USER node
EXPOSE 3000
CMD ["node", "dist/server.js"]

لاحظUSER node line – لا تقم مطلقًا بتشغيل حاويات الإنتاج كجذر. إن التشغيل كمستخدم غير متميز يحد من الضرر إذا تم اختراق التطبيق.

الخطوة 2: التعامل مع التكوين باستخدام متغيرات البيئة

لا تخبز الأسرار في صورتك أبدًا. قم بتمرير التكوين والأسرار في وقت التشغيل من خلال متغيرات البيئة أو مدير الأسرار. يجب أن تكون صورتك متطابقة عبر العرض والإنتاج؛ فقط البيئة تختلف.

docker run -d \
  --name myapp \
  --env-file /etc/myapp/production.env \
  --restart unless-stopped \
  -p 3000:3000 \
  myapp:1.4.0

احتفظ بـ.env ملف خارج الصورة وخارج التحكم في الإصدار. على مضيف واحد، يعمل ملف env ذو الأذونات المقفلة؛ على نطاق واسع، استخدم أسرار Docker، أو AWS Secrets Manager، أو المتجر السري لنظامك الأساسي.

الخطوة 3: إضافة فحص الصحة

يتيح فحص السلامة لـ Docker (ومنسقك أو الوكيل العكسي) معرفة ما إذا كانت الحاوية جاهزة بالفعل لخدمة حركة المرور، وليس مجرد التشغيل. أضف نقطة نهاية مثل/health إلى التطبيق الخاص بك، ثم أعلن الشيك.

HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \
  CMD wget -qO- http://localhost:3000/health || exit 1

مع هذا في مكانه،docker ps يظهرhealthy or unhealthy الحالة، ويمكن للمنسقين تجنب توجيه حركة المرور إلى الحاويات التي لا تزال في مرحلة الإحماء أو التي أصبحت سيئة.

الخطوة 4: استخدم Docker Compose لإعداد نظيف

حتى على خادم واحد، يجعل Compose عملية النشر الخاصة بك قابلة للتكرار والتوثيق الذاتي. فهو يلتقط الصورة والمنافذ والبيئة وسياسة إعادة التشغيل والتبعيات في ملف واحد.

services:
  app:
    image: myapp:1.4.0
    restart: unless-stopped
    env_file: /etc/myapp/production.env
    expose:
      - "3000"
    healthcheck:
      test: ["CMD", "wget", "-qO-", "http://localhost:3000/health"]
      interval: 30s
      timeout: 3s
      retries: 3
    depends_on:
      - db
  db:
    image: postgres:17-alpine
    restart: unless-stopped
    env_file: /etc/myapp/db.env
    volumes:
      - pgdata:/var/lib/postgresql/data
volumes:
  pgdata:

لاحظ أن وحدة التخزين المسماة لـ Postgres – تخزين الحاوية سريع الزوال، لذا فإن أي بيانات يجب عليك الاحتفاظ بها تنتمي إلى وحدة تخزين، وليس داخل الطبقة القابلة للكتابة للحاوية أبدًا.

الخطوة 5: ضع وكيلًا عكسيًا في المقدمة

لا تعرض منفذ تطبيقك مباشرة إلى الإنترنت. ضع وكيلًا عكسيًا (Nginx أو Caddy أو Traefik) في المقدمة لإنهاء TLS وإضافة رؤوس الأمان وتوجيه حركة المرور. تحظى Caddy بشعبية كبيرة لأنها تحصل على شهادات HTTPS وتجددها تلقائيًا.

# Caddyfile
myapp.example.com {
    reverse_proxy app:3000
    encode gzip
    header {
        Strict-Transport-Security "max-age=31536000; includeSubDomains"
        X-Content-Type-Options nosniff
    }
}

يتعامل الوكيل مع HTTPS والرؤوس بينما يركز تطبيقك على تقديم الطلبات عبر HTTP العادي داخل شبكة Docker الخاصة.

الخطوة 6: نشر التحديثات دون توقف

التحديث الساذج – أوقف الحاوية القديمة، وابدأ الحاوية الجديدة – يؤدي إلى انخفاض حركة المرور أثناء هذه الفجوة. للحصول على تحديثات بدون توقف، ابدأ تشغيل الحاوية الجديدة، وانتظر حتى تجتاز عمليات التحقق من السلامة، ثم قم بتبديل الوكيل وإزالة الحاوية القديمة. يقوم Traefik والمنسقون بأتمتة هذا الأمر؛ في إعداد بسيط، يمكنك تشغيل نسختين لفترة وجيزة وتقطيعهما.

# Pull the new version and recreate with Compose
docker compose pull app
docker compose up -d --no-deps app
# Compose starts the new container; verify health before removing old

قم دائمًا بوضع علامة على الصور بإصدار محدد ( )، ولا تعتمد أبدًا علىmyapp:1.4.0 في الإنتاج. العلامات الصريحة تجعل عمليات التراجع أمرًا تافهًا – فأنت تعرف بالضبط الإصدار الذي يجب إعادة نشره.latestالخطوة 7: التسجيل والمراقبة

قم بتكوين برنامج تشغيل السجل بحيث تنتقل السجلات إلى مكان دائم، وقم بتحديد حجم السجل بحيث لا تتمكن الحاوية من ملء القرص. قم بشحن السجلات إلى مكان مركزي (Loki، أو CloudWatch، أو مجموعة ELK) لأي شيء يتجاوز مشروع هواية.

الأسئلة المتداولة

docker run -d \
  --log-driver json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  myapp:1.4.0

س: هل يجب علي تشغيل قاعدة البيانات الخاصة بي في حاوية قيد الإنتاج؟

ج: بالنسبة للمشاريع الصغيرة، نعم – مع وحدة تخزين محددة للاستمرارية والنسخ الاحتياطي المنتظم. بالنسبة لأي شيء بالغ الأهمية أو واسع النطاق، تعمل قاعدة البيانات المُدارة (RDS وCloud SQL) على تقليل المخاطر التشغيلية إلى حد كبير.
س: لماذا لا نكشف منفذ التطبيق مباشرة؟

ج: ستفقد إنهاء TLS، ورؤوس الأمان، ونقطة واحدة لإدارة التوجيه. يتيح لك الوكيل العكسي أيضًا تشغيل تطبيقات متعددة على مضيف واحد والتعامل مع الشهادات مركزيًا.
س: كيف يمكنني إخفاء الأسرار عن الصورة؟

ج: قم بتمريرها في وقت التشغيل عبر متغيرات البيئة، أو ملف env بأذونات مقفلة، أو مدير الأسرار. أبدا
ملف أسرار في الصورة أو بيانات اعتماد الرمز الثابت في ملف Dockerfile.COPYس: ما هي سياسة إعادة التشغيل التي يجب أن أستخدمها؟

بالنسبة لمعظم الخدمات — يقوم بإعادة تشغيل الحاوية عند الفشل وبعد إعادة تشغيل المضيف، ولكنه يحترم الإيقاف اليدوي.
A: unless-stoppedس: كيف يمكنني استرجاع عملية نشر سيئة؟

ج: نظرًا لأنك قمت بوضع علامات على الصور حسب الإصدار، أعد نشر العلامة السابقة (
مع الإصدار القديم). هذا هو السببdocker compose up -dمع الإصدار القديم). هذا هو السببlatestأمر خطير في الإنتاج – فهو يجعل عمليات التراجع غامضة.

الخلاصة

يعتمد نشر Docker في الإنتاج بأمان على عدد قليل من التخصصات:أنشئ صورة بسيطة متعددة المراحل تعمل كمستخدم غير جذر، وأدخل التكوين والأسرار في وقت التشغيل، وأضف فحوصات السلامة، وأمام التطبيق بوكيل عكسي لـ TLS، ووضع علامات على الصور حسب الإصدار لعمليات التراجع النظيفة، وقم بوضع سقف لسجلاتك. قم بالتقاط كل ذلك في ملف Compose حتى يكون الإعداد قابلاً للتكرار. احصل على هذه الأساسيات بشكل صحيح وسيتم تشغيل التطبيق الخاص بك بشكل موثوق، وسيتم تحديثه دون انقطاع حركة المرور، وسيكون من السهل التراجع عنه عندما يحدث خطأ ما.

MD Rafikul Islam

Written by

MD Rafikul Islam is a software developer and the editor of TechPulse. He writes about developer tooling, hardware, and the practical decisions that come up in day-to-day engineering work — which laptop to buy, which framework to commit to, why a build broke at 2am. He tests the tools he writes about and says plainly when something is not worth the money. Corrections and corrections requests are welcome at rony.yf25@gmail.com.

✍️ Leave a Comment

Your email address will not be published. Required fields are marked *

🌐 Read in:🇬🇧 English🇩🇪 Deutsch🇧🇷 Português🇸🇦 العربية🇮🇳 हिन्दी🇧🇩 বাংলা