Docker イメージを一覧表示して削除するには?

公開: 2021-08-03

Docker はよく知られているプラ​​ットフォームであり、OS と依存ライブラリをアプリケーションと共にパッケージ化するコンテナーとして、アプリケーションの実行と配布を管理できます。

Docker イメージの管理について説明します。主に、Docker イメージを一覧表示して必要な情報を取得する方法について簡単に説明し、その学習に基づいて 1 つまたは複数のイメージを効率的に削除する方法を説明します。

それでは始めましょう。

Docker イメージの一覧表示

プルされた Docker イメージを一覧表示するには、次を使用します。

 abhisheknair@geekflare:~$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE redis latest aa4d65e670d6 9 days ago 105MB mysql latest c60d96bd2b77 10 days ago 514MB ubuntu latest c29284518f49 2 weeks ago 72.8MB nginx latest 4cdc5dd7eaad 3 weeks ago 133MB hello-world latest d1165f221234 4 months ago 13.3kB redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$

他のdockerコマンドと同様に、複数のオプションを持つimagesコマンドをサポートしています。

 $ docker images [OPTIONS] [REPOSITORY[:TAG]]

オプションなしでdocker imagesを実行すると、 docker image lsなどの最上位のイメージ、それらのリポジトリとタグ、およびディスク上のサイズが表示されます。

 abhisheknair@geekflare:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest c60d96bd2b77 10 days ago 514MB ubuntu latest c29284518f49 2 weeks ago 72.8MB nginx latest 4cdc5dd7eaad 3 weeks ago 133MB hello-world latest d1165f221234 4 months ago 13.3kB redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$

これらのイメージには、使いやすさを向上させ、ビルド プロセスを高速化し、上記のコマンドでは表示されないディスク使用量を削減する中間層があります。 SIZEは、画像とそのすべての親画像が占める合計スペースです。 Docker でイメージをsaveするときに、イメージの内容を Tar ファイルとして保存すると、このリストされたサイズと同じになります。

イメージは、複数のリポジトリ名またはタグを持つ場合、複数回リストされますが、 IMAGE IDで識別される単一のイメージは、リストされたSIZEを 1 回しか使用しません。

最新の画像を一覧表示する

abhisheknair@geekflare:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest c60d96bd2b77 10 days ago 514MB ubuntu latest c29284518f49 2 weeks ago 72.8MB nginx latest 4cdc5dd7eaad 3 weeks ago 133MB hello-world latest d1165f221234 4 months ago 13.3kB redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$

リポジトリとタグごとにイメージを一覧表示する

特定のリポジトリに属する​​すべてのイメージを一覧表示するには、次のようにリポジトリ名を指定します。

 abhisheknair@geekflare:~$ docker images redis REPOSITORY TAG IMAGE ID CREATED SIZE redis latest aa4d65e670d6 9 days ago 105MB redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$

よりフィルタリングされた出力のために、タグを使用してリポジトリ名をさらに指定できます。

 abhisheknair@geekflare:~$ docker images redis:4.0 REPOSITORY TAG IMAGE ID CREATED SIZE redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$

フルレングスのイメージ ID を一覧表示する

IMAGE IDを切り捨てずにすべての画像を一覧表示するには、次を使用します。

 abhisheknair@geekflare:~$ docker images --no-trunc REPOSITORY TAG IMAGE ID CREATED SIZE redis latest sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7 9 days ago 105MB mysql latest sha256:c60d96bd2b771a8e3cae776e02e55ae914a6641139d963defeb3c93388f61707 10 days ago 514MB ubuntu latest sha256:c29284518f497b8c5f49933e74e43ca5221e69c8251e780427f7d12f716625ff 2 weeks ago 72.8MB nginx latest sha256:4cdc5dd7eaadff5080649e8d0014f2f8d36d4ddf2eff2fdf577dd13da85c5d2f 3 weeks ago 133MB hello-world latest sha256:d1165f2212346b2bab48cb01c1e39ee8ad1be46b87873d9ca7a4e434980a7726 4 months ago 13.3kB redis 4.0 sha256:191c4017dcdd3370f871a4c6e7e1d55c7d9abed2bebf3005fb3e7d12161262b8 15 months ago 89.3MB abhisheknair@geekflare:~$

イメージ ダイジェストの一覧表示

