محتويات الدورة

Docker / أدلة البناء وعمليات الإنتاج / الدرس 15

الصور متعددة المنصات والترجمة المتقاطعة

ميّز فهرس الصورة وبيان المنصة ومعمارية الباني ومعمارية التشغيل.

وقت القراءة التقريبي: 3 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • اشرح موازنات البناء الأصلي والمحاكاة والترجمة المتقاطعة.
  • راجع وصفة Go لمنصتين دون تثبيت محاكاة على المضيف.

قد يصف مرجع واحد مخرجات منصات متعددة

قد يحسم المرجع فهرس OCI يضم بيانات منصات مختلفة الطبقات والإعداد. يختار التشغيل منصة متوافقة عند الدعم. تعرّف بصمة الفهرس وبصمة البيان كائنين مختلفين. سجل النظام والمعمارية مع البصمة ولا تعتبر الوسم ملفاً تنفيذياً عاماً.

اختر استراتيجية البناء من أدلة العمل

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

افصل منصة البناء عن منصة الهدف

تعيد الوصفة مصدر Go ووحدته من الدرس السابق. تعمل مرحلة المترجم لمنصة BUILDPLATFORM وتختار TARGETOS و TARGETARCH المخرج. يقتصر المثال على linux/amd64 و linux/arm64 مع تعطيل CGO، ولا يعد بترجمة مكتبات C أو كل المتغيرات بلا إعداد. صرح بالمعاملات في المرحلة المستهلكة.

dockerfile ترجمة المثال الصريح لهدف آخر
# syntax=docker/dockerfile:1
FROM --platform=$BUILDPLATFORM golang:1.26-alpine AS build
ARG TARGETOS
ARG TARGETARCH
WORKDIR /src
COPY go.mod main.go ./
RUN CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH \
    go build -trimpath -o /out/parcel ./
FROM scratch
COPY --from=build /out/parcel /parcel
USER 65532:65532
EXPOSE 8080
ENTRYPOINT ["/parcel"]

يستقبل GOARCH قيمة arm64 لهدفه ولو عمل المترجم على amd64. تستقبل صورة التشغيل الملف الموافق فقط. يظل الوسم متغيراً وتلزم البصمة واختبارات الهدف. لا ينشئ الدرس بانياً أو محاكياً أو تسجيلاً على المضيف.

اختر وجهة مخرج مدعومة

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

bash فحص بيانات المنصة ومراجعة خطة تصدير OCI
docker buildx imagetools inspect python:3.13-slim
# Review-only build plan, not executed:
docker buildx build --platform linux/amd64,linux/arm64 \
  --tag parcel-api:review --output type=oci,dest=parcel-review.tar .

يقرأ imagetools بيانات السجل ومنصاته. يبني الأمر الثاني ويكتب أرشيفاً لو صُرح به، لكنه غير منفذ ويتطلب بانياً ومصدراً كاملين. لا نختلق بصمات أو زمناً أو محتوى أرشيف أو نجاح تشغيل.

اختبر مخرج المنصة نفسه على هدفه

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

الأخطاء الشائعة وإصلاحها

exec format error.

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

يغيب البناء متعدد المنصات عن المخزن المتوقع.

لماذا يحدث؟
صُدر إلى وجهة أخرى أولا يدعم المخزن التحميل المتوقع.
كيف تصلحه؟
راجع الباني والتصدير والمخزن.
كيف تتجنب تكراره؟
حدد الوجهة صراحة في الخطة.

تنتج الترجمة معمارية الباني بدلاً من الهدف.

لماذا يحدث؟
لم تعلن معاملات الهدف أو تصل للمترجم.
كيف تصلحه؟
صرح بالمعاملات واستهلكها في المرحلة الصحيحة.
كيف تتجنب تكراره؟
افحص المعمارية قبل نشر البيانات الوصفية.

اختبر فهمك

1. لماذا يشترك ابنان في الوسم وتختلف بصمتهما؟

اعرض الحل المشروح

قد يعرف الوسم فهرساً ببيان مستقل لكل منصة. تختلف البصمات لاختلاف الملفات والطبقات، ويصف الفهرس العلاقة. لا يجعل الاسم الواحد البايتات قابلة للتبادل.

2. هل تتطلب الوصفة تثبيت محاكاة مضيف بصلاحيات لتفسير arm64؟

اعرض الحل المشروح

لا؛ تستخدم أداة Go أصلية بهدف صريح لبرنامج قياسي دون CGO. يلزم تحقق دعم الباني عند التشغيل، لكن لا تصرح الدورة بمحاكاة المضيف أو حاوية مرتفعة الصلاحيات ولا تنفذهما.

أهم ما تعلمته

  • سجل هوية الفهرس والابن والمنصة ووجهة التصدير.
  • الترجمة المتقاطعة والمحاكاة أسلوبان بأدلة مختلفة.

المراجع الرسمية