بازی با داکر قسمت اول How to analyze disk usage of a Docker container

در این آموزش قراره بررسی کنیم که یک داکر کانتینر چقدر دیسک استفاده میکند ؟


در حل این سوال ما ابزار مانیتور کردن کانتینر نداریم و با استفاده از خود کامند های متداول داکر برای پاسخ به این موضوع استفاده میکنیم .

با استفاده از کامند زیر می توانید اندازه استفاده شده توسط هر کانتینر را مشاهده کنید :

docker ps -s (--size , -sDisplay total file sizes)

خروجی دستور بالا به شکل زیر میباشد :

مثال شماره ۱
مثال شماره ۱

در بخش سايز ما دو عدد 2B و virtual 183MB مشاهده می کنیم .

  • قسمت 2B لایه قابل نوشتن در هر کانتینر را نمایش میدهد (used for the writable layer of each container)
  • قمست virtual مجموع لایه قابل نوشتن و لایه غیرقابل نوشتن را نمایش میدهد. (total amount of disk-space used for the read-only image data used by the container and the writable layer)

لایه غیر قابل تغییر چیه؟
این لایه را داکر امیج پایه این کانتینر تشکیل میده که قابل تغیر نیست . مثلا اگر داکر ایمیج شما 183MB باشد یک بار این فضا در زمان اجرای اولین کانتینر استفاده میشود و این به این معناست که اگر با ده تا کانتینر nginx داشته باشیم که از یک داکر ایمیج مشابه استفاده میکند تنها یک بار 183MB استفاده میشود و برای همه کانتینر ها استفاده میشود .

مثال شماره ۱ : در عکس بالا مشاهده می کنید که ما دوتا کانتینر nginx داریم بنابرین حجم استفاده شده این دو کانتینر برابر است با 183MB + 5B + 2B

فضاهای مورد استفاده کانتینر که در این کامند شامل نمی شود:

  • volumes
  • swapping
  • checkpoints
  • disk space used for log-files generated by container




اگر اطلاعات کامل تری نسبت به کامند قبل نیاز دارید از کامند زیر استفاده کنید

docker system df --verbose


اطلاعاتی که این دستور به شما می دهد :

  • Images space usage
  • Containers space usage
  • Local Volumes space usage
  • Build cache usage

یک bash script کوچک هم براتون قرار دادم که کارتون رو ساده میکنه و میاد هر کانتینر رو مجزا بررسی می کنه و حجم کانتینر رو حجم volumes استفاده شده و ادرس اون رو هم بهتون میده که امیدوارم بدرتون بخوره

for d in `docker ps | awk '{print $1}' | tail -n +2`; do
 d_name=`docker inspect -f {{.Name}} $d`
    echo &quot=========================================================&quot
    echo &quot$d_name ($d) container size:&quot
   sudo du -d 2 -h /var/lib/docker/aufs | grep `docker inspect -f &quot{{.Id}}&quot $d`
   echo &quot$d_name ($d) volumes:&quot
   for mount in `docker inspect -f &quot{{range .Mounts}} {{.Source}}:{{.Destination}}                                                                                                                                                      
   {{end}}&quot $d`; do
       size=`echo $mount | cut -d':' -f1 | sudo xargs du -d 0 -h`
        mnt=`echo $mount | cut -d':' -f2`
        echo &quot$size mounted on $mnt&quot
    done
done

خروجی دستور زیر اینگونه است :

/safa_php (9c234f4aabaa) container size:113M
/safa_php (9c234f4aabaa) volumes:
112M    /home/safa/demo/code mounted on /var/www/html