عن المشروع

Baseimage-docker هي صورة Docker أساسية مبنية على Ubuntu ومُعدّلة للاستخدام داخل الحاويات. تُنشر باسم `phusion/baseimage` على Docker Hub وGHCR، وهي مُخصّصة كنقطة انطلاق لصورك الخاصة. يرى المشروع أن Ubuntu القياسي غير مُصمّم للحاويات: إذ يفترض نظام Upstart الخاص به وجود عتاد حقيقي أو افتراضي، كما يسهل الخطأ في كثير من الحالات الحدّية للحاويات. لذلك تجمع Baseimage-docker الإصلاحات وأدوات الإدارة التي تعتبرها ضرورية. ما تتضمنه: - عملية init صحيحة، `/sbin/my_init`، تعيد حصاد العمليات الفرعية اليتيمة (لتجنّب تراكم العمليات الزومبي) وتُمرّر SIGTERM إلى العمليات الفرعية كي تُغلق بنظافة بدل تلقّي SIGKILL. - runit بديلاً عن Upstart، يُستخدم للإشراف على الخدمات وإعادة تشغيل الخدمات الخلفية المتعطلة تلقائياً. - syslog-ng، يستمع محلياً فقط ويُمرّر الرسائل إلى `docker logs`، إضافة إلى logrotate. - cron، وخادم SSH مُعطّل افتراضياً ويسمح بالمصادقة بالمفاتيح فقط. - `setuser` لتشغيل الأوامر كمستخدم آخر مع `$HOME` صحيح، و`install_clean` لعمليات تثبيت apt التي تنظّف الذاكرات المؤقتة. - إصلاحات لعدم توافق APT مع Docker. الاستخدام: اضبط `FROM phusion/baseimage:<VERSION>` و`CMD ["/sbin/my_init"]`. تُضاف الخدمات الخلفية الإضافية بإنشاء سكربتات `run` قابلة للتنفيذ تحت `/etc/service/<NAME>`؛ فيشغّلها runit ويعيد تشغيلها عند انتهائها. يمكن وضع سكربتات بدء التشغيل في `/etc/my_init.d` (تُنفّذ بترتيب معجمي) أو `/etc/rc.local`، ويجب أن تنتهي بالرمز 0. تُستورد متغيرات البيئة المُمرّرة عبر `docker run --env` أو `ENV` في Dockerfile بواسطة `my_init` من `/etc/container_environment`، ثم تُصدَّر بصيغتَي shell وJSON كي تتمكن الخدمات والسكربتات بأي لغة من قراءة القيم الأصلية. الدليل مملوك لـ root ومقيّد بمجموعة `docker_env` افتراضياً لأن القيم قد تكون حساسة. يمكن ضبط مُهَل إنهاء العمليات الفرعية عبر `KILL_PROCESS_TIMEOUT` و`KILL_ALL_PROCESSES_TIMEOUT`. يذكر ملف README أن الصورة تستهلك نحو 8.3 ميغابايت من الذاكرة وأنها أخفّ من Busybox أو Alpine وفق تأطير المشروع نفسه. كما يوضّح أن تشغيل عدة عمليات نظام في حاوية واحدة متوافق مع فلسفة Docker للخدمة المنطقية الواحدة، وأن المشروع لا يفرض أيّاً من النهجين. يأتي Ubuntu 26.04 LTS بـ Rust Coreutils بدلاً من GNU Coreutils، وهو ما يورده README كاعتبار يجب مراعاته.