LinuxシステムでDockerがどのくらいのスペースを消費するのか疑問に思っていますか?
主に、すべてのDockerイメージ、コンテナー、およびその他の関連エンティティは、/var/lib/docker
にあります。 。このディレクトリのサイズを確認して、Dockerが使用する合計ディスク容量を取得できます:
[email protected]:~$ sudo du -sh /var/lib/docker
4.9G /var/lib/docker
ただし、これはあまり説明的ではないため、このディレクトリをさらに進んで、どのコンポーネントがどのスペースを使用しているかを確認する必要があります。
ありがたいことに、Dockerはこの情報をより便利な方法で取得するためのツールを提供しています。
Dockerディスクスペース使用量の確認[DockerWay]
イメージ、コンテナ、ローカルボリューム、またはビルドキャッシュによって使用されているスペースの量を知るための最も基本的な「Docker」の方法は次のとおりです。
docker system df
このコマンドを実行するとき(sudo
を使用) 必要に応じて)、Dockerコンポーネントごとにグループ化されたすべてのディスク使用量情報を取得します。
[email protected]:~$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 4 4 1.065GB 0B (0%)
Containers 4 4 5.705kB 0B (0%)
Local Volumes 7 7 1.108GB 0B (0%)
Build Cache 0 0 0B 0B
これは、/ var / lib/dockerの合計サイズを確認するよりも間違いなく優れています。イメージ、コンテナ、およびボリュームによって消費されているスペースを確認できます。
ただし、これでも、どの画像またはボリュームがより多くのスペースを占めるかを明確に把握できます。
実際、そうです。 docker system df
コマンドには詳細オプション-v
があります これらすべての詳細がわかります。
docker system df -v
詳細な出力は次のとおりです。
[email protected]:~$ docker system df -v
Images space usage:
REPOSITORY TAG IMAGE ID CREATED SIZE SHARED SIZE UNIQUE SIZE CONTAINERS
ghost 4.32.0 b40265427368 8 weeks ago 468.8MB 0B 468.8MB 1
jrcs/letsencrypt-nginx-proxy-companion latest 037cc4751b5a 13 months ago 24.35MB 0B 24.35MB 1
jwilder/nginx-proxy latest 509ff2fb81dd 15 months ago 165MB 0B 165MB 1
mariadb 10.5.3 f5d2bcaf057b 20 months ago 407MB 0B 407MB 1
Containers space usage:
CONTAINER ID IMAGE COMMAND LOCAL VOLUMES SIZE CREATED STATUS NAMES
899cc90e85d9 ghost:4.32.0 "docker-entrypoint.s…" 1 0B 8 weeks ago Up 8 weeks ghost_ghost_6
17b58fdafbce jrcs/letsencrypt-nginx-proxy-companion "/bin/bash /app/entr…" 4 571B 3 months ago Up 2 months letsencrypt-proxy-companion
58f99f46ee03 jwilder/nginx-proxy "/app/docker-entrypo…" 5 5.13kB 3 months ago Up 2 months jwilder-nginx-proxy
fb907286b60e mariadb:10.5.3 "docker-entrypoint.s…" 1 2B 3 months ago Up 2 months ghost_db_1
Local Volumes space usage:
VOLUME NAME LINKS SIZE
ghostdb 1 434.7MB
jwilder-nginx-with-ssl_acme 2 36.09kB
jwilder-nginx-with-ssl_certs 2 25.12kB
jwilder-nginx-with-ssl_dhparam 1 1.525kB
jwilder-nginx-with-ssl_html 2 1.106kB
jwilder-nginx-with-ssl_vhost 2 556B
ghost 1 674MB
Build cache usage: 0B
CACHE ID CACHE TYPE SIZE CREATED LAST USED USAGE SHARED
いいですね他の方法もあります。
Dockerイメージとそのサイズを確認したいだけの場合は、次のコマンドを使用することもできます:
docker image ls
システム上のすべてのDockerイメージと、サイズを含むいくつかの詳細が一覧表示されます。
[email protected]:~$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest beae173ccac6 6 weeks ago 1.24MB
ubuntu latest fb52e22af1b0 5 months ago 72.8MB
alpine latest 49f356fa4513 10 months ago 5.61MB
hello-world latest d1165f221234 11 months ago 13.3kB
同様に、実行中のDockerコンテナーのサイズを知りたい場合は、dockerpsコマンドを使用できます。
docker ps --size
コマンドの出力にSIZE列が追加されているはずです:
[email protected]:~$ docker ps --size
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
1171dcfb7e06 alpine "sleep 10" 10 months ago Up 9 seconds always-policy 0B (virtual 5.61MB)
0Bと表示され、仮想5.61 MBが表示されていることに気づきましたか?仮想サイズには、共有の基になるイメージが含まれます。
Linuxのアプローチに戻りましょう。具体的には、実践的な例としてAlpineイメージとコンテナを使用します。
docker pull
を使用するときはいつでも コマンドを実行するか、docker-compose up -d
を実行します アプリケーションの起動を準備するために、これは実際にUbuntu20.04サーバーに保存されているイメージスペースの使用状況を探す方法です。
sudo du -sh /var/lib/docker/overlay2/<hash-named-directory>/
ここで、Overlay2はUbuntuのデフォルトのDockerストレージドライバーです。これは、docker info
を実行することで確認できます。 コマンドとストレージドライバの検索:
Storage Driver: overlay2
これが自分のものと異なる場合は、Docker用に別のストレージドライバーを使用しています。同様に、ディレクトリの場所は、同じストレージドライバに従って名前が付けられます。ストレージドライバーの可用性は、カーネルのサポートによって異なります。
特定のイメージの場所を探している場合は、プルされたイメージに対してDockerinspectコマンドを使用できます。たとえば、docker pull alpine
を使用して高山の画像を取得したとします。 。次のコマンドを実行して検査します。
$ docker inspect alpine
コマンドを実行すると、Data
内に3つのフィールドが表示されます。 GraphDriver
の下のサブセクション :
...
"GraphDriver": {
"Data": {
"MergedDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/merged",
"UpperDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/diff",
"WorkDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/work"
},
...
上記の情報に基づいて、(du
で前述した)がわかります。 コマンド構文)この場合は64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e
。
ここで、次のコマンドを実行して、アルパイン画像で使用されているスペースの量を確認できます。
[email protected]:~$ sudo du -sh /var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e
6.0M /var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e
同様に、イメージと同様に、コンテナも同じストレージドライバベースのディレクトリ内に保存されます。
/var/lib/docker/overlay2
特定のコンテナの場所を探している場合は、inspect
を再度使用できます 実行中のコンテナーのDockerでのコマンド。たとえば、docker run -ti -d alpine
を使用してアルパインコンテナを実行したとします。 。 docker ps
を実行すると 、実行されていることがわかります:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cb341d6a28fa alpine "/bin/sh" 6 seconds ago Up 5 seconds confident_banzai
ここでは、コンテナの名前はランダムにconfident_banzai
になっています。 。それでは、調べてみましょう:
$ docker inspect confident_banzai
上記のコマンドを実行すると、Data
内の前述の4つのフィールドすべてに気付くでしょう。 GraphDriver
の下のサブセクション 。これらの場所は、画像で見たように、コンテナデータがホストシステムに物理的に保存される場所です。
...
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3-init/diff:/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/diff",
"MergedDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/merged",
"UpperDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/diff",
"WorkDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/work"
},
"Name": "overlay2"
},
...
これで、du
を使用できます もう一度コマンド:
[email protected]:~$ sudo du -sh /var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3
32K /var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3
Dockerイメージやコンテナーとは異なり、ボリュームの物理的な場所は非常に単純です。ボリュームは次の場所にあります:
/var/lib/docker/volumes/
したがって、次のコマンドを実行して、システム上のDockerボリュームのディスクスペース使用量全体を知ることができます。
avimanyu @iborg-desktop:~$ sudo du -sh /var/lib/docker/volumes/
60K /var/lib/docker/volumes/
この場合、主に2つのタイプがあります。 1つは通常のDockerボリュームで、もう1つはバインドマウントです。
特定のボリュームの場所を探している場合は、docker volume ls
を使用できます。 最初にコマンドを実行し、ボリューム名またはIDを確認してください。たとえば、ボリュームを使用して次のコマンドで高山コンテナを実行したとします。
docker run -ti -d --name alpine-container -v test-data:/var/lib/app/content alpine
ここで、test-data
という名前のボリューム 自動的に作成されます。 test.md
という名前のファイルを作成しましょう この場所の内部:
$ docker exec alpine-container sh -c "touch /var/lib/app/content/test.md"
ファイルが実際に作成されていることを確認します:
$ docker exec -ti alpine-container sh
/ # ls /var/lib/app/content/
test.md
/ # exit
docker volume ls
を実行すると 、test-data
という名前のボリューム リストされます:
$ docker volume ls
DRIVER VOLUME NAME
local d502589845f7ae7775474bc01d8295d9492a6c26db2ee2c941c27f3cac4449d1
local e71ee3960cfef0a133d323d146a1382f3e25856480a727c037b5c81b5022cb1b
local test-data
最後に、ホストシステム上のファイルの実際の場所を確認できます。
$ sudo ls -l /var/lib/docker/volumes/test-data/_data
total 0
-rw-r--r-- 1 root root 0 Oct 6 23:20 test.md
したがって、マウントされたボリュームのパスは、常に_data
という名前のディレクトリ内にあります。 それぞれのボリュームディレクトリ内。
したがって、du
を使用できます 特定のボリュームについては、ここでもう一度コマンドを実行してください!:
[email protected]:~$ sudo du -sh /var/lib/docker/volumes/test-data/_data
4.0K /var/lib/docker/volumes/test-data/_data
ボリュームが使用しているスペースを確認するときは、必ずボリューム名をメモしてください。
これは、ディスクスペースの使用状況を監視するためにLinuxアプローチを使用する必要があるDockerの唯一の例外です。同時に、実行中のコンテナを最初に停止することが常に望ましいです。
$ mkdir /home/avimanyu/test-data
$ docker run -ti -d --name alpine-container -v /home/avimanyu/test-data:/var/lib/app/content alpine
この場合、test-data
という名前のバインドマウントされたボリューム コンテナ側で/var/lib/app/content
として利用可能になります 。
[email protected]:~$ sudo du -sh /home/avimanyu/test-data
4.0K /home/avimanyu/test-data
コンテナ内で同じことをテストすることもできます:
[email protected]:~$ sudo docker exec -ti alpine-container sh
/ # du -sh /var/lib/app/content
4.0K /var/lib/app/content
ご覧のとおり、実際にはバインドマウントであるため、上記で報告された両方のサイズは同じです。
ホスト上のDockerログは常にボリュームに保存されます。このセクションで説明されている方法を使用して、ユーザーはDockerボリュームのディスクスペース使用量を確認することでナビゲートして見つけることもできます。これはアプリごとに異なり、アプリボリューム内のログファイルの場所も異なります。
これまでに学んだことに基づいて、明らかに、次のコマンドを使用して、イメージとコンテナーのディスク使用量を一緒にフェッチすることもできます。
sudo du -sh /var/lib/docker/overlay2
ホスト上のDockerログは常にボリュームに保存されます。通常、Dockerのボリュームが大きい場合は、ログが蓄積され、非効率的に管理されていることを示している可能性があります。
Dockerログを確認する方法[保存またはリアルタイム]Dockerでログ管理を簡単にするいくつかの興味深い方法を調べて学びます。 LinuxハンドブックAvimanyuBandyopadhyayこの記事のボリュームのセクションで説明されている方法を使用して、ユーザーはDockerボリュームのディスクスペース使用量を確認することで、これをナビゲートして軽減することもできます。これはアプリごとに異なり、アプリボリューム内のログファイルの場所も異なります。
概要
このチュートリアルでは、一般的なLinuxベースのアプローチを採用して、ホストレベルでLinuxサーバー上にあるDockerイメージ、コンテナー、およびボリュームのディスクスペース占有率を確認する方法を示しました。また、推奨される(Docker)方法でそれを行う方法も学びました。
このアプローチに対するフィードバック、コメント、提案を共有したい場合は、以下のコメントセクションにご意見をお寄せください