docker image rm コマンドを使ってイメージを削除する方法

DockerDockerBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、docker image rm コマンドを使用して Docker イメージを効果的に管理する方法を学びます。まず、システム上に存在するイメージを一覧表示し、現在持っているイメージを把握します。

その後、複数のタグが付いたイメージの削除、タグによるイメージの削除、強制オプションを使用した ID によるイメージの削除、最後にダイジェストによるイメージの削除など、イメージを削除するさまざまなシナリオを探索します。この実践的な経験を通じて、不要な Docker イメージをクリーンアップするために必要なスキルを身につけることができます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ImageOperationsGroup -.-> docker/rmi("Remove Image") docker/ImageOperationsGroup -.-> docker/images("List Images") subgraph Lab Skills docker/rmi -.-> lab-555161{{"docker image rm コマンドを使ってイメージを削除する方法"}} docker/images -.-> lab-555161{{"docker image rm コマンドを使ってイメージを削除する方法"}} end

既存のイメージを一覧表示する

このステップでは、システム上に現在利用可能な Docker イメージを一覧表示する方法を学びます。Docker イメージはコンテナの構成要素です。コンテナを作成するために使用される読み取り専用のテンプレートです。

イメージを一覧表示するには、docker images コマンドを使用できます。このコマンドは、Docker がマシン上でダウンロードまたはビルドしたすべてのイメージのリストを表示します。

試してみましょう。ターミナルを開き、次のコマンドを実行します。

docker images

次のような出力が表示されるはずです(正確なイメージと詳細は、以前に Docker で行った操作によって異なります)。

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    270000000000   2 weeks ago    77.8MB
hello-world   latest    d00000000000   2 months ago   13.3kB

この出力は、各イメージに関するいくつかの情報を提供します。

  • REPOSITORY:イメージの名前。
  • TAG:イメージの特定のバージョン。指定されない場合、latest がデフォルトのタグになります。
  • IMAGE ID:イメージの一意の識別子。
  • CREATED:イメージが作成されてからの経過時間。
  • SIZE:イメージのサイズ。

持っているイメージを理解することは、それらを管理する最初のステップです。次のステップでは、イメージを削除する方法を探索します。

複数のタグが付いたイメージの削除を試みる

このステップでは、同じイメージ ID を指す複数のタグが付いた Docker イメージを削除しようとしたときに何が起こるかを調べます。これは、イメージに異なるバージョンや名前のタグを付ける際によく見られるシナリオです。

まず、イメージを取得し、追加のタグを付けましょう。この例では hello-world イメージを使用します。すでに持っている場合は、取得は非常に速くなります。

docker pull hello-world

次に、docker tag コマンドを使用してこのイメージに別のタグを追加します。構文は docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] です。hello-world:latest イメージに hello-world:mytag という新しいタグを付けます。

docker tag hello-world:latest hello-world:mytag

では、再度イメージを一覧表示して、新しいタグを確認しましょう。

docker images

hello-world には 2 つのエントリが表示されるはずです。1 つは latest タグ付き、もう 1 つは mytag タグ付きですが、両方の IMAGE ID は同じになります。

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    270000000000   2 weeks ago    77.8MB
hello-world   latest    d00000000000   2 months ago   13.3kB
hello-world   mytag     d00000000000   2 months ago   13.3kB

では、docker rmi コマンドを使用して、タグの 1 つ(例えば hello-world:latest)を使ってイメージを削除してみましょう。

docker rmi hello-world:latest

Docker は実際にはイメージデータ自体を削除しないことに気づくでしょう。代わりに、指定した特定のタグを削除します。出力には「Untagged」と表示されます。

Untagged: hello-world:latest

再度イメージを一覧表示すると、hello-world:latest のエントリは消えていますが、(同じ IMAGE ID の)hello-world:mytag のエントリはまだ存在していることがわかります。

docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    270000000000   2 weeks ago    77.8MB
hello-world   mytag     d00000000000   2 months ago   13.3kB

これは、イメージに複数のタグが付いている場合、1 つのタグを削除すると、イメージデータへの特定の参照のみが削除されることを示しています。イメージデータ自体は、それを指す最後のタグが削除されたとき、または ID で明示的に削除したとき(後で説明します)にのみ削除されます。

タグでイメージを削除する

前のステップでは、他のタグやコンテナがまだイメージを参照している場合、タグを削除するとイメージのタグが外れるだけであることを見ました。このステップでは、hello-world イメージの最後の残っているタグを削除します。これにより、イメージデータが削除されるはずです。

現在、mytag タグが付いた hello-world イメージを持っています。イメージを一覧表示してこれを確認しましょう。

docker images

hello-world:mytag のエントリが表示されるはずです。

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    270000000000   2 weeks ago    77.8MB
hello-world   mytag     d00000000000   2 months ago   13.3kB

では、docker rmi コマンドを使用して mytag タグで hello-world イメージを削除しましょう。

docker rmi hello-world:mytag

今回は、mytag がこのイメージ ID を参照する唯一のタグであったため、Docker はタグと基になるイメージデータの両方を削除します。出力には「Untagged」と表示され、その後「Deleted」と表示されます。

Untagged: hello-world:mytag
Deleted: sha256:d0000000000000000000000000000000000000000000000000000000000000000
Deleted: sha256:0000000000000000000000000000000000000000000000000000000000000000
... (more Deleted lines)

再度イメージを一覧表示して、hello-world イメージが削除されたことを確認しましょう。

docker images

hello-world イメージはリストに表示されなくなっているはずです。

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    270000000000   2 weeks ago    77.8MB

これは、イメージがコンテナによって使用されておらず、タグが 1 つしかない場合にイメージを削除する標準的な方法を示しています。

強制オプションを使用してイメージ ID でイメージを削除する

