私はしばらく探していましたが、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'コンテナサイズを知るのですか?
どうもありがとう、
コンテナのファイルサイズを確認するには、-s
のdocker ps
引数を使用できます。
docker ps -s
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
上記の私のコメントが隠されたので答えとしてこれを投稿する:
コンテナーのサイズをリストします。
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')。
ボリュームの部分はもう動作しませんでしたので、誰かが興味を持っているのなら私は上記のスクリプトを少し変更するだけです:
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
(この答えは役に立ちませんが、コメントの一部があるかもしれないのでここに残しておきます)
docker images
は「仮想サイズ」、つまりすべての下位層を含めた合計量を示します。同じベースイメージを共有するコンテナがある場合は、二重計算になります。
取得するにはdocker stats $(docker ps --format={{.Names}}) --no-stream
を使用します。
使用できます
docker history IMAGE_ID
さまざまなサブコンポーネント間で画像サイズがどのように分布しているかを確認します。
多層画像のサイズを縮小したい場合は、Jason Wilderのdocker-squash
ユーティリティをお勧めします。 GitHubから入手してください: https://github.com/jwilder/docker-squash
docker ps --size
は高価なコマンドで、完了までに数分以上かかることがあります。同じことがsize=1
を持つコンテナリストAPIリクエストにも当てはまります。頻繁に実行しない方がいいでしょう。
Docker永続ボリュームディレクトリのdu -hs
オプションを含めて、私たちがコンパイルした alternatives を見てください。