REFACTOR مقایسه بهینه سازی حجمی
خب چندتا لاگ قبلی گفتم که دارم روی سرور بالا میارم ورژن جدید رو تا ببینم حجم چقدر تغییر کرده اول یدونه
docker system prune -a میزنم تا ایمیج های قبلی پاک بشن کش و... چون بلاخره الان چندتا ساختم ولی خب در کل حجمش شد 13.82 گیگ
حالا بریم مقایسه
Total reclaimed space: 13.82GB
//اینو پاک کردم
//حجم قبلی کل سرور
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 93G 55G 34G 63% /
//حجم الان
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 93G 44G 45G 50% /خب حالا کانتینر های داکرمون
قبلی :
docker ps -s
hamyartop_astro 8.19kB (virtual 769MB)
keeper-node-base 4.1kB (virtual 203MB)
wallzi_astro 8.19kB (virtual 768MB)الان
docker ps -s
wallzi_astro 24.6kB (virtual 295MB)
hamyartop_astro 24.6kB (virtual 296MB)
packages_manager 4.1kB (virtual 291MB) //کل پوشه نود مدل
node-base 4.1kB (virtual 291MB)// بخاطر نسخه slim حالا ایمیج هامون چقدر شد ؟
قبلی :
IMAGE DISK USAGE CONTENT SIZE
node-base:latest 267MB 64.1MB
hamyartop-astro:latest 938MB 168MB
wallzi-astro:latest 935MB 167MBالان :
docker images
IMAGE DISK USAGE CONTENT SIZE
node-base:latest 385MB 94.1MB
wallzi-astro:latest 391MB 95.4MB ///// 900 مگ بود قبلیش
hamyartop-astro:latest 391MB 95.4MB /// 938 مگ قبلیش بودحالا چی شد ؟؟ توی اکثر پروژه های استرو من دیگه پوشه نود مدل تکرار نمیشه پس حجم روی دیسک از 900 مگ شده 390 تا تازه این حج واقعی نیست و حجم اصلی همون 95 مگه چون اون 391 مگ لایه های ثابت رو هم محاسبه میکنه و این حجم یکبار روی دیسک حساب میشه نه صدبار
اینم همونیه که من گفتم فقط نسخه هوش مصنوعی حرفم :
من اینطوری مینوشتم:
با ساخت یک node-base مشترک، وابستگیهای Node.js و node_modules دیگر برای هر پروژه دوباره داخل Image ذخیره نمیشوند. قبلاً هر پروژهی Astro یک Image حدود ۹۰۰ مگابایتی داشت، اما حالا هر Image حدود ۳۹۰ مگابایت دیده میشود.
البته این ۳۹۰ مگابایت، حجم اختصاصی هر پروژه نیست. Docker این عدد را همراه با لایههای مشترک نمایش میدهد. حجم واقعی محتوای اختصاصی هر پروژه (Content Size) حدود ۹۵ مگابایت است و لایههای مشترک فقط یک بار روی دیسک ذخیره میشوند و بین همهی پروژهها به اشتراک گذاشته میشوند.
این جمله آخر خیلی مهمه:
Docker لایهها را Share میکند، نه اینکه برای هر Image دوباره روی دیسک کپی کند.
اگر بخوام خیلی ساده مثال بزنم، وضعیتت از این:
Project A
Node
node_modules
App
Project B
Node
node_modules
Appرسیده به:
node-base
├── Node
└── node_modules
Project A
└── App
Project B
└── Appیعنی اگر فردا ۲۰ تا پروژه Astro داشته باشی، دیگه ۲۰ بار node_modules روی دیسک ذخیره نمیشه؛ همه از همون لایهی مشترک استفاده میکنن.
Image ظاهری: حدود 938MB → 391MB
- Content Size: حدود
168MB → 95MB
دیگه خودتون با هر کدوم حال کردید 👾