डॉकटर कंटेनर के डिस्क उपयोग का विश्लेषण कैसे करें


258

मैं देख सकता हूं कि डॉकर ने मेरे फाइलसिस्टम का 12GB लिया है:

2.7G    /var/lib/docker/vfs/dir
2.7G    /var/lib/docker/vfs
2.8G    /var/lib/docker/devicemapper/mnt
6.3G    /var/lib/docker/devicemapper/devicemapper
9.1G    /var/lib/docker/devicemapper
12G     /var/lib/docker

लेकिन, मुझे कैसे पता चलेगा कि यह कंटेनरों के ऊपर कैसे वितरित किया जाता है?

मैंने कंटेनर को चलाने का प्रयास किया (नया v1.3 कमांड)

docker exec -it <container_name> bash

और फिर डिस्क उपयोग का विश्लेषण करने के लिए 'df -h' चलाना। यह काम करने लगता है, लेकिन ऐसे कंटेनरों के साथ नहीं जो 'वॉल्यूम-से' का इस्तेमाल करते हैं।

उदाहरण के लिए, मैं MongoDB के लिए एक डेटा-केवल कंटेनर का उपयोग करता हूं, जिसे 'मोंगो-डेटा' कहा जाता है।

जब मैं दौड़ता हूं docker run -it --volumes-from mongo-data busybox, और तब df -hकंटेनर के अंदर, यह कहता है कि फाइलसिस्टम /data/db(मेरा 'मैंगो-डेटा' डेटा-ओनली कंटेनर) पर चढ़ा हुआ है, 11.3G का उपयोग करता है, लेकिन जब मैं करता हूं, तो du -h /data/dbयह कहता है कि यह केवल 2.1G का उपयोग करता है।

तो, मैं कंटेनर / वॉल्यूम डिस्क उपयोग का विश्लेषण कैसे करूं? या, मेरे मामले में, मुझे 'मोंगो-डेटा' कंटेनर आकार कैसे पता चलेगा?


यदि आप कई-स्तरित छवियों के आकार को कम करना चाहते हैं, तो मैं जेसन वाइल्डर की docker-squashउपयोगिता की सिफारिश कर सकता हूं । इसे GitHub से प्राप्त करें: github.com/jwilder/docker-squash
mhvelplund

मैक ओएस एक्स पर एक खुला मुद्दा है "डॉकर डिस्क स्पेस को रिलीज़ नहीं करता है ...": github.com/docker/for-mac/issues/371
asmaier

जवाबों:


460

अपने कंटेनरों का फ़ाइल आकार देखने के लिए, आप निम्न के --sizeतर्क का उपयोग कर सकते हैं docker ps:

docker ps --size

25
ध्यान दें कि docker ps - size को पूरा होने में कई मिनट लग सकते हैं और मेजबान पर भारी IO का उत्पादन करेगा: github.com/axibase/axibase-collector-docs/blob/master/jobs/…
सर्गेई

5
मैंने यह भी देखा कि रनिंग docker ps -sलॉग्स को अंदर / var / lib / docker / खाते में नहीं रखता है।
demee

17
यह दो मूल्यों का उत्पादन करता है, इस तरह 27.2MB (virtual 173MB)उनके बीच क्या अंतर है?
मोहम्मद नौरेलिन

11
@MohammedNoureldin यहाँ एक स्पष्टीकरण है: github.com/docker/docker.github.io/issues/…
aleclarson

4
ध्यान दें कि यह विंडोज के लिए डॉकर पर काम नहीं करता है - यह सब कुछ के लिए 0 रिपोर्ट करता है।
माइक क्रिस्टेंसन

303

1.13.0 के बाद , डॉकर को डॉकdocker system df डिस्क उपयोग दिखाने के लिए एक नई कमांड शामिल है ।

$ docker system df
TYPE            TOTAL        ACTIVE     SIZE        RECLAIMABLE
Images          5            1          2.777 GB    2.647 GB (95%)
Containers      1            1          0 B         0B
Local Volumes   4            1          3.207 GB    2.261 (70%)

अंतरिक्ष उपयोग पर अधिक विस्तृत जानकारी दिखाने के लिए:

$ docker system df --verbose

