Docker kapsayıcısının disk kullanımı nasıl analiz edilir


260

Docker'ın dosya sistemimin 12GB'ını aldığını görebiliyorum:

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

Ancak, bunun kaplara nasıl dağıldığını nasıl bilebilirim?

(Yeni v1.3 komutu) çalıştırarak kaplara eklemeye çalıştım

docker exec -it <container_name> bash

ve daha sonra disk kullanımını analiz etmek için 'df -h' komutunu çalıştırın. Çalışıyor gibi görünüyor, ancak 'hacimler' kullanan konteynerlerle değil.

Örneğin, MongoDB için 'mongo verileri' adı verilen yalnızca veri içeren bir kap kullanıyorum.

Çalıştırdığımda docker run -it --volumes-from mongo-data busyboxve daha sonra df -hkabın içinde, /data/dbBağlanan dosya sisteminin ('mongo-veri' sadece veri kabım) 11.3G kullandığını, ancak yaptığımda du -h /data/dbyalnızca 2.1G kullandığını söylüyor.

Bir kapsayıcı / birim disk kullanımını nasıl analiz edebilirim? Ya da, benim durumumda, 'mongo verileri' kapsayıcı boyutunu nasıl bulabilirim?


Çok katmanlı görüntülerin boyutunu azaltmak istiyorsanız, Jason Wilder docker-squashyardımcı programını önerebilirim . GitHub'dan buradan alın: github.com/jwilder/docker-squash
mhvelplund

Mac OS X'te açık bir sorun var "Docker disk alanını serbest bırakmıyor
asmaier

Yanıtlar:


463

Kapsayıcılarınızın dosya boyutunu görmek için aşağıdakilerin --sizebağımsız değişkenini kullanabilirsiniz docker ps:

docker ps --size

25
Docker ps --size'nin tamamlanması birkaç dakika sürebilir ve ana bilgisayarda ağır G /
Sergei Rodionov

5
Ayrıca çalışan docker ps -s/ var / lib / docker / içinde tutulan günlükleri dikkate almaz fark ettim .
17'de

17
İki değer üretir, bu 27.2MB (virtual 173MB)şekilde aralarındaki fark nedir?
Mohammed Noureldin

11
@MohammedNoureldin İşte bir açıklama: github.com/docker/docker.github.io/issues/…
aleclarson

4
Bunun Windows için Docker'da çalışmadığını unutmayın - her şey için 0 bildirir.
Mike Christensen

306

1.13.0'dan sonra Docker , docker system dfdocker disk kullanımını göstermek için yeni bir komut içerir .

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

Alan kullanımı hakkında daha ayrıntılı bilgi göstermek için:

$ docker system df --verbose

Çok sayıda bileşeniniz varsa kullanışlı bir komut:docker system df --verbose > docker.stats-2019-07-18.log
joseluisq

kabın SIZE sütunu ne anlama geliyor? Bazı kapsayıcılar kapalı ve bu komut SIZE = 100MB örneğin gösterir.
danilo

SIZE = kapsayıcı için 100MB
danilo

31

Yukarıdaki yorumlarım gizlendiği için bunu yanıt olarak gönderiyoruz:

Bir kabın boyutunu listeleyin:

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

Bir kabın hacimlerinin boyutlarını listeleyin:

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

Düzenle: Çalışan tüm konteynerlerin boyutlarını ve hacimlerini listeleyin:

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

NOT: 'Devicemapper'ı Docker dosya sisteminize göre değiştirin (örn.' Aufs ')


8
"du -d 2", Centos sistemimde çalışmıyor, onun yerine "du --max-derinlik 2" kullanmak zorunda kaldım.
dr-jan

2
Mac'te gösterir /var/lib/docker/devicemapper: No such file or directory. Cihazın mac'ta nerede saklandığı hakkında bir fikriniz var mı?
Markus

Markus: boot2docker kullanıyorsanız, dukomutu boot2docker ana makine VM'niz içinde çalıştırmanız gerekir. Komut, aufsaygıt eşleyici yerine kullanıyorsanız da başarısız olabilir .
James

awk / tail yerine kapların karmalarını listelemek için 'docker ps -q' ne dersiniz?
Andrew Wolfe

Ubuntu 14.04 / Docker 1.10.2 kurulumumda kap boyutu her zaman boş.
mhvelplund

22

Birim kısmı artık işe yaramadı, bu yüzden kimse insterested eğer ben sadece yukarıdaki komut biraz değiştirmek:

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

Bağlama Noktaları! = Hacimler
derFunk

Mac Docker 1.12.1, görüntü dosyalarını ~ / Library / Containers / com.docker.docker / not / var / lib / docker / aufs dizinine yerleştirir. Dosya adlarını .Id veya .Name içermeyen dosya adları :-(
paul_h

10

(bu cevap yararlı değildir, ancak bazı yorumlar olabileceğinden burada bırakmak)

docker images"sanal boyut" u gösterecektir, yani tüm alt katmanlar dahil toplamda ne kadar olduğunu gösterecektir. Aynı temel görüntüyü paylaşan kaplarınız varsa çift sayma.

belgeleme


3
Görüntüler hakkında değil, kaplar hakkında konuşuyorum ('docker ps' ile gösterilen liste).
AlonL

1
Kaplar süreçler gibidir; disk alanı yok.
Bryan

2
"Docker run komutu önce belirtilen görüntü üzerinde yazılabilir bir kap katmanı oluşturur ..." ( docs.docker.com/v1.1/reference/commandline/cli ) Bu katman demek istediğim veya bağlı olan diğer birimler 'volumes-from' vb. ile konteynere gönderin
AlonL


1
Teşekkürler, ihtiyaçlarımı karşılamıyor ama güzel bir araç.
AlonL

9

Ben docker stats $(docker ps --format={{.Names}}) --no-streamalmak için kullanın :

  1. CPU kullanımı,
  2. Mem kullanımı / Konteynere ayrılan toplam mem (docker run komutu ile tahsis edilebilir)
  3. Mem%
  4. Blok G / Ç
  5. Net G / Ç

8

Kullanabilirsiniz

docker history IMAGE_ID

görüntü boyutunun çeşitli alt bileşenleri arasında nasıl dağıtıldığını görmek için.


4

docker ps --sizeTamamlanması birkaç dakikadan fazla süren pahalı bir komut olabileceğini unutmayın . Aynısı, ile konteyner listesi API istekleri için de geçerlidir size=1. Çok sık çalıştırmamak daha iyidir.

Docker kalıcı birim dizini seçeneği de dahil olmak üzere derlediğimiz alternatiflere bir göz atın du -hs.


Sunucumda durum böyle değil - milisaniye içinde çalışır. Yukarıdaki YMMV uyarısı (Sergei "... olabilir ..." dediği gibi test)
Todd Curry

Ben de liman işçisi ps --size kullanarak yine de kabul edilebilir, test ediyorum
andikurnia

3

Maxime'in anwser'ını iyileştirmek:

docker ps --size

Bunun gibi bir şey göreceksiniz:

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

Bir kapsayıcı başlatılırken, kabın başlatıldığı görüntü salt okunur (sanal) olarak monte edilir .
Bunun üzerine, kapta yapılan değişikliklerin yazıldığı yazılabilir bir katman monte edilir.

Bu yüzden Sanal boyut (örnekte 183MB) aynı görüntüden kaç kapsayıcı başlatıldığına bakılmaksızın sadece bir kez kullanılır - 1 kap veya bin başlatabilirim; fazladan disk alanı kullanılmaz .
"Boyut" (örnekte 2B) kap başına benzersizdir, bu nedenle diskte kullanılan toplam alan:

183 MB + 5B + 2B

Gösterilen boyutun bir kap için kullanılan tüm disk alanını içermediğini unutmayın.
Şu anda dahil edilmeyen şeyler;
- birimler
- takas
- denetim noktaları
- kapsayıcı tarafından oluşturulan günlük dosyaları için kullanılan disk alanı

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.