v2 以降の形式を使用する Docker イメージには、 digestと呼ばれるコンテンツ アドレス指定可能な識別子があります。 イメージ ダイジェスト値を一覧表示するには、 --digestフラグを次のように使用します。

 abhisheknair@geekflare:~$ docker images --digests REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE redis latest sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59 aa4d65e670d6 9 days ago 105MB mysql latest sha256:8b928a5117cf5c2238c7a09cd28c2e801ac98f91c3f8203a8938ae51f14700fd c60d96bd2b77 10 days ago 514MB ubuntu latest sha256:b3e2e47d016c08b3396b5ebe06ab0b711c34e7f37b98c9d37abe794b71cea0a2 c29284518f49 2 weeks ago 72.8MB nginx latest sha256:c5aab9d8e259d54af91e0548abf1fa8188a43079eb86b6ba8df9f482a5380720 4cdc5dd7eaad 3 weeks ago 133MB hello-world latest sha256:df5f5184104426b65967e016ff2ac0bfcd44ad7899ca3bbcf8e44e4461491a9e d1165f221234 4 months ago 13.3kB redis 4.0 sha256:2e03fdd159f4a08d2165ca1c92adde438ae4e3e6b0f74322ce013a78ee81c88d 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$

2.0レジストリでは、これらのダイジェストをpushpullcreaterun 、およびrmiコマンドで使用できます。 これは、 DockerfileFROMコマンドでも機能します。

出力のフィルタリング

dockerコマンドは、 --filterフラグを使用したimagesフィルタリングをサポートしています。 現在サポートされているフィルターは次のとおりです。

  • ぶら下がり (ブール値 – true または false)
  • ラベル ( label=<key>またはlabel=<key>=<value> )
  • before ( <image-name>[:<tag>]<image id>または<image@digest> ) – 指定された ID または参照の前に作成された画像をフィルタリングします
  • since ( <image-name>[:<tag>] , <image id>または<image@digest> ) – 指定された id または参照以降に作成された画像をフィルタリングします
  • 参照 (画像参照のパターン) – 参照が指定されたパターンと一致する画像をフィルター処理します

さらに、次のように組み合わせて複数のフィルターを使用できます。

 $ docker images --filter "<key1>=<value1>" --filter"<key2>=<value2>"

例:

 abhisheknair@geekflare:~$ docker images --filter "before=redis" --filter "since=hello-world" REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest c60d96bd2b77 10 days ago 514MB ubuntu latest c29284518f49 2 weeks ago 72.8MB nginx latest 4cdc5dd7eaad 3 weeks ago 133MB abhisheknair@geekflare:~$

出力のフォーマット

docker imagesは、他のコマンド、スクリプト、またはその他の方法でネストするために必要な書式設定出力をサポートしています。 --formatフラグでサポートされているプレースホルダーは次のとおりです。

プレースホルダー説明
.ID 画像ID
.Repository 画像リポジトリ
.Tag 画像タグ
.Digest 画像ダイジェスト
.CreatedSince イメージが作成されてからの経過時間
.CreatedAt イメージが作成された時間
.Size イメージディスクサイズ

例として、以下のコマンドはヘッダーなしで出力を出力し、すべてのイメージのIDRepositoryをコロン ( : ) で区切って出力します。

 abhisheknair@geekflare:~$ docker images --format "{{.ID}}: {{.Repository}}" aa4d65e670d6: redis c60d96bd2b77: mysql c29284518f49: ubuntu 4cdc5dd7eaad: nginx d1165f221234: hello-world 191c4017dcdd: redis abhisheknair@geekflare:~$

または、リポジトリとタグを含むすべてのイメージをテーブル形式で一覧表示するには、次を使用できます。

 abhisheknair@geekflare:~$ docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}" IMAGE ID REPOSITORY TAG aa4d65e670d6 redis latest c60d96bd2b77 mysql latest c29284518f49 ubuntu latest 4cdc5dd7eaad nginx latest d1165f221234 hello-world latest 191c4017dcdd redis 4.0 abhisheknair@geekflare:~$

Docker イメージの削除

システムから 1 つ以上の Docker イメージを削除するには、以下を使用します。

 $ docker image rm [OPTIONS] IMAGE [IMAGE...]

単一の画像を削除するには、画像名を指定するだけです:

 abhisheknair@geekflare:~$ docker image rm redis Untagged: redis:latest Untagged: redis@sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59 Deleted: sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7 Deleted: sha256:3bd00d38f5ca70200050477c527cc60cfdf82911d6fe03932e2bcae31a95cfa2 Deleted: sha256:22722fde392d188cfbe5bbd0c2451cc71cf5b000afc0e5114c1066bb5e113ec9 Deleted: sha256:38212b55ef525e86cd726cd83c1a82a6009c68d24771d6e93d439fdc88e66f0e Deleted: sha256:188c498579cef37b65a93d6448c6b129fa07d5740fc213a18843ff22d80cd10d Deleted: sha256:2117165cd53c98f13ec7af36c9d8acd239fc541c847efaccb49885decf615d68 abhisheknair@geekflare:~$

または、複数の画像を削除するには、複数の画像名をスペースで区切って指定します。

 abhisheknair@geekflare:~$ docker image rm redis mariadb Untagged: redis:latest Untagged: redis@sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59 Deleted: sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7 Deleted: sha256:3bd00d38f5ca70200050477c527cc60cfdf82911d6fe03932e2bcae31a95cfa2 Deleted: sha256:22722fde392d188cfbe5bbd0c2451cc71cf5b000afc0e5114c1066bb5e113ec9 Deleted: sha256:38212b55ef525e86cd726cd83c1a82a6009c68d24771d6e93d439fdc88e66f0e Deleted: sha256:188c498579cef37b65a93d6448c6b129fa07d5740fc213a18843ff22d80cd10d Deleted: sha256:2117165cd53c98f13ec7af36c9d8acd239fc541c847efaccb49885decf615d68 Untagged: mariadb:latest Untagged: mariadb@sha256:3b6f9fa1d406e168998d62501b2ee4f27d53138bebfcdac03540758996c5ff1d Deleted: sha256:fd17f57768027456cc17987058474fb21d3c51e9dd764e4497c1dfe92ff058db Deleted: sha256:a638f04e531b032c81a84bda59a36d1df3c4cec62560c403bc2edb642bce79ba Deleted: sha256:af7a7e7bf72e7ad0c5227995f219d9094fafbe0ac973dbe7eb4ab190a5a58ba5 Deleted: sha256:a0cfd81b291e8da6bca0731c9db70fe1b61d176906b1cf05ade1cd61572ffaaa Deleted: sha256:38b00cb5dab64398092fab2b18563af1ef4a9445dec8a531ac725059dc218f41 Deleted: sha256:6e60d29d2d76125f989f503a78729984f7ba3e26bfbf7038d5ab644b8755b7c2 Deleted: sha256:1dafdd60e471b4c1f5244cfe1d20d79f934f504ef42180b637886be2b0b74370 Deleted: sha256:2fffe8e736cdb99359084e297f4bb54a4cac879366bd3e4333d3dbe966f8e9a6 Deleted: sha256:f728037697805db453111266541c202c74971484ef359ea29b9c60064ed9e47e Deleted: sha256:28155a13db3520201db576bf6d56b68fc08ef27b1c4c49dbfeadef523d35c5f0 Deleted: sha256:7555a8182c42c7737a384cfe03a3c7329f646a3bf389c4bcd75379fc85e6c144 abhisheknair@geekflare:~$

強制削除

削除しようとしているイメージを使用しているコンテナーが実行されている可能性があります。 このような場合、参照されたイメージを削除しようとすると、Docker は警告を発行します。

 abhisheknair@geekflare:~$ docker image rm nginx Error response from daemon: conflict: unable to remove repository reference "nginx" (must force) - container ce908eadf829 is using its referenced image 4cdc5dd7eaad abhisheknair@geekflare:~$

関連するコンテナーを最初に停止してから再試行するか、 -fフラグを使用してイメージを強制的に削除することができます (注意してください)。

 abhisheknair@geekflare:~$ docker image rm nginx -f Untagged: nginx:latest Untagged: nginx@sha256:c5aab9d8e259d54af91e0548abf1fa8188a43079eb86b6ba8df9f482a5380720 Deleted: sha256:4cdc5dd7eaadff5080649e8d0014f2f8d36d4ddf2eff2fdf577dd13da85c5d2f abhisheknair@geekflare:~$

剪定画像

未使用のイメージがディスク容量を消費している場合や、古いダングリング イメージのクリーンアップが必要な場合があります。 以下を使用して、このような未使用のイメージを消去できます。

 $ docker image prune

例:

 abhisheknair@geekflare:~$ docker image prune WARNING! This will remove all dangling images. Are you sure you want to continue? [y/N] y Total reclaimed space: 0B abhisheknair@geekflare:~$

どのコンテナでも使用されていないすべてのイメージをクリーンアップする場合は、 -aフラグを使用します。

 abhisheknair@geekflare:~$ 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: mariadb:latest untagged: mariadb@sha256:3b6f9fa1d406e168998d62501b2ee4f27d53138bebfcdac03540758996c5ff1d deleted: sha256:fd17f57768027456cc17987058474fb21d3c51e9dd764e4497c1dfe92ff058db deleted: sha256:a638f04e531b032c81a84bda59a36d1df3c4cec62560c403bc2edb642bce79ba deleted: sha256:af7a7e7bf72e7ad0c5227995f219d9094fafbe0ac973dbe7eb4ab190a5a58ba5 deleted: sha256:a0cfd81b291e8da6bca0731c9db70fe1b61d176906b1cf05ade1cd61572ffaaa deleted: sha256:38b00cb5dab64398092fab2b18563af1ef4a9445dec8a531ac725059dc218f41 deleted: sha256:6e60d29d2d76125f989f503a78729984f7ba3e26bfbf7038d5ab644b8755b7c2 deleted: sha256:1dafdd60e471b4c1f5244cfe1d20d79f934f504ef42180b637886be2b0b74370 deleted: sha256:2fffe8e736cdb99359084e297f4bb54a4cac879366bd3e4333d3dbe966f8e9a6 deleted: sha256:f728037697805db453111266541c202c74971484ef359ea29b9c60064ed9e47e deleted: sha256:28155a13db3520201db576bf6d56b68fc08ef27b1c4c49dbfeadef523d35c5f0 deleted: sha256:7555a8182c42c7737a384cfe03a3c7329f646a3bf389c4bcd75379fc85e6c144 untagged: redis:latest untagged: redis@sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59 deleted: sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7 deleted: sha256:3bd00d38f5ca70200050477c527cc60cfdf82911d6fe03932e2bcae31a95cfa2 deleted: sha256:22722fde392d188cfbe5bbd0c2451cc71cf5b000afc0e5114c1066bb5e113ec9 deleted: sha256:38212b55ef525e86cd726cd83c1a82a6009c68d24771d6e93d439fdc88e66f0e deleted: sha256:188c498579cef37b65a93d6448c6b129fa07d5740fc213a18843ff22d80cd10d deleted: sha256:2117165cd53c98f13ec7af36c9d8acd239fc541c847efaccb49885decf615d68 Total reclaimed space: 445.2MB abhisheknair@geekflare:~$

--forceまたは-fフラグを使用して、確認なしでクリーンアップを続行したり、 --filterフラグを使用してフィルター値 (たとえば、'until=<timestamp>') をpruneコマンドに提供したりすることもできます。

例:

 $ docker image prune -a --force --filter "until=2021-01-04T00:00:00"

または

$ docker image prune --filter="label=deprecated"

rmi コマンドの使用

docker でrmiコマンドを使用してイメージを削除することもできます。

Docker ノードから 1 つ以上のイメージを削除 (およびタグ解除) します。 画像に複数のタグがある場合、タグをパラメーターとしてこのコマンドを使用すると、タグのみが削除されます。 画像のタグが 1 つだけの場合は、画像とタグの両方が削除されます。

このコマンドは、レジストリからイメージを削除しません。 また、 docker image rmコマンドのように-fオプションを使用しない限り、実行中のコンテナーのイメージを削除することはできません。

例:

 abhisheknair@geekflare:~$ docker rmi alpine Untagged: alpine:latest Untagged: alpine@sha256:adab3844f497ab9171f070d4cae4114b5aec565ac772e2f2579405b78be67c96 Deleted: sha256:d4ff818577bc193b309b355b02ebc9220427090057b54a59e73b79bdfe139b83 Deleted: sha256:72e830a4dff5f0d5225cdc0a320e85ab1ce06ea5673acfe8d83a7645cbd0e9cf abhisheknair@geekflare:~$

--no-pruneを使用して、タグなしの親を削除しないように指定することもできます。

コンテナーを停止してイメージを削除する

多くの場合、すべてのコンテナーを停止し、関連付けられているすべてのイメージを削除する必要があります。 あなたはそれを簡単に行うことができます:

 $ docker rm -vf $(docker ps -a -q)

上記のコマンドは、実行中のすべてのコンテナーを強制的に停止して削除します。 次に、次を使用して、リンクされた画像の削除に進むことができます。

 $ docker rmi -f $(docker images -a -q)

概要

Docker は、今日の DevOps エンジニアの武器庫の不可欠な部分であり、Kubernetes のような他の話題のテクノロジーの一部である汎用ツールです。 Docker イメージ管理は、Docker 展開の管理とトラブルシューティングに不可欠な部分の 1 つです。

これで、 docker CLI コマンドがimageimagesrmiなどのコマンドで提供する機能の基本的なアイデアが得られました。 それらのフラグは、さらなるカスタマイズを提供し、自動化と高度な使用に役立つ高度なフィルタリングとカスタマイズ オプションを提供します。

利用可能なオプションと関連するヘルプ トピックの詳細については、 docker [COMMAND] helpを使用してください。