यदि आपके पास बहुत सारे घटक हैं, तो एक उपयोगी कमांड:docker system df --verbose > docker.stats-2019-07-18.log
जूलसुलेक

कंटेनर के SIZE कॉलम का क्या अर्थ है? मेरे पास कुछ कंटेनर हैं, और यह कमांड उदाहरण के लिए SIZE = 100MB दिखाता है।
डैनिलो

कंटेनर बंद के लिए SIZE = 100MB
डैनिलो

31

इसे उत्तर के रूप में पोस्ट करना क्योंकि ऊपर मेरी टिप्पणी छिपी हुई है:

एक कंटेनर का आकार सूचीबद्ध करें:

du -d 2 -h /var/lib/docker/devicemapper | grep `docker inspect -f "{{.Id}}" <container_name>`

एक कंटेनर के संस्करणों की सूची बनाएं:

docker inspect -f "{{.Volumes}}" <container_name> | sed 's/map\[//' | sed 's/]//' | tr ' ' '\n' | sed 's/.*://' | xargs sudo du -d 1 -h

संपादित करें: सभी चल रहे कंटेनरों के आकार और संस्करणों की सूची बनाएं:

for d in `docker ps -q`; do
    d_name=`docker inspect -f {{.Name}} $d`
    echo "========================================================="
    echo "$d_name ($d) container size:"
    sudo du -d 2 -h /var/lib/docker/devicemapper | grep `docker inspect -f "{{.Id}}" $d`
    echo "$d_name ($d) volumes:"
    docker inspect -f "{{.Volumes}}" $d | sed 's/map\[//' | sed 's/]//' | tr ' ' '\n' | sed 's/.*://' | xargs sudo du -d 1 -h
done

नोट: अपने डॉकर फाइल सिस्टम (उदाहरण के लिए 'aufs') के अनुसार 'डेविक्मेपर' बदलें


8
"डु-डी 2" मेरे सेंटोस सिस्टम पर काम नहीं करता है, मुझे इसके बजाय "डु -मैक्स-डेप्थ 2" का उपयोग करना था।
dr-jan

2
मैक पर यह दिखाता है /var/lib/docker/devicemapper: No such file or directory। किसी भी विचार है जहाँ devicemapper मैक पर संग्रहीत किया जाता है?
मार्कस

मार्कस: यदि आप boot2docker का उपयोग कर रहे हैं, तो आपको duअपने boot2docker होस्ट VM के अंदर कमांड को चलाना होगा । यदि आप aufsडिवाइस मैपर के बजाय उपयोग कर रहे हैं तो कमांड विफल भी हो सकती है ।
जेम्स

awk / tail के बजाय कंटेनरों के हैश को सूचीबद्ध करने के लिए 'docker ps -q' के बारे में कैसे?
एंड्रयू वोल्फ

कंटेनर का आकार हमेशा मेरे Ubuntu 14.04 / Docker 1.10.2 इंस्टालेशन पर खाली होता है।
मवेलपंड

22

वॉल्यूम का हिस्सा अब काम नहीं करता था, अगर किसी को भी हो तो मुझे उपरोक्त स्क्रिप्ट को बस थोड़ा सा बदलना होगा:

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

माउंट प्वॉइंट्स! = वॉल्यूम
derFunk

मैक डॉकर 1.12.1 ~ / लाइब्रेरी / कंटेनरों / com.docker.docker / not / var / lib / docker / aufs में इमेज फाइल्स डालता है। जिन फिल्नामों में शामिल नहीं है। आई डी या .Name :-(
paul_h

10

(यह उत्तर उपयोगी नहीं है, लेकिन कुछ टिप्पणियों के बाद से इसे यहां छोड़ देना चाहिए)

docker images'वर्चुअल साइज़' को दिखाएगा, यानी सभी निचली परतों सहित कुल में कितना। तो कुछ डबल-काउंटिंग यदि आपके पास कंटेनर हैं जो एक ही आधार छवि साझा करते हैं।

प्रलेखन


3
मैं छवियों के बारे में बात नहीं कर रहा हूं, लेकिन कंटेनरों के बारे में ('docker ps' चलाकर दिखाई गई सूची)।
AlonL

1
कंटेनर प्रक्रियाओं की तरह हैं; उनके पास डिस्क स्थान नहीं है।
ब्रायन

2
"डॉक रन कमांड पहले निर्दिष्ट छवि के ऊपर एक लिखने योग्य कंटेनर परत बनाता है ..." ( डॉक्स.डॉकर.com/v1.1/reference/commandline/cli ) वह परत जो मेरा मतलब है, या कोई अन्य वॉल्यूम जो माउंट किए गए हैं कंटेनर से 'वॉल्यूम-से', आदि
AlonL

1
शायद यह उपकरण मदद करेगा? github.com/cpuguy83/docker-volumes कंटेनर
ब्रायन

1
धन्यवाद, यह मेरी जरूरतों को पूरा नहीं करता है लेकिन यह एक अच्छा उपकरण है।
AlonL

10

मैं docker stats $(docker ps --format={{.Names}}) --no-streamपाने के लिए उपयोग करता हूं :

  1. सि पि यु का उपयोग,
  2. कंटेनर के लिए आवंटित मेम उपयोग / कुल मेम (डॉक रन कमांड के साथ आवंटित किया जा सकता है)
  3. मेम%
  4. ब्लॉक I / O
  5. नेट I / O

8

आप उपयोग कर सकते हैं

docker history IMAGE_ID

यह देखने के लिए कि इसके विभिन्न उप-घटकों के बीच छवि का आकार कैसा है।


4

ध्यान रखें कि docker ps --sizeएक महंगी कमांड हो सकती है, जिसे पूरा करने में कुछ मिनट से अधिक समय लगता है। कंटेनर सूची एपीआई अनुरोधों के साथ भी यही बात लागू होती है size=1। यह बेहतर है कि इसे अक्सर न चलाएं।

हमारे द्वारा संकलित विकल्प पर एक नज़र डालें , जिसमें du -hsdocker persistent वॉल्यूम डायरेक्टरी का विकल्प भी शामिल है ।


मेरे सर्वर पर मामला नहीं है - मिलीसेकंड में चलता है। ऊपर YMMV चेतावनी (परीक्षण, जैसा कि सर्गेई कहते हैं "... हो सकता है ...")
टोड करी

मैं भी परीक्षण कर रहा हूं, यह अभी भी स्वीकार्य है
docker

3

मैक्सिम की आवक में सुधार:

docker ps --size

आप कुछ इस तरह देखेंगे:

+---------------+---------------+--------------------+
| CONTAINER ID  | IMAGE         | SIZE               |
+===============+===============+====================+
| 6ca0cef8db8d  | nginx         | 2B (virtual 183MB) |
| 3ab1a4d8dc5a  | nginx         | 5B (virtual 183MB) |
+---------------+---------------+--------------------+

कंटेनर को शुरू करते समय, जिस छवि को कंटेनर से शुरू किया जाता है, वह केवल पढ़ने के लिए (वर्चुअल) माउंट की जाती है ।
उसके ऊपर, एक लेखन योग्य परत चढ़ाई जाती है, जिसमें कंटेनर में किए गए किसी भी परिवर्तन को लिखा जाता है।

तो आभासी आकार (उदाहरण में 183MB) का उपयोग केवल एक बार किया जाता है, चाहे एक ही छवि से कितने कंटेनर शुरू किए गए हों - मैं 1 कंटेनर या एक हजार शुरू कर सकता हूं; कोई अतिरिक्त डिस्क स्थान उपयोग नहीं किया जाता है
"आकार" (उदाहरण में 2B) हालांकि प्रति कंटेनर अद्वितीय है, इसलिए डिस्क पर उपयोग किया जाने वाला कुल स्थान है:

183 एमबी + 5 बी + 2 बी

ध्यान रखें कि दिखाए गए आकार में कंटेनर के लिए उपयोग किए जाने वाले सभी डिस्क स्थान शामिल नहीं हैं।
वर्तमान में जो चीजें शामिल नहीं हैं, वे हैं;
- वॉल्यूम
- स्वैपिंग
- चौकियों
- डिस्क स्पेस कंटेनर द्वारा उत्पन्न लॉग-फाइल के लिए उपयोग किया जाता है

https://github.com/docker/docker.github.io/issues/1520#issuecomment-305179362

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.