0Pricing
Docker & DevOps Fundamentals · درس

البناء متعدد المراحل لتحقيق الكفاءة

استخدموا عمليات البناء متعددة المراحل لإنشاء صور إنتاج أصغر وأكثر أمانًا عبر فصل اعتماديات البناء عن اعتماديات وقت التشغيل

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

مقدمة إلى الإنشاءات متعددة المراحل

مرحبًا بك في موضوع تحسين Dockerfile المتقدم! سنستكشف اليوم الإنشاءات متعددة المراحل، وهي تقنية قوية لإنشاء صور Docker أصغر وأكثر كفاءة.

تؤدي الصور الأصغر إلى تنزيلات أسرع وأمان محسّن واستخدام أفضل للموارد.

البناء متعدد المراحل لتحقيق الكفاءة — رسم توضيحي 1

أهمية الصور الأصغر

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

  • سحب أسرع: تُنزّل الصور الأصغر بسرعة أكبر.
  • مساحة أقل على القرص: توفر مساحة التخزين في السجلات والمضيفين.
  • تقليل سطح الهجوم: يعني عدد المكونات الأقل عددًا أقل من الثغرات المحتملة.
  • أمان محسّن: تحتوي صورة الإنتاج لديك على العناصر الضرورية فقط.

مشكلة المرحلة الواحدة

لنفترض وجود تطبيق مُصرَّف، مثل تطبيق مكتوب بلغة Go. سيتضمن Dockerfile التقليدي ذو المرحلة الواحدة مُصرِّف Go بالكامل وتبعيات التطوير في الصورة النهائية.

يجعل ذلك الصورة النهائية أكبر بكثير من اللازم، لأن المُصرِّف ليس مطلوبًا لتشغيل الملف الثنائي المُصرَّف.

مثال على مرحلة واحدة (Go)

إليك تطبيق Go بسيطًا وDockerfile ينشئه في مرحلة واحدة. لاحظ أن بيئة الإنشاء مضمنة في الصورة النهائية.

main.go:

package main

import "fmt"

func main() {
    fmt.Println("Hello from Single-Stage Docker!")
}

Dockerfile ذو مرحلة واحدة

يستخدم Dockerfile هذا `golang:1.21-alpine` كأساس له. وبعد إنشاء التطبيق، تبقى هذه الصورة الأساسية الكبيرة، إلى جانب جميع أدوات الإنشاء الخاصة بها، في الصورة النهائية.

FROM golang:1.21-alpine
WORKDIR /app
COPY main.go .
RUN go build -o myapp main.go
EXPOSE 8080
CMD ["./myapp"]

بنية الإنشاءات متعددة المراحل

تحل الإنشاءات متعددة المراحل هذه المشكلة من خلال السماح لك بتعريف تعليمات `FROM` متعددة في Dockerfile واحد. وتبدأ كل تعليمة `FROM` مرحلة إنشاء جديدة.

  • استخدم الكلمة الأساسية AS لتسمية مرحلة (مثل FROM golang:1.21-alpine AS builder).
  • يمكنك بعد ذلك نسخ العناصر الناتجة من مرحلة سابقة باستخدام COPY --from=<stage_name>.

لا تُحفظ كصورة إلا المرحلة النهائية.

بنية متعددة المراحل

يحتوي Dockerfile متعدد المراحل النموذجي على مرحلتين على الأقل:

  • مرحلة الإنشاء: تحتوي على جميع الأدوات وكود المصدر اللازمين لتصريف التطبيق.
  • مرحلة التشغيل: صورة أساسية بسيطة لا تتضمن سوى التطبيق المُصرَّف وتبعيات تشغيله.

يتم التخلص من الصورة الوسيطة لمرحلة الإنشاء، فتتبقى صورة نهائية خفيفة.

مثال على الإنشاء متعدد المراحل (Go)

لنعِد كتابة Dockerfile لتطبيق Go باستخدام نهج متعدد المراحل. سننشئ التطبيق في المرحلة الأولى، ثم ننسخ الملف الثنائي المُصرَّف فقط إلى صورة `alpine` الأساسية الأصغر بكثير.

# Stage 1: Build the application
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY main.go .
RUN go build -o myapp main.go

# Stage 2: Create the final lightweight image
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/myapp .
EXPOSE 8080
CMD ["./myapp"]

تشغيل إنشاء متعدد المراحل

عند إنشاء Dockerfile هذا، ينفذ Docker كل مرحلة. ومع ذلك، لا تُشكّل الصورة النهائية إلا محتويات تعليمة `FROM` الأخيرة، إلى جانب الملفات المنسوخة من المراحل السابقة.

ينتج عن ذلك صورة أصغر بكثير مقارنةً بالإنشاء ذي المرحلة الواحدة، لأن مُصرِّف Go وأدوات الإنشاء لا تنتقل إلى الصورة النهائية.

فوائد الإنشاءات متعددة المراحل

تُعد الإنشاءات متعددة المراحل مفيدة جدًا في الحالات التالية:

  • اللغات المُصرَّفة: Go وJava وC++ وRust.
  • أطر الواجهة الأمامية: إنشاء تطبيقات React/Angular وتقديم الأصول الثابتة باستخدام Nginx.
  • تطبيقات Node.js: تثبيت `node_modules` في مرحلة إنشاء، ثم نسخ `package.json` و`package-lock.json` والتطبيق المنشأ فقط إلى صورة تشغيل خفيفة.

اختبر معرفتك

ما الفوائد الأساسية لاستخدام إنشاءات Docker متعددة المراحل مما يلي؟

مراجعة: كفاءة المراحل المتعددة

لقد تعلمت عن إنشاءات Docker متعددة المراحل!

  • تتضمن تعليمات FROM متعددة في Dockerfile واحد.
  • تسمّي الكلمة الأساسية AS المراحل، وتنقل COPY --from= العناصر الناتجة.
  • تتمثل الفائدة الأساسية في الحصول على صور نهائية أصغر بكثير وأكثر أمانًا وكفاءة.

تُعد هذه التقنية ضرورية لتحسين تطبيقاتك التي تعمل داخل حاويات. وسننظر بعد ذلك في الاستفادة من التخزين المؤقت للإنشاء!

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

هل درس «البناء متعدد المراحل لتحقيق الكفاءة» مجاني؟

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

ماذا ستتعلم في «البناء متعدد المراحل لتحقيق الكفاءة»؟

استخدموا عمليات البناء متعددة المراحل لإنشاء صور إنتاج أصغر وأكثر أمانًا عبر فصل اعتماديات البناء عن اعتماديات وقت التشغيل تتمرن على Docker & DevOps Fundamentals مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Docker & DevOps Fundamentals؟

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

كم من الوقت يستغرق درس «البناء متعدد المراحل لتحقيق الكفاءة»؟

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

هل يمكنني كتابة وتشغيل أكواد في درس Docker & DevOps Fundamentals هذا؟

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

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

  1. البناء متعدد المراحل لتحقيق الكفاءة
  2. الاستفادة من التخزين المؤقت للبناء
  3. أفضل ممارسات أمان Dockerfile
  4. تقليل حجم الصور باستخدام قواعد Slim وDistroless
← العودة إلى Docker & DevOps Fundamentals