يحتوي الخادم على 15 جيجابايت من مساحة القرص، وحتى مع عدم تشغيل التثبيت في بيئة إنتاجية (أقل من 10 مستخدمين، لا توجد مرفقات، بعض المنشورات تم إنشاؤها وحذفها)، يبدو أن حجم التثبيت كبير نسبياً.
# du -csh /var/lib/docker/overlay2
580M 51d029d96e73b67e449f0b0570be47b6292da46c8c69b9f0dc6df35db85*****
2.3G ae38f397c79178185e26b87a9e2c6c890b0db9d3456de6d34ae3c3b96db*****
76M d1b8d94d2ecfa140794c61e2a81ad4a09eba1646d764018cf5afd433b51*****
4.5G ef92e2dc7a656c20eccbbdd40e660c76631ef48b6989f9ded3889a929eb*****
40K ef92e2dc7a656c20eccbbdd40e660c76631ef48b6989f9ded3889a929eb*****-init
24K l
7.4G total
# du -shc /var/lib/docker/overlay2/*/diff
580M /var/lib/docker/overlay2/51d029d96e73b67e449f0b0570be47b6292da46c8c69b9f0dc6df35db85*****/diff
2.3G /var/lib/docker/overlay2/ae38f397c79178185e26b87a9e2c6c890b0db9d3456de6d34ae3c3b96db*****/diff
76M /var/lib/docker/overlay2/d1b8d94d2ecfa140794c61e2a81ad4a09eba1646d764018cf5afd433b51*****/diff
996M /var/lib/docker/overlay2/ef92e2dc7a656c20eccbbdd40e660c76631ef48b6989f9ded3889a929eb*****/diff
20K /var/lib/docker/overlay2/ef92e2dc7a656c20eccbbdd40e660c76631ef48b6989f9ded3889a929eb*****-init/diff
3.9G total
# docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
local_discourse/app latest b29b7073fea2 2 months ago 2.69GB
<none> <none> 30e4746e631e 3 months ago 2.23GB
docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 1 1 2.689GB 0B (0%)
Containers 1 1 950.4MB 0B (0%)
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
جربت هذا ولكن لم يساعد
# /var/discourse/launcher cleanup
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
أنا قلق من أنه بمجرد الانتقال إلى بيئة الإنتاج، سيزداد استهلاك التثبيت للمساحة بشكل متزايد وقد يؤدي إلى تعطل النظام.
هل يمكنك إرشادي حول الحجم الطبيعي لصورة docker والتثبيت، وما الذي يمكنني فعله لتحرير بعض المساحة؟
شكراً لك
سأكون مهتمًا بمعرفة معنى صورة docker <none>. (تعديل: يبدو أنه إذا ظهرت صورة <none> في docker images -a فهذا ليس بالأمر المهم، ولكن إذا ظهرت في docker images فإنها تشكل إهدارًا للمساحة. كنت أأمل أن يساعد تنظيف برنامج التشغيل (launcher cleanup)، لكنه لم يساعدك…)
لاحظ أن استخدام نظام الملفات overlay كما يظهر في أمر df يتطابق مع استخدام نظام الملفات الجذري: فهناك الكثير من البيانات تؤدي دورًا مزدوجًا، وتحتاج إلى الحذر من احتسابها مرتين. في حالتك، المساحة المتاحة هي 3.2 جيجابايت، وهذا هو الرقم الذي يجب القلق بشأنه. قد يكون هناك بعض أعمال التنظيف التي يجب القيام بها.
سأعرض إحصائياتي المماثلة أدناه. لدي منتاران، كل منهما على خادم مختلف. يحتوي أحد الخوادم على 20 جيجابايت والآخر على 25 جيجابايت من المساحة. أعتقد أن 15 جيجابايت قد تكون ضيقة جدًا، خاصة عندما تتطلب عملية التحديث وجود 5 جيجابايت من المساحة الحرة قبل البدء.
# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 25G 19G 5.1G 79% /
# docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
local_discourse/app latest 8da0107aba03 2 months ago 2.7GB
discourse/base 2.0.20210415-1332 30e4746e631e 3 months ago 2.23GB
<none> <none> 1e6bf44c2762 5 months ago 2.46GB
discourse/base 2.0.20201221-2020 c0704d4ce2b4 7 months ago 2.11GB
# du -shc /var/lib/docker/overlay2/*/diff
2.2G /var/lib/docker/overlay2/05fa0e4df2...
76M /var/lib/docker/overlay2/58b000b1f5c...
20K /var/lib/docker/overlay2/6271023fc7a...
1.1G /var/lib/docker/overlay2/6271023fc7...
2.3G /var/lib/docker/overlay2/91d6adf7ad...
481M /var/lib/docker/overlay2/b6b06a7cee...
592M /var/lib/docker/overlay2/d81e44d563...
76M /var/lib/docker/overlay2/fb98649680b...
6.8G total
# du -shc /var/lib/docker/overlay2/*
2.2G /var/lib/docker/overlay2/05fa0e4df2...
76M /var/lib/docker/overlay2/58b000b1f5c...
4.7G /var/lib/docker/overlay2/6271023fc7...
40K /var/lib/docker/overlay2/6271023fc7a...
2.3G /var/lib/docker/overlay2/91d6adf7ad...
481M /var/lib/docker/overlay2/b6b06a7cee...
592M /var/lib/docker/overlay2/d81e44d563...
76M /var/lib/docker/overlay2/fb98649680b...
36K /var/lib/docker/overlay2/l
11G total
# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 4 1 5.155GB 4.689GB (90%)
Containers 1 1 1.059GB 0B (0%)
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
تحديث: بعد أخذ نسخة احتياطية وتشغيل تحديث، قمت أيضًا بتنظيف.
أنا متأكد إلى حد كبير أن أدوات إدارة صور Docker مفضلة عن التصرف المباشر في /var/lib/docker/overlay2. والتنظيف التلقائي مفضل على تلك الأدوات. (ولكن كما ذُكر في المنشورات المرتبطة، هناك طرق أخرى يتم فيها استهلاك مساحة القرص: النسخ الاحتياطية، ملفات التبديل، ملفات السجل، التحميلات، الاستيرادات، ملفات السجل، وهكذا)
إليك ما رأيته، كحالة “بعد” مقارنة بـ “قبل” المنشورة أعلاه - لاحظ أن نقطة البداية أقل في مساحة القرص المتاحة، ربما بسبب النسخة الاحتياطية:
# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 25G 19G 5.1G 79% /
# docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
local_discourse/app latest 8da0107aba03 2 months ago 2.7GB
discourse/base 2.0.20210415-1332 30e4746e631e 3 months ago 2.23GB
<none> <none> 1e6bf44c2762 5 months ago 2.46GB
discourse/base 2.0.20201221-2020 c0704d4ce2b4 7 months ago 2.11GB
# /var/discourse/launcher cleanup
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: discourse/base:2.0.20201221-2020
untagged: discourse/base@sha256:e18*
deleted: sha256:1e6*
deleted: sha256:a22*
deleted: sha256:c07*
deleted: sha256:9b7*
deleted: sha256:87c*
untagged: discourse/base:2.0.20210415-1332
untagged: discourse/base@sha256:b3b*
Total reclaimed space: 2.456GB
# docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
local_discourse/app latest 8da0107aba03 2 months ago 2.7GB
<none> <none> 30e4746e631e 3 months ago 2.23GB
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
local_discourse/app latest 8da0107aba03 2 months ago 2.7GB
# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 25G 17G 7.8G 68% /
# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 1 1 2.699GB 0B (0%)
Containers 1 1 1.13GB 0B (0%)
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 25G 17G 7.8G 68% /
# du -shc /var/lib/docker/overlay2/*
4.9G /var/lib/docker/overlay2/627*
40K /var/lib/docker/overlay2/627*-init
2.3G /var/lib/docker/overlay2/91d*
592M /var/lib/docker/overlay2/d81*
76M /var/lib/docker/overlay2/fb9*
24K /var/lib/docker/overlay2/l
7.8G total
# du -shc /var/lib/docker/overlay2/*/diff
20K /var/lib/docker/overlay2/627*-init/diff
1.2G /var/lib/docker/overlay2/627*/diff
2.3G /var/lib/docker/overlay2/91d*/diff
592M /var/lib/docker/overlay2/d81*/diff
76M /var/lib/docker/overlay2/fb9*/diff
4.2G total
# journalctl --disk-usage
تستحوذ السجلات المؤرشفة والنشطة على 1.5 جيجابايت في نظام الملفات.
ثم نفذت هذا الأمر لتحرير المساحة: # journalctl --vacuum-time=10d
الآن أصبح لدي 1 جيجابايت إضافي.
سؤالي الحقيقي كان حول الحجم الفعلي المطلوب من discourse.
في الواقع، نسخي الاحتياطية، لأنها ليست في بيئة الإنتاج، يبلغ حجمها حوالي 10 ميجابايت، وبمجموع 3 نسخ احتياطية (30 ميجابايت).
أفهم الحاجة إلى المساحة أثناء التحديث، ولكن أثناء التشغيل أتوقع حفظ النسخة الحالية والحصول على فرصة لحذف النسخ القديمة.
هل نحتاج إلى جميع الفروقات في الطبقة العلوية (overlay) أم يمكننا دمج كل المحتوى بطريقة ما لاستعادة المساحة؟ كما أنني لا أرى أي وحدة تخزين مُرفقة، لذا أتخيل أن discourse يحفظ جميع البيانات هناك.
في الخيط المرتبط، نرى حالة حيث لم يُساعد الأمر ./launcher cleanup، بينما ساعد الأمر docker system prune --all --volumes --force. لا أعرف السبب وراء ذلك.
لا أفهم طريقة تراص صور Docker، أو سبب كبر حجم مجلدات diff، أو سبب كون استخدام القرص من Docker أكبر بكثير من ما يُبلغ عنه Docker من أحجام.
ومع ذلك، يجدر بالذكر أن تقليل استخدام القرص يتطلب جهدًا: فإما Docker أو Discourse لا يعتبران تقليل استخدام القرص أولوية. كلا المشروعين يفضلان التركيز على تحسين المنتج والحفاظ على البساطة.
أنا أعمل بنجاح على مثinstance بسعة 20 جيجابايت. وبالنظر إلى الحاجة إلى الاحتفاظ بـ 5 جيجابايت فارغة للترقيات، فإن الحد الفعلي للمساحة المستخدمة هو 15 جيجابايت. في حالتك، مع مثinstance بسعة 15 جيجابايت، ستحاول البقاء ضمن 10 جيجابايت مستخدمة. يمكننا توقع أن يكون ذلك أكثر صعوبة، وربما حتى مستحيلاً. بالتأكيد هناك حد أدنى.
أنا متأكد تقريبًا من أنني رأيت خيطًا نصحت فيه بإزالة Docker وDiscourse بالكامل، مع ترك إعدادات الموقع وقاعدة البيانات فقط، ثم إعادة التثبيت. لا أنصح بذلك إلا بعد تفكير عميق، وبالتأكيد لا أنصح به دون نسخة احتياطية! للأسف، لا أستطيع العثور على ذلك الخيط حاليًا.
أمر “docker volume ls” الخاص بي فارغ، ويعتمد ذلك على ما إذا كان الأشخاص قد قاموا بربط وحدات التخزين.
سيكون من الرائع وجود مواصفات رسمية أكثر أو حجم متوقع للتثبيت، ربما تكون موجودة في مكان ما لكنني لم أجدها.
أفهم أنه في عالم اليوم لا يُعد 20 جيجابايت أمرًا كبيرًا، ولكن عندما يتعلق الأمر بالنسخ الاحتياطي، والنقل عن بُعد، والتكرار، وما إلى ذلك، فإن ذلك يُعد إهدارًا للمساحة يمكن تجنبه ربما إذا عرفنا كيفية توفير هذه المساحة من البداية.
التثبيت بدون Docker ممكن، ولكن بقدر ما أعرف، فهو غير مدعوم في حال حدوث أي مشكلة.
أما 25 جيجابايت فهي ما يحصل عليه المستخدم العادي ذو الميزانية المحدودة الذي يستخدم Digital Ocean. وهذا هو الجمهور المستهدف حقًا.
مجموعة الأشخاص الذين يمتلكون الخبرة لإدارة مساحة قرص أصغر من 25 جيجابايت، ولا يملكون الميزانية اللازمة لـ 25 جيجابايت من مساحة القرص، هي مجموعة صغيرة جدًا. أعتقد أنك الشخص الأول الذي قدم طلبًا من هذا النوع خلال السنوات الخمس الماضية.
يمكنك توفير بعض المساحة من خلال إدارة نسخ احتياطية خاصة بك وإجراء نسخ احتياطي عن بُعد. يتطلب كل نسخة احتياطية واحدة ثلاثة نسخ: النسخة القديمة، والنسخة الجديدة غير المضغوطة، والنسخة الجديدة المضغوطة. هذا هو أكبر توفير للمساحة الذي يمكنني التفكير فيه، لكنني لا ادّعي امتلاك معرفة خاصة كثيرة بـ Docker.
يمكنك أيضًا بناء الصورة الجديدة عن بُعد على خادم مؤقت ثم دفعها إلى مستودع. في هذه الحالة، لن تحتاج إلى مساحة Docker إضافية محليًا. هذا ربما يكون أفضل خيار لك، لكن لا توجد طريقة موثقة جيدًا للقيام بذلك، وهو غير مدعوم إلى حد كبير (لكنه أكثر دعمًا من تثبيت غير Docker). إذا قمت بتوظيفي للقيام بذلك، فستكلفك سنوات من تكلفة 10 جيجابايت من مساحة القرص. لقد فكرت في خدمة أقوم فيها ببناء هذه الصور (بشكل أساسي نسخة محسّنة من Bitnami) لكنني لم أتفرغ لذلك لأنني لا أعتقد أن هناك سوقًا يبرر وقت التطوير المطلوب.
أود أن أعرف تكلفة خادمك بسعة 15 جيجابايت ومن أي مورد اشتريته. خادمي بسعة 25 جيجابايت يكلفني 6 دولارات شهريًا من Digital Ocean، وخادمي بسعة 20 جيجابايت يكلف 3 دولارات من Hetzner.
إذا لم تتوقع الحاجة إلى تصحيح أي سلوك من سجلات النظام، فيمكنك أن تكون قاسيًا جدًا في تقليم السجلات.
أستخدم خوادم VPS مختلفة، لدي بعض الآلات الافتراضية على Contabo، والبعض الآخر على Azure. بالنسبة لي، السؤال هو معرفة ما إذا كان ما أديره يُحافظ عليه ويُهيأ كما هو متوقع (الحجم، التنظيف، إلخ).
شكرًا لك على النصيحة بشأن تغيير سياسة journald، قمت بذلك (لقد قمت بالتنظيف مسبقًا لذا فإن التوفير بسيط، لكن على الأقل لم يعد عليّ التحقق منه).
استخدامك للقرص يتقارب مع استخدامي إلى حد كبير
# du -hxs /var/discourse/ /var/lib/docker/
181M /var/discourse/
4.0G /var/lib/docker/
كنت سأقوم بحذف Docker وإعادة بنائه، لكن نظرًا لأن حجمًا ثابتًا غير موصول بـ Docker، فأنا قلق من فقدان بيانات المنتدى أثناء مرحلة الحذف. سأنتظر حتى تظهر إجراءات رسمية أكثر تفصيلاً لذلك.