بناء Docker متعدد المراحل لـ Go
مرحلة Builder مع صورة scratch/alpine نهائية
بناء Docker متعدد المراحل لـ Go درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
لماذا البناء متعدد المراحل؟
ينتج البناء أحادي المرحلة الذي يترجم تعليمات Go البرمجية صورة كبيرة تتضمن سلسلة أدوات Go كاملة. أما البناء متعدد المراحل فيترجم التعليمات البرمجية في مرحلة، ثم ينسخ الملف الثنائي فقط إلى صورة نهائية minimal.
Dockerfile أساسي متعدد المراحل
تترجم مرحلة البناء الملف الثنائي، ثم تنسخه المرحلة النهائية إلى قاعدة minimal:
FROM golang:1.22-alpine AS build
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o myapp ./cmd/server
FROM scratch
COPY --from=build /app/myapp /myapp
COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
ENTRYPOINT ["/myapp"]FROM scratch
لا تحتوي صورة FROM scratch على أي شيء، فلا shell فيها ولا مكتبات لنظام التشغيل. ويجب ربط الملف الثنائي لـ Go ربطًا ثابتًا (CGO_ENABLED=0)، وإدراج جميع الملفات المطلوبة صراحةً.
FROM distroless
توفر صور Google المسماة distroless مكتبات نظام تشغيل minimal (مثل شهادات CA وبيانات المنطقة الزمنية) من دون shell، وهي أكثر أمانًا من scratch للملفات الثنائية التي تحتاج إلى libc أو شهادات TLS.
FROM gcr.io/distroless/static-debian12
COPY --from=build /app/myapp /
ENTRYPOINT ["/myapp"]FROM alpine للحصول على shell
استخدم Alpine كقاعدة نهائية عندما تحتاج إلى shell لتصحيح الأخطاء أو إذا كان الملف الثنائي يستخدم CGO. تضيف Alpine نحو 5MB، لكنها تتضمن shell ومدير حزم.
التخزين المؤقت لطبقة go.mod
انسخ go.mod وgo.sum أولًا وشغّل go mod download قبل نسخ التعليمات البرمجية المصدرية. وتبقى هذه الطبقة مخزنة مؤقتًا حتى تتغير التبعيات، مما يسرّع عمليات إعادة البناء.
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build ...-ldflags="-s -w"
يزيل -s جدول الرموز، بينما يزيل -w معلومات تصحيح أخطاء DWARF. ويؤدي استخدامهما معًا إلى تقليل حجم الملف الثنائي بنسبة 30-50% من دون أي تأثير في وقت التشغيل.
وسيطات البناء
استخدم ARG لحقن معلومات الإصدار في وقت البناء:
ARG VERSION=dev
RUN go build -ldflags="-X main.version=${VERSION}" -o myapp .مستخدم غير root
شغّل الملف الثنائي باستخدام مستخدم غير root لأسباب أمنية. أضف مستخدمًا في صورة أساسية أو استخدم الوسم nonroot في distroless:
FROM gcr.io/distroless/static-debian12:nonrootحجم الصورة النهائية
يبلغ حجم ملف Go الثنائي النموذجي من scratch بين 5 و20 MB. وتضيف Alpine نحو 5MB، بينما يبلغ حجم صورة golang الكاملة نحو 800MB. وتقلل عمليات البناء متعددة المراحل مساحة الهجوم ووقت سحب الصورة بدرجة كبيرة.
.dockerignore
أضف ملف .dockerignore لاستبعاد الملفات من سياق البناء: vendor/ و.git/ و*.test و*.prof. ويسرّع ذلك عملية بناء Docker ويمنع تضمين الملفات الحساسة.
.git
vendor
*.test
*.prof
.envتحقق سريع
لماذا يجب ضبط CGO_ENABLED=0 عند بناء ملف Go ثنائي لصورة Docker تستخدم FROM scratch؟
مراجعة: عمليات بناء Docker متعددة المراحل
النقاط الأساسية:
- مرحلة البناء: صورة golang؛ والمرحلة النهائية: scratch أو distroless أو alpine
- استخدم CGO_ENABLED=0 للحصول على ملف ثنائي ثابت (وهو مطلوب مع scratch)
- انسخ go.mod أولًا للاستفادة من التخزين المؤقت للطبقات، واستخدم -ldflags="-s -w" لتصغير الملف الثنائي
- استخدم .dockerignore لاستبعاد .git وvendor وملفات الاختبار
الأسئلة الشائعة
هل درس «بناء Docker متعدد المراحل لـ Go» مجاني؟
نعم — نص درس «بناء Docker متعدد المراحل لـ Go» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «بناء Docker متعدد المراحل لـ Go»؟
مرحلة Builder مع صورة scratch/alpine نهائية تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «بناء Docker متعدد المراحل لـ Go»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- بناء Docker متعدد المراحل لـ Go
- إعدادات البيئة والأسرار
- Docker Compose للتطوير المحلي
- فحوصات الصحة والضبط للإنتاج