このステップでは、Docker イメージのイメージ ID を使用してイメージを削除する方法、特に必要に応じて強制オプション (-f または --force) を使用する方法を学びます。イメージ ID で削除することは、削除するイメージを正確に指定したい場合、特に複数のタグが同じイメージを指している場合に便利です。

まず、イメージ ID で削除できるイメージを取得しましょう。ubuntu イメージを使用します。すでに持っている場合は、取得はすぐに完了します。

docker pull ubuntu

次に、イメージを一覧表示して、ubuntu イメージのイメージ ID を取得します。

docker images

出力から ubuntu イメージを見つけ、その IMAGE ID をメモします。これは 16 進数の長い文字列になります。イメージを一意に識別するには、最初の数文字(通常は 3 文字以上)だけで十分です。

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    270000000000   2 weeks ago    77.8MB

まず、強制オプションを使用せずにイメージ ID でイメージを削除してみましょう。YOUR_IMAGE_IDdocker images の出力からメモした実際のイメージ ID に置き換えます。

docker rmi YOUR_IMAGE_ID

イメージが実行中または停止したコンテナによって使用されていない場合、このコマンドは正常に実行され、イメージが削除されます。ただし、このイメージを基にしたコンテナがある場合、イメージがコンテナによって使用されているため削除できないことを示すエラーメッセージが表示されます。

強制オプションの使用方法を示すために、まず ubuntu イメージを基にしたコンテナを実行しましょう。

docker run -d ubuntu sleep 3600

このコマンドは、Ubuntu コンテナをデタッチドモード (-d) で実行し、1 時間(sleep 3600)実行し続けます。

次に、強制オプションを使用せずに再度イメージ ID で ubuntu イメージを削除してみましょう。

docker rmi YOUR_IMAGE_ID

次のようなエラーメッセージが表示されるはずです。

Error response from daemon: conflict: unable to remove repository reference "ubuntu:latest" (must force) - image is referenced by one or more containers: 000000000000 (created ...)

このエラーは、コンテナがイメージを使用しているために発生します。コンテナによって使用されているイメージを削除するには、強制オプション (-f) を使用する必要があります。

では、強制オプションを使用してイメージ ID でイメージを削除しましょう。YOUR_IMAGE_ID を実際のイメージ ID に置き換えます。

docker rmi -f YOUR_IMAGE_ID

強制オプションを使用すると、Docker はコンテナによって使用されているイメージでも削除します。Docker はまずイメージを使用しているすべてのコンテナを停止して削除し、その後イメージ自体を削除します。出力には、イメージとそのレイヤーが削除されたことが表示されます。

Untagged: ubuntu:latest
Deleted: sha256:2700000000000000000000000000000000000000000000000000000000000000
Deleted: sha256:0000000000000000000000000000000000000000000000000000000000000000
... (more Deleted lines)

再度イメージを一覧表示して、ubuntu イメージが削除されたことを確認しましょう。

docker images

ubuntu イメージはリストに表示されなくなっているはずです。

強制オプションの使用は注意が必要です。これを使用すると、コンテナが確認なしに停止され、削除されます。

ダイジェストでイメージを削除する

この最後のステップでは、Docker イメージのダイジェストを使用してイメージを削除する方法を学びます。イメージのダイジェストは、イメージの内容に対する暗号学的に安全な識別子です。これは、イメージのタグに関係なく、イメージの正確なレイヤーと構成を一意に識別します。

まず、ダイジェストで削除できるイメージを取得しましょう。この例では alpine イメージを使用します。

docker pull alpine

次に、イメージのダイジェストを確認するには、docker images --digests コマンドを使用します。

docker images --digests

出力から alpine イメージを探します。DIGEST 列に sha256: で始まる値が表示されます。これがイメージのダイジェストです。

REPOSITORY    TAG       DIGEST                                                                    IMAGE ID       CREATED        SIZE
ubuntu        latest    <none>                                                                    270000000000   2 weeks ago    77.8MB
alpine        latest    sha256:0000000000000000000000000000000000000000000000000000000000000000   000000000000   3 weeks ago    5.59MB

ダイジェストでイメージを削除するには、docker rmi コマンドの後に REPOSITORY@DIGEST の形式でイメージ名とダイジェストを指定します。YOUR_ALPINE_DIGEST を前の出力で見つけた実際のダイジェストに置き換えます。

docker rmi alpine@YOUR_ALPINE_DIGEST

出力には、イメージが削除されたことが表示されます。

Deleted: sha256:0000000000000000000000000000000000000000000000000000000000000000
Deleted: sha256:0000000000000000000000000000000000000000000000000000000000000000
... (more Deleted lines)

再度イメージを一覧表示して、alpine イメージが削除されたことを確認しましょう。

docker images

alpine イメージはリストに表示されなくなっているはずです。

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        latest    <none>                                                                    270000000000   2 weeks ago    77.8MB

ダイジェストで削除することは、イメージを削除する最も具体的な方法であり、そのダイジェストで識別されるイメージの正確なバージョンを削除できます。

まとめ

この実験では、docker imagesdocker rmi コマンドを使用して Docker イメージを管理する方法を学びました。まず、既存のイメージを一覧表示し、そのリポジトリ、タグ、ID、作成時間、およびサイズを理解しました。

次に、イメージを削除するプロセスを調査しました。複数のタグが付けられたイメージを削除しようとし、docker rmi が他のタグがまだ参照している場合、指定されたタグのみを削除し、基礎となるイメージ ID は削除しないことを確認しました。タグを指定してイメージを正常に削除することができ、必要に応じて強制フラグ (-f) を使用してイメージ ID でイメージを削除する方法も示しました。最後に、イメージの内容に対する一意かつ不変の識別子であるダイジェストを使用してイメージを削除する方法を学びました。