الهندسة والتصميم الهيكليين
دليل الخطوة خطوة لبناء صور متعددة المراحل
Table of Contents
ما هو عدد المُعدّد المُتحفّز؟
(دكر) يبني متعدد المراحل سمة مستحدثة في (دكر 1705) تسمح لك باستخدام بيانات متعددة [(FLT:0]) في ملف واحد، وكل تعليم يبدأ مرحلة جديدة، يمكن أن يكون له صورة أساسية خاصة به، ومعاليه، وقيادات، ويمكن نسخ القطع الأثرية بصورة انتقائية من مرحلة إلى أخرى، في حين أن الصورة النهائية لا تُبقي على ما هو ضروري تماماً.
والفكرة الأساسية هي فصل بيئة البناء عن البيئة التي تدوم فترات زمنية محددة، وفي بناء نموذجي لمرحلة واحدة، يقوم المطور بتركيب جميع أدوات البناء (مثل المجمّعين ومديري الطرود وأطر الاختبار) بنفس الصورة التي ستستخدم في الإنتاج، مما ينشر الصورة ويزيد من سطح الهجوم، ويحل هذا الوضع باستخدام صورة سميكة وغنية للملامح، ثم ينسخ فقط الصور الناتجة عن ذلك).
استحقاقات البناء المتعدد المراحل
وتتجاوز مزايا اعتماد أشكال البناء المتعددة المراحل الحد من الحجم البسيط، وهي تؤثر تأثيرا عميقا على الأمن، والقدرة على المحافظة، وسرعة النشر.
1 - انخفاض حجم الصورة
ومن خلال التخلص من المعالين في وقت البناء، كثيرا ما تُبنى عدة مراحل صوراً تقلص بنسبة 50 في المائة إلى 90 في المائة، مثلاً، يمكن أن يُنخفض تطبيق نودج يُبنى باستخدام الصورة الكاملة (أكثر من 300 ميغابايت) إلى أقل من 20 ميغابايت بنسخ فقط ملف شبكي أسرع إلى [سجل تخزين أقل.
2 - تحسين الأمن
كل مجموعة أو أداة مركبة في صورة حاوية هي ضعف محتمل، فبناءات متعددة المراحل تسمح لك باستبعاد المجمّعين، والخنادق، والمكتبات الإنمائية من الصورة النهائية، مما يقلل بدرجة كبيرة من سطح الهجوم، بل ويمكنك استخدام صور مثل أو في مرحلة التشغيل، التي لا تتضمن إلا الحد الأدنى الخالص لتنفيذ نظام الإبلاغ الثنائي.
3 - عملية البناء التدريجي
وتُعرَّف جميع خطوات البناء في دوكرفيل واحد، مما يجعل العملية مكتفية ذاتياً ويسهل طباعتها.() وتستفيد خطوط الأنابيب التي تستخدمها اللجنة من نقطة دخول واحدة هي: دوكرفيل، ولا حاجة إلى الاحتفاظ بنسخ منفصلة للبناء أو خطوات للتنظيف اليدوي.
4- تعزيز قابلية التكاثر والاتساق
ونظراً لأن المبنى بأكمله يقع في دوكرفيلي واحد، فإن أي مطور أو نظام يمكن أن يستنسخ الطبقات نفسها بدقة، كما أن استخدام بطاقات نسخ محددة لصور الأساس يضمن بناءاً متسقاً عبر البيئات.
بناء مركب متعدد المراحل: خطوة خطوة
ويشمل هذا التقدم إنشاء نظام إنتاج متعدد المستويات متعدد المراحل من أجل تطبيق نظام النودج والرد على المنتجات، وتنطبق المبادئ نفسها على أي لغة مجمّعة.
1- خطة دورك
قبل كتابة الرمز، رسم المراحل التي تحتاجها، بناء نموذجي متعدد المراحل له مرحلتان على الأقل:
- مرحلة البناء ] - تُركِّز جميع أدوات البناء، وتُركِّزُ المعالَفات، وتدير القيادة في مجال البناء.
- مرحلة الرونة ] - تستخدم صورة أساسية دنيا، وتنسخ فقط القطع الأثرية المبنية من مرحلة البناء، وتحدد السلوك غير المتكرر.
بالنسبة للمشاريع المعقدة، قد تضيفين مراحل متوسطة للاختبارات، أو التحليل الساكن، أو ضغط الأصول.
2 - كتابة مرحلة البناء
(د) البدء بصور أساسية تشمل مجموعة الأدوات المطلوبة، استخدام ] المراحل المسماة ] مع الإشارة إليها لاحقاً.
FROM node:14-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
النقاط الرئيسية:
- Use for deterministic, faster dependency installation.
- (أ) أن تبقي ] أوامر كطبقات منفصلة عندما يكون ممكناً لضغط الصبغة.
- تركيب أدوات (مثل نوع سكريبت، وحزمة على الشبكة) في هذه المرحلة فقط.
3- إضافة مرحلة اختبار وسيط (اختياري)
ولإنفاذ الجودة الرمزية، تضاف مرحلة تجري الاختبارات، ويمكن لهذه المرحلة أن تعيد استخدام صورة البناء أو تركيب أدوات إضافية، ولأنها ليست المرحلة النهائية، فإن فشل الاختبار لن يكون موجودا في الصورة النهائية.
FROM builder AS test
RUN npm run test
يمكنك تشغيل هذه المرحلة في خط أنابيبك مع للقبض على الفشل في وقت مبكر دون بناء الصورة النهائية بأكملها.
4 - تحديد المرحلة التي تستغرقها العملية
For a React application, the runtime image can be an Nginx server. For a backend API, it might be a distroless base image or a minimal Alpine with the Node.js runtime.
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
إذا كنت بحاجة إلى "الزوابق النويدية" في وقت التشغيل، تجنباً لنسخها من البنّاء، بدلاً من ذلك إعادة تركيب معال الإنتاج في مرحلة التشغيل:
FROM node:14-alpine AS runtime
WORKDIR /app
COPY --from=builder /app/dist ./dist
RUN npm ci --only=production
EXPOSE 3000
CMD ["node", "dist/server.js"]
5 - بناء وفحص الصورة
بناء الصورة النهائية باستخدام القيادة الموحدة:
docker build -t myapp:latest .
التحقق من حجمها، والركض والمقارنة مع بناء مرحل واحد، وإدارة الحاوية، وتأكيد الطلب يستجيب بشكل صحيح:
docker run -d -p 8080:80 myapp:latest
curl http://localhost:8080
أفضل الممارسات في مجال البناء المتعدد المراحل
- Usese specific base image tags] – avoid ] to prevent suddens. Prefer or .
- ]Optimize layer caching] — copy and before the rest of the source code so that the layer is only invalidated when dependencies change.
- Leverage buildKit] - enable BuildKit with for faster builds, inline caching, and better parallelism.
- Rereate multiple final stages for different environments] – for example, a development stage with debugging tools and a production stage with a hardened base image.
- Usese for development builds] - in development you can stop at the ] stage to get live reload and source maps, then rebuild with for production.
- Keep secrets out of images] – use Docker BuildKit’s flag if you need to pass accreditation during build; never include them in the final image.
الحالات المشتركة المتعلقة بالنهج والاستخدام
اللغات المجمعة (الهدف، روست، جيم ++)
وبالنسبة للثنائيات الثابتة، يمكن أن تستخدم مرحلة التفرغ [صورة القاعدة الفارغة] - فقط الثنائية وربما ملف تشكيلة يتم نسخه منها.
FROM golang:1.20-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -o myapp .
FROM scratch
COPY --from=builder /app/myapp /myapp
ENTRYPOINT ["/myapp"]
تطبيقات بايتون
(أ) استخدام مرحلة البناء مع لتركيب المعالين وتجميع أي تمديدات من الفئة جيم، ثم نسخ فقط الطرود المثبتة إلى مرحلة ما بعد التشغيل:
FROM python:3.11-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user -r requirements.txt
COPY . .
FROM python:3.11-slim
COPY --from=builder /root/.local /root/.local
COPY --from=builder /app /app
ENV PATH=/root/.local/bin:$PATH
CMD ["python", "app.py"]
المقدم مع خادمة في إدارة شؤون الإعلام
بناء كل من واجهة وخلفية في واحدة من الدوكرفيل، استخدام مراحل بناء منفصلة لكل واحد، ثم نسخ القطعتين الأثريتين إلى صورة واحدة على التوالي:
FROM node:14-alpine AS frontend-builder
WORKDIR /app
COPY frontend/package*.json ./
RUN npm ci
COPY frontend/ .
RUN npm run build
FROM node:14-alpine AS api-builder
WORKDIR /app
COPY api/package*.json ./
RUN npm ci
COPY api/ .
RUN npm run build
FROM node:14-alpine
WORKDIR /app
COPY --from=frontend-builder /app/build ./public
COPY --from=api-builder /app/dist ./dist
RUN npm ci --only=production
EXPOSE 3000
CMD ["node", "dist/server.js"]
:: عمليات مطاردة متعددة المراحل
- Layer caching not working] - ensure commands order dependencies before source code. Use ] to exclude unnecessary files.
- Artifact not found] – verify the paths in the statement. The builder stage must produce output in the specified location. Use to debug.
- Secret leakage - never copy entire directories that might contain or . Explicitly copy only needed files.
- Large final images despite multi-stage] — check if you are accidentally copying or the entire source. Use to see layer sizes.
خاتمة
إن بناءات دوكر المتعددة المراحل يشكل حجر الزاوية في الحاويات الحديثة، ويمكنك من أن تشحن صوراً مأمونة، مع إبقاء عملية البناء بسيطة وموثقة في مركب واحد، وبفصل الشواغل بين البناء والزمن، يمكنك أن تقلل بشكل جذري من حجم الصور، وتحسن الأمن، وتبسط خطوط الأنابيب المتحركة/الرقائق، وتطبق التقنيات المبينة هنا على أي تحسينات قائمة على الإطلاق،
For more details, refer to the official Docker multi-stage build documentation] and the ]Dockerfile best practices guide]. Real-world examples are also available in the Docker Library documentation.