web-dev-qa-db-ja.com

Docker - コンテナのディスク使用量を分析する方法

私はしばらく探していましたが、Dockerコンテナ/ボリュームのディスク使用量を分析する方法を見つけることができませんでした。

Dockerが私のファイルシステムの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」を実行してディスク使用量を分析します。それはうまくいっているように見えますが、 'volumes-from'を使うコンテナではうまくいきません。

たとえば、MongoDBには 'mongo-data'というデータ専用コンテナを使用します。

docker run -it --volumes-from mongo-data busyboxを実行してからコンテナ内でdf -hを実行すると、/data/db(私の 'mongo-data'データ専用コンテナ)にマウントされているファイルシステムは11.3Gを使用しますが、du -h /data/dbを実行すると2.1Gのみを使用します。

それでは、どのように私はコンテナ/ボリュームディスク使用量を分析するのですか?それとも、私の場合、どのように 'mongo-data'コンテナサイズを知るのですか?

どうもありがとう、

190
AlonL

コンテナのファイルサイズを確認するには、-sdocker ps引数を使用できます。

docker ps -s
350
Maxime

1.13.0以降、Docker にはdockerディスクの使用状況を表示するための新しいコマンド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 -v
211
Hemerson Varela

上記の私のコメントが隠されたので答えとしてこれを投稿する:

コンテナーのサイズをリストします。

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

注:Dockerファイルシステムに合わせて 'devicemapper'を変更してください(例: 'aufs')。

30
AlonL

ボリュームの部分はもう動作しませんでしたので、誰かが興味を持っているのなら私は上記のスクリプトを少し変更するだけです:

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

(この答えは役に立ちませんが、コメントの一部があるかもしれないのでここに残しておきます)

docker imagesは「仮想サイズ」、つまりすべての下位層を含めた合計量を示します。同じベースイメージを共有するコンテナがある場合は、二重計算になります。

ドキュメンテーション

10
Bryan

取得するにはdocker stats $(docker ps --format={{.Names}}) --no-streamを使用します。

  1. メモリー使用量/コンテナーに割り当てられた合計メモリー(docker runコマンドで割り当てることができます)
  2. Mem%
  3. ブロックI/O
  4. ネットI/O
6
Abhishek Jain

使用できます

docker history IMAGE_ID

さまざまなサブコンポーネント間で画像サイズがどのように分布しているかを確認します。

6
eiTan LaVi

多層画像のサイズを縮小したい場合は、Jason Wilderのdocker-squashユーティリティをお勧めします。 GitHubから入手してください: https://github.com/jwilder/docker-squash

4
mhvelplund

docker ps --sizeは高価なコマンドで、完了までに数分以上かかることがあります。同じことがsize=1を持つコンテナリストAPIリクエストにも当てはまります。頻繁に実行しない方がいいでしょう。

Docker永続ボリュームディレクトリのdu -hsオプションを含めて、私たちがコンパイルした alternatives を見てください。

3
Sergei Rodionov