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


258

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 busyboxdf -h、コンテナ内で、/data/db( 'mongo-data'データ専用コンテナ)にマウントされているファイルシステムが11.3Gを使用しdu -h /data/dbていると表示されますが、実行すると2.1Gのみを使用していると表示されます。

では、コンテナ/ボリュームのディスク使用量を分析するにはどうすればよいですか?または、私の場合、「mongo-data」コンテナのサイズをどのように確認できますか?


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

Mac OS Xには、「Dockerがディスク領域を解放しない...」という未解決の問題があります:github.com/docker/for-mac/issues/371
asmaier

回答:


461

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

docker ps --size

25
:ドッキングウィンドウpsの--sizeが完了するまでに数分かかることがありますし、ホスト上に重いIOを生成することに注意してくださいgithub.com/axibase/axibase-collector-docs/blob/master/jobs/...
セルゲイ・ロジオノフ

5
また、実行docker ps -sしても/ var / lib / docker /内に保持されているログが考慮されないことに気付きました。
デミー、2017年

17
このように2つの値を出力しますが、27.2MB (virtual 173MB)これらの違いは何ですか?
Mohammed Noureldin 2017

11
@MohammedNoureldin説明は次のとおり
09/17

4
これはDocker for Windowsでは機能しません-すべてに対して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
joseluisq

コンテナーのSIZE列はどういう意味ですか?いくつかのコンテナーがオフになっていて、このコマンドは、たとえば、SIZE = 100MBを示しています。
danilo

オフのコンテナーのSIZE = 100MB
danilo

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

注:Dockerファイルシステムに応じて「devicemapper」を変更します(「aufs」など)。


8
Centosシステムでは「du -d 2」は機能しません。代わりに「du --max-depth 2」を使用する必要がありました。
dr-jan 2015

2
Macでは表示されます/var/lib/docker/devicemapper: No such file or directory。デバイスマッパーがMacに保存されている場所はありますか?
Markus

Markus:boot2dockerを使用している場合はdu、boot2dockerホストVM内でコマンドを実行する必要があります。aufsデバイスマッパーの代わりにを使用している場合も、コマンドが失敗する可能性があります。
ジェームズ

awk / tailの代わりにコンテナのハッシュを一覧表示する「docker ps -q」はどうですか?
Andrew Wolfe

Ubuntu 14.04 / Docker 1.10.2のインストールでは、コンテナーのサイズは常に空白です。
mhvelplund 2016年

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

Mac Docker 1.12.1は、画像ファイルを/ var / lib / docker / aufsではなく〜/ Library / Containers / com.docker.docker /に置きます。.Idまたは.Nameを含まないファイル名:-(
paul_h

10

(この回答は役に立ちませんが、コメントの一部が役に立つ可能性があるため、ここに残します)

docker images「仮想サイズ」、つまりすべての下位レイヤーを含めた合計サイズが表示されます。したがって、同じベースイメージを共有するコンテナがある場合は、二重にカウントされます。

ドキュメンテーション


3
私はイメージのことではなく、コンテナ(「docker ps」を実行することで表示されるリスト)について話しているのです。
AlonL 2014年

1
コンテナーはプロセスのようなものです。ディスク容量はありません。
ブライアン

2
「docker runコマンドはまず、指定されたイメージの上に書き込み可能なコンテナーレイヤーを作成します...」(docs.docker.com/v1.1/reference/commandline/cli)そのレイヤーは、つまり、マウントされている他のボリュームです「volumes-from」などを介してコンテナに送信
AlonL

1
多分このツールは役に立ちますか? github.com/cpuguy83/docker-volumes から参照container42.com/2014/11/03/docker-indepth-volumes
ブライアン

1
おかげで、それは私のニーズを満たしていませんが、素晴らしいツールです。
AlonL 2014年

10

私はdocker stats $(docker ps --format={{.Names}}) --no-stream得るために使用します:

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

8

使用できます

docker history IMAGE_ID

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


4

docker ps --size完了するまでに数分以上かかる高額なコマンドである可能性があることに注意してください。同じことがコンテナリストAPIリクエストにも当てはまりますsize=1。あまり頻繁に実行しないことをお勧めします。

docker永続ボリュームディレクトリのオプションを含め、コンパイルした代替案を見てくださいdu -hs


私のサーバーではそうではありません-ミリ秒単位で実行されます。上記に対するYMMVの警告(テスト、セルゲイが「...かもしれない」と言っているように)
Todd Curry、

私はまた、ドッキングウィンドウPS --sizeを使用してまだ許容ですが、テストしています
andikurnia

3

Maximeのアンサーの改善:

docker ps --size

次のようなものが表示されます。

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

コンテナーを開始すると、コンテナーが開始されたイメージは読み取り専用(仮想)でマウントされます。
その上に、コンテナに加えられた変更が書き込まれる書き込み可能なレイヤーがマウントされます。

したがって、仮想イメージのサイズ(この例では183MB)は、同じイメージから開始されたコンテナーの数に関係なく、1回だけ使用されます-1つのコンテナーまたは1000を開始できます。余分なディスク領域は使用されません
ただし、「サイズ」(例では2B)はコンテナごとに一意であるため、ディスクで使用される合計容量は次のようになります。

183MB + 5B + 2B

表示されるサイズには、コンテナに使用されるすべてのディスク領域が含まれているわけではないことに注意してください。
現在含まれていないものがあります。
-ボリューム
-スワッピング
-チェックポイント
-コンテナーによって生成されたログファイルに使用されるディスク領域

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.