نعم، يمكنك استخدام صورة أساسية مختلفة لتطبيق Go الخاص بك في Docker. فيما يلي بعض الخيارات والاعتبارات:
1. صورة الجولانج الرسمية:
- تعتبر صورة "golang" الرسمية نقطة انطلاق جيدة ويوصي بها فريق Docker.
- يوفر سلسلة أدوات Go الضرورية والتبعيات لإنشاء تطبيق Go وتشغيله.
- مثال: `من جولانج:1.19-جبال الألب`
2. صورة من جبال الألب:
- صورة `golang:alpine` هي نسخة أصغر من صورة `golang` الرسمية، استنادًا إلى توزيعة Alpine Linux.
- يؤدي إلى الحصول على صور Docker نهائية أصغر حجمًا، وهو أمر مفيد للنشر.
- ومع ذلك، قد تواجه الصورة المبنية على جبال الألب مشاكل في التوافق مع بعض المكتبات التي تعتمد على glibc.
- مثال: `من جولانج:1.19-جبال الألب`
3. صورة خالية من التوزيع:
- الصور غير الموزعة هي صور Docker صغيرة لا تعتمد على الجذر وتحتوي فقط على تطبيقك وتبعيات وقت التشغيل الخاصة به.
- تم تصميمها لتكون صغيرة وآمنة قدر الإمكان، دون تضمين مدير الحزم أو الصدفة أو أي مكونات أخرى غير ضرورية.
- مثال: `FROM gcr.io/distroless/base-debian11`
4. صورة سكراتش:
- صورة "الخدش" هي صورة أساسية فارغة، مما يعني أنها لا تحتوي على نظام تشغيل أو مكتبات أو أي تبعيات أخرى.
- يؤدي هذا إلى أصغر صورة ممكنة لـ Docker، ولكنه يتطلب تجميع التطبيق الخاص بك بشكل ثابت ويتضمن جميع التبعيات الضرورية.
- مثال: `من الصفر`
عند اختيار الصورة الأساسية، ضع في اعتبارك العوامل التالية:
- حجم الصورة: يُفضل عمومًا الصور الأصغر حجمًا لنشرها بشكل أسرع وتقليل متطلبات التخزين.
- التوافق: تأكد من أن تطبيقك وتبعياته متوافقة مع الصورة الأساسية التي تختارها.
- الأمان: تعد الصور غير القابلة للتوزيع والخدش أكثر أمانًا لأنها تحتوي على سطح هجوم أصغر.
- تصحيح الأخطاء: قد تكون الصور التي تحتوي على نظام تشغيل كامل (على سبيل المثال، `golang`) أسهل في تصحيح الأخطاء، حيث يمكنك الوصول إلى غلاف الحاوية وأدواتها المساعدة.
يعتمد اختيار الصورة الأساسية في النهاية على متطلباتك المحددة، مثل حجم الصورة والأمان ومدى تعقيد تطبيق Go الخاص بك. من الشائع استخدام صورة "golang" الرسمية للتطوير والاختبار، ثم التبديل إلى صورة أصغر حجمًا مثل "distroless" أو "scratch" لعمليات نشر الإنتاج.
اقتباسات:[1] https://stackoverflow.com/questions/47028597/choosing-golang-docker-base-image
[2] https://hub.docker.com/_/golang
[3] https://snyk.io/blog/containerizing-go-applications-with-docker/
[4] https://docs.docker.com/language/golang/build-images/
[5] https://dev.to/chseki/build-a-super-minimalistic-docker-image-to-run-your-golang-app-33j0