_< HAMYAR TOP
REFACTOR REFACTOR
# 52
1405-04-20 19:31

مقایسه بهینه سازی حجمی

خب چندتا لاگ قبلی گفتم که دارم روی سرور بالا میارم ورژن جدید رو تا ببینم حجم چقدر تغییر کرده  اول یدونه 

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

    دیگه خودتون با هر کدوم حال کردید 👾