概要
dockerのコンテナをbuildしたり修正したりを何回かやっていると、システムの容量が圧迫してしまうことがあるので、コンテナがらみの容量整理の方法を備忘録として残します。
1. dockerシステムがどれくらい容量を使っているのか可視化する -> docker system df
docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 20 2 118GB 108GB (91%)
Containers 2 0 41.63kB 41.63kB (100%)
Local Volumes 0 0 0B 0B
Build Cache 378 0 6.546GB 6.546GB
2. 停止中のコンテナをすべて削除する -> docker rm $(docker ps -a -q)
docker rm $(docker ps -a -q)
7c608c7c83ff
917fa5206854
3. 停止中のコンテナと未使用のイメージ、ネットワーク、ボリュームをすべて削除する -> docker system prune
docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- unused build cache
Are you sure you want to continue? [y/N] y
Deleted Networks:
xxx
yyy
Deleted Images:
deleted: sha256:b056d03133698c6f31c79ec7d008ac934cc182d054e76055f189c9b7f6cf0d89
...
Deleted build cache objects:
x9ogq0nhdly7q1nj39dub3rl4
...
Total reclaimed space: 67.28GB
注意: docker system prune -a
docker system prune -a
と -a
optionを入れてしまうと、全てのコンテナが削除されてしまうため、使用していたコンテナがある場合、再度buildする必要があります。-aオプションを使用する際は注意が必要です。
なぜdockerの容量が圧迫されるのか(何が保存されていたのか)
Dockerは、ビルドプロセスを高速化するために、ビルドキャッシュを使用します。同じ命令を持つDockerfileを再ビルドする際に、キャッシュされたレイヤーを再利用することで、ビルド時間を短縮します。これは実際確かに強力で、少しだけ修正したDockerfileを構築する際は差分のところだけをbuildすることで数分節約することができます。代償としては、やはり容量の圧迫です。