it-swarm.com.de

Analysieren der Datenträgernutzung eines Docker-Containers

Ich kann sehen, dass Docker 12 GB meines Dateisystems benötigt:

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

Aber woher weiß ich, wie sich das auf die Container verteilt?

Ich habe versucht, eine Verbindung zu den Containern herzustellen, indem ich (den neuen v1.3-Befehl) ausgeführt habe.

docker exec -it <container_name> bash

führen Sie anschließend 'df -h' aus, um die Datenträgernutzung zu analysieren. Es scheint zu funktionieren, aber nicht mit Containern, die 'volume-from' verwenden.

Zum Beispiel verwende ich für MongoDB einen reinen Datencontainer namens 'mongo-data'.

Wenn ich docker run -it --volumes-from mongo-data busybox und dann df -h innerhalb des Containers ausführe, heißt es, dass das Dateisystem, das auf /data/db (meinem 'mongo-data'-Datencontainer) gemountet ist, 11.3G verwendet, aber wann Ich mache du -h /data/db, es heißt, dass es nur 2.1G verwendet.

Wie analysiere ich die Nutzung eines Containers/Volumes? Oder, in meinem Fall, wie finde ich die Containergröße 'mongo-data' heraus?

209
AlonL

Um die Dateigröße Ihrer Container anzuzeigen, können Sie das Argument --size von docker ps verwenden:

docker ps --size
394
Maxime

Nach 1.13.0 enthält Docker einen neuen Befehl docker system df, um die Verwendung der Docker-Festplatte anzuzeigen.

$ 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%)

So zeigen Sie detailliertere Informationen zur Speicherplatznutzung an:

$ docker system df --verbose
238
Hemerson Varela

Dies als Antwort posten, weil meine obigen Kommentare ausgeblendet wurden:

Geben Sie die Größe eines Containers an:

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

Listen Sie die Größen der Volumina eines Containers auf:

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

Bearbeiten: Listet die Größen und Volumina aller laufenden Container auf:

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

HINWEIS: Ändern Sie "devicemapper" entsprechend Ihrem Docker-Dateisystem (z. B. "aufs").

30
AlonL

Der Lautstärketeil hat nicht mehr funktioniert. Wenn also jemand Interesse hat, ändere ich einfach das obige Skript ein wenig:

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
22
Juanito

(Diese Antwort ist nicht nützlich, aber hier zu belassen, da einige der Kommentare sein können.)

docker images zeigt die "virtuelle Größe" an, d. H. Wie viel insgesamt, einschließlich aller unteren Ebenen. Es kann also zu Doppelzählungen kommen, wenn Sie Container haben, die dasselbe Basisimage haben.

Dokumentation

10
Bryan

Ich benutze docker stats $(docker ps --format={{.Names}}) --no-stream um:

  1. CPU auslastung,
  2. Speichernutzung/Gesamtspeicher, der dem Container zugewiesen wurde (kann mit dem Docker-Ausführungsbefehl zugewiesen werden)
  3. Mem%
  4. Block I/O
  5. Net I/O
6
Abhishek Jain

Sie können verwenden

docker history IMAGE_ID

um zu sehen, wie sich die Bildgröße auf die verschiedenen Unterkomponenten verteilt.

6
eiTan LaVi

Wenn Sie die Größe von Bildern mit vielen Ebenen reduzieren möchten, kann ich das Dienstprogramm docker-squash von Jason Wilder empfehlen. Laden Sie es von GitHub hier herunter: https://github.com/jwilder/docker-squash

4
mhvelplund

Denken Sie daran, dass docker ps --size ein teurer Befehl sein kann, der mehr als ein paar Minuten in Anspruch nimmt. Gleiches gilt für Containerlisten-API-Anfragen mit size=1. Es ist besser, es nicht zu oft auszuführen.

Schauen Sie sich alternatives an, das wir kompiliert haben, einschließlich der Option du -hs für das persistente Docker-Volume-Verzeichnis.

3
Sergei Rodionov