Dockerイメージを作成し続けると、すぐにスペースが不足し始めます。古い未使用のDockerイメージを削除すると、十分なディスク容量が解放されます。
この記事では、システムからDockerイメージを削除するさまざまなシナリオについて説明します。
まず、次のコマンドを使用して、システムに存在するDockerイメージを確認します。
docker images
出力には、すべてのDockerイメージとそのイメージIDが表示されます。システムからDockerイメージを削除するには、このイメージ名(リポジトリ列の下)またはイメージIDが必要です。
[email protected]:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
debian latest 67e34c1c9477 2 weeks ago 114MB
ubuntu latest 775349758637 6 weeks ago 64.2MB
イメージIDを使用すると、次の方法でDockerイメージを削除できます。
docker rmi image_name_or_id
どちらも同じであるため、このコマンドを使用することもできます:
docker image rm image_id
出力は次のようになります。
[email protected]:~$ docker rmi 67e34c1c9477
Untagged: debian:latest
Untagged: [email protected]:79f0b1682af1a6a29ff63182c8103027f4de98b22d8fb50040e9c4bb13e3de78
Deleted: sha256:67e34c1c9477023c0ce84c20ae5af961a6509f9952c2ebbf834c5ea0a286f2b8
Deleted: sha256:f2b4f0674ba3e6119088fe8a98c7921ed850c48d4d76e8caecd7f3d57721b4cb
画像IDを使用すると、そのIDに関連付けられているすべての画像が削除されます。
そのようなDockerイメージを削除できれば、生活はずっとシンプルになります。しかし、それは頻繁には起こりません。
Dockerイメージに関連付けられたコンテナがある場合、イメージを削除しようとするとエラーが発生します。
[email protected]:~$ docker rmi 775349758637
Error response from daemon: conflict: unable to delete 775349758637 (cannot be forced) - image is being used by running container 13dc0f4226dc
最初にコンテナを停止する必要があります:
[email protected]:~$ docker stop 13dc0f4226dc
13dc0f4226dc
問題は、コンテナを停止しても、画像を削除しようとすると文句を言うことです:
[email protected]:~$ docker rmi 67e34c1c9477
Error response from daemon: conflict: unable to delete 67e34c1c9477 (must be forced) - image is being used by stopped container 5ced86b1fcee
ここには2つのオプションがあります:
- Dockerイメージを強制的に削除します(関連付けられたコンテナーはシステムに残ります)
- 関連するコンテナを削除してから、Dockerイメージを削除します
Dockerイメージを強制的に削除するには、-fオプションを使用できます:
docker rmi -f image_id
コンテナを削除してから画像を削除するには、次のようなものを使用できます:
docker rm container_id
docker rmi image_id
Dockerイメージが1つのコンテナーのみに関連付けられている場合、作業は少し簡単になります。ただし、画像には複数のコンテナが関連付けられている可能性があり、そのようなDocker画像を削除するのは面倒です。
次のようなエラーが表示されます:
[email protected]:~$ docker rmi 775349758637
Error response from daemon: conflict: unable to delete 775349758637 (must be forced) - image is referenced in multiple repositories
まず、(IDではなく)イメージ名に関連付けられているすべてのコンテナを見つける必要があります。
docker ps -a -q --filter ancestor=docker_image_name
- -オプションは、実行中および停止中のすべてのコンテナを表示します。
- -qオプションはコンテナIDのみを表示します。
そして、それらすべてを停止する必要があります。コンテナIDを1つずつ使用することもできますが、時間がかかりすぎます。パイプとxargsの魔法を使用して、画像に関連付けられているすべてのコンテナを停止できます:
docker ps -a -q --filter ancestor=ubuntu | xargs docker stop
次に、停止したコンテナを削除するか、(前のセクションで見たように)イメージを強制的に削除することができます。
イメージに関連付けられているすべてのコンテナを削除する場合は、次のコマンドを実行するだけです。
docker ps -a -q --filter ancestor=ubuntu | xargs docker rm
これで、このチュートリアルの前半で示したコマンドを使用して、Dockerイメージを削除できます。
1つのコマンドで複数のDockerイメージを削除することもできます。前のコマンドと同じです。画像IDまたは画像名を指定するだけです。
docker rmi image_id_1 image_id_2 image_id_3
もちろん、イメージに関連付けられている実行中のコンテナをすべて停止する必要があります。
それを見る前に、未使用でぶら下がっている画像が何であるかを説明しましょう:
あらゆる種類のコンテナーが関連付けられている(停止または実行中の)Dockerイメージは、使用済みイメージです。 Dockerイメージにコンテナが関連付けられていない場合、Dockerイメージは未使用のDockerイメージになります。
ぶら下がっているDockerイメージは、「イメージの新しいビルドを作成したが、新しい名前が付けられていないことを意味します。つまり、あなたが持っている古い画像はぶら下がっている画像になります。これらの古い画像はタグが付いておらず、「dockerimages」コマンドを実行すると名前に
ぶら下がっている画像を削除する場合は、プルーニングオプションを使用できます:
docker image prune
未使用の画像とぶら下がっている画像の両方を一度に削除する場合は、オプション-a:
を使用してプルーニングを使用できます。docker image prune -a
出力の最後に、解放されたスペースが表示されます。
[email protected]:~$ docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: ubuntu:latest
untagged: [email protected]:6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d
untagged: debian:latest
untagged: [email protected]:79f0b1682af1a6a29ff63182c8103027f4de98b22d8fb50040e9c4bb13e3de78
deleted: sha256:67e34c1c9477023c0ce84c20ae5af961a6509f9952c2ebbf834c5ea0a286f2b8
deleted: sha256:f2b4f0674ba3e6119088fe8a98c7921ed850c48d4d76e8caecd7f3d57721b4cb
untagged: fedora:latest
untagged: [email protected]:d4f7df6b691d61af6cee7328f82f1d8afdef63bc38f58516858ae3045083924a
deleted: sha256:f0858ad3febdf45bb2e5501cb459affffacef081f79eaa436085c3b6d9bd46ca
deleted: sha256:2ae3cee18c8ef9e0d448649747dab81c4f1ca2714a8c4550eff49574cab262c9
Total reclaimed space: 308.3MB
pruneコマンドを使用すると、少し賢くなり、古い未使用のぶら下がっている画像のみを削除できます。したがって、24時間以上経過したものを削除する場合は、次のように使用します。
docker image prune -a --filter "until=24h"
おそらく、テスト環境にいて、すべてのDockerイメージを削除して最初からやり直したいと考えています。
すべてのDockerイメージを削除するには、最初に実行中のすべてのコンテナーを停止する必要があります。
docker ps -a -q | xargs docker rm
これで、次の方法ですべての画像を削除できます:
docker images -a -q | xargs docker rmi -f
それでおしまい。 Dockerイメージを削除するには、これで十分な参考資料だと思います。このトピックについては、今すぐ理解しておく必要があります。チュートリアルをチェックして、Dockerコンテナを削除することもできます。
ご質問やご提案がございましたら、下にコメントを残してください。