このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Docker基礎】イメージを削除する

イメージを削除する

 ここでは、Dockerのコンテナ操作の流れの一環として、Dockerイメージの削除方法について学びます。これまでにコンテナを作成・起動・停止・削除する手順を学びましたが、コンテナを削除しても、それに基づくイメージはシステムに残ったままです。イメージが蓄積されると、ストレージを圧迫し、システムのパフォーマンスに影響を及ぼす可能性があるため、不要なイメージは適宜削除することが推奨されます。

イメージが残る理由

 Dockerでは、イメージはコンテナのテンプレートとして機能します。コンテナを削除しても、元となるイメージは削除されないため、再度同じイメージからコンテナを作成することが可能です。この仕組みにより、イメージを再利用することで効率的にコンテナを管理できます。しかし、コンテナを多数作成・削除する際には、不要なイメージが溜まってしまう問題が発生します。

イメージを削除する重要性

 イメージが増え続けると、ディスクスペースを圧迫するだけでなく、システムの管理が煩雑になる可能性があります。そのため、使用しなくなったイメージは定期的に削除し、システムの健全性を維持することが重要です。

イメージの削除方法

 Dockerイメージを削除するには、docker image rmコマンドを使用します。このコマンドは、イメージ名またはイメージIDを指定して実行します。ただし、イメージを削除する前に、そのイメージから作成されたすべてのコンテナが削除されている必要があります。コンテナが存在する場合、イメージの削除は拒否されます。

使用するコマンドの概要

以下に、ここで使用する主なDockerコマンドとその説明をまとめます。

コマンド説明
docker runイメージのダウンロード、コンテナの作成、コンテナを起動する。
docker ps現在稼働中のコンテナの一覧を表示する。
docker ps -aすべてのコンテナ(稼働中および停止中)を表示する。
docker stop指定したコンテナを停止する。
docker rm指定したコンテナを削除する。
docker image ls現在のイメージ一覧を表示する。
docker image rm指定したイメージを削除する。
docker image prune -a未使用のイメージを一括削除する。

実践の準備

 「イメージのバージョンとイメージ名」で解説した手順を実行している場合は、すべてのコンテナとイメージが削除されているため、以下のコマンドを実行して、コンテナとイメージを用意しておきます。すでに、いくつかのイメージとコンテナが存在する場合は、以下の手順は必要ありません。

実行結果は省略します。

docker run --name apache -d -p 8000:80 httpd
docker run --name apache1 -d -p 8081:80 httpd:2.2
docker run --name nginx -d -p 8080:80 nginx
docker run --name mysql -dit -e MYSQL_ROOT_PASSWORD=myrootpass mysql

イメージ削除の実践

以下の手順に従って、不要なDockerイメージを削除します。

Step1:削除対象のイメージを確認する

まず、削除したいイメージが存在するか確認します。

コマンドの実行

docker image ls

実行結果

PS C:\Users\joeac> docker image ls
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
nginx         latest    f876bfc1cc63   5 weeks ago     192MB
mysql         latest    56a8c14e1404   2 months ago    603MB
httpd         latest    4ce47c750a58   5 months ago    147MB
httpd         2.2       e06c3dbbfe23   6 years ago     171MB

実行結果の意味

項目内容
REPOSITORYイメージ名
TAGバージョン情報。指定しない場合は「latest(最新版)」が使用される。
IMAGE IDイメージID。先頭12文字のみで十分に識別可能
CREATEDイメージが作成されてからの経過時間
SIZEイメージのファイルサイズ

Step2:関連するコンテナを確認する

 削除対象のイメージから作成されたコンテナが存在するか確認します。存在する場合は、まずコンテナを停止・削除する必要があります。

コマンドの実行

docker ps -a

実行結果

CONTAINER ID   IMAGE       COMMAND                   CREATED          STATUS              PORTS                 NAMES
d2595a0565af   httpd:2.2   "httpd-foreground"        6 seconds ago    Up 6 seconds        0.0.0.0:8081->80/tcp   apache1
c6cdfa00816d   mysql       "docker-entrypoint.s…"   11 minutes ago   Up 11 minutes       3306/tcp, 33060/tcp    mysql
88755d02cd43   nginx       "/docker-entrypoint.…"   11 minutes ago   Up 11 minutes       0.0.0.0:8080->80/tcp   nginx
7e0c7612b9e2   httpd       "httpd-foreground"        11 minutes ago   Up 11 minutes       0.0.0.0:8000->80/tcp   apache

確認ポイント

  • 削除対象のイメージ(例: httpd:2.2, nginx, mysql)から作成されたコンテナが一覧に表示されていること。
  • STATUSが「Up」となっているコンテナが稼働中であること。

Step3:起動しているコンテナを停止させる

削除対象のイメージから作成されたコンテナが稼働中の場合、まずそれらを停止します。

コマンドの実行

docker stop mysql
docker stop nginx
docker stop apache
docker stop apache1

実行結果

PS C:\Users\joeac> docker stop mysql
mysql

PS C:\Users\joeac> docker stop nginx
nginx

PS C:\Users\joeac> docker stop apache
apache

PS C:\Users\joeac> docker stop apache1
apache1

解説

  • docker stopコマンドは、指定したコンテナの動作を停止します。
  • 実行結果として、停止されたコンテナ名が表示されます。

Step4:停止しているコンテナを削除する

停止したコンテナを削除します。これにより、イメージの削除が可能になります。

コマンドの実行

docker rm mysql
docker rm nginx
docker rm apache
docker rm apache1

実行結果

PS C:\Users\joeac> docker rm mysql
mysql

PS C:\Users\joeac> docker rm nginx
nginx

PS C:\Users\joeac> docker rm apache
apache

PS C:\Users\joeac> docker rm apache1
apache1

解説

  • docker rmコマンドは、指定したコンテナを削除します。
  • 実行結果として、削除されたコンテナ名が表示されます。

注意点

  • コンテナを削除する前に、必ずコンテナが停止されていることを確認してください。稼働中のコンテナは削除できません。
  • コンテナを削除すると、そのコンテナ内のデータは失われます。必要なデータがある場合は、事前にバックアップを取ってください。

Step5:イメージを削除する

 関連するコンテナをすべて削除した後、イメージ自体を削除します。イメージ名またはイメージIDを使用して削除します。以下にイメージを削除する例を示します。

ここでは、イメージ名で削除する場合の「docker image rm nginx」コマンドを実行します。

イメージ名で削除する場合

docker image rm nginx

イメージIDで削除する場合

docker image rm f876bfc1cc63

複数のイメージを一度に削除する場合

docker image rm nginx mysql

実行結果

PS C:\Users\joeac> docker image rm nginx
Untagged: nginx:latest
Untagged: nginx@sha256:42e917aaa1b5bb40dd0f6f7f4f857490ac7747d7ef73b391c774a41a8b994f15
Deleted: sha256:f876bfc1cc63d905bb9c8ebc5adc98375bb8e22920959719d1a96e8f594868fa
Deleted: sha256:e0f1c40b04bce92241b6a81812e29990b5ff711bfd3fb6817e4ec03f3f09cb72
Deleted: sha256:f3764bf5781131fa5df6d78bcde2d5905c7d2451b7084ff73d6cbb679fa2a573
Deleted: sha256:d0516283d34466f5e50f48966ce9c304cb665bd9a6fe984ca21166ff6d519264
Deleted: sha256:bf29edbdcdd853fb80ac4623db054796c3050017aa68dd79958ab61762fa85dc
Deleted: sha256:344c966b8cc1774f55cf5f6fb3c438c497a2a84d4e9e09befc7e1623f97029bf
Deleted: sha256:59db063f63f68b942f3c60769828c15efe9abd12362d5c6d925a0484bbf031d0

解説

  • docker image rmコマンドは、指定したイメージを削除します。
  • イメージ名にバージョン番号(タグ)を指定することで、特定のバージョンのイメージを削除できます。
  • 複数のイメージをスペース区切りで指定することで、一度に複数のイメージを削除することが可能です。
  • 実行結果として、削除されたイメージの詳細が表示されます。

注意点

  • イメージが使用中の場合: 削除しようとしたイメージを基に作成されたコンテナが存在する場合、イメージの削除は拒否されます。その場合は、まず関連するコンテナを停止・削除する必要があります。
  • 複数イメージの削除: スペース区切りで複数のイメージを指定することで、一度に複数のイメージを削除できます。

Step6:イメージの削除を確認する

削除が完了したことを確認するため、再度イメージ一覧を表示します。

コマンドの実行

docker image ls

実行結果

PS C:\Users\joeac> docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
mysql        latest    56a8c14e1404   2 months ago   603MB
httpd        latest    4ce47c750a58   5 months ago   147MB
httpd        2.2       e06c3dbbfe23   6 years ago    171MB

確認ポイント

  • 削除したイメージ(例: nginx)が一覧に表示されていないこと。
  • 他のイメージ(例:mysql,httpd)が存在する場合でも、削除したイメージが一覧に表示されていないことを確認します。

Step7:未使用イメージを一括削除する

 未使用のイメージを一括で削除するには、docker image prune -aコマンドを使用します。これにより、現在どのコンテナからも参照されていないすべてのイメージを削除することができます。

コマンドの実行

docker image prune -a

実行結果

PS C:\Users\joeac> 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: httpd:2.2
untagged: httpd@sha256:9784d70c8ea466fabd52b0bc8cde84980324f9612380d22fbad2151df9a430eb
(省略)
untagged: httpd:latest
untagged: httpd@sha256:72f6e24600718dddef131de7cb5b31496b05c5af41e9db8707df371859a350bb
(省略)
untagged: mysql:latest
untagged: mysql@sha256:0255b469f0135a0236d672d60e3154ae2f4538b146744966d96440318cc822c6
(省略)

Total reclaimed space: 922.1MB

解説

  • docker image prune -aコマンドは、現在どのコンテナからも参照されていないすべてのイメージを削除します。
  • 実行前に確認プロンプトが表示されるため、削除内容を確認してから実行できます。
  • 実行結果として、削除されたイメージの詳細と回収されたディスクスペースが表示されます。

注意点

  • docker image prune -aコマンドは、未使用のイメージのみを削除します。必要なイメージが削除されないように注意してください。
  • 確認プロンプトが表示されるため、削除前に内容を確認できます。

イメージ削除時の依存関係

 イメージを削除する際、他のイメージやコンテナがそのイメージに依存している場合は削除できません。特に、親イメージや中間イメージが存在する場合は注意が必要です。依存関係を確認し、必要に応じて関連するコンテナやイメージを削除してから進めましょう。

イメージ削除の前提条件

  • 削除対象のイメージから作成されたすべてのコンテナが停止・削除されていること。
  • 他のイメージやコンテナが依存していないこと。

まとめ

 ここでは、Dockerイメージの削除方法について学びました。以下のポイントを押さえておきましょう。

  • イメージの管理: コンテナを削除してもイメージは残るため、不要なイメージは適宜削除してストレージを効率的に利用します。
  • 依存関係の確認: イメージを削除する前に、そのイメージから作成されたすべてのコンテナを停止・削除する必要があります。
  • コマンドの理解: docker image lsdocker image rmdocker image prune -aなどのコマンドを活用して、イメージとコンテナの状態を管理します。
  • 未使用イメージの一括削除: docker image prune -aコマンドを使用して、未使用のイメージを一括で削除することができます。

 イメージの削除は、Docker環境の健全性を維持し、システムリソースを有効に活用するために重要な操作です。これらの手順を実践し、Dockerイメージの管理スキルを向上させましょう。

 次章では、複数のコンテナを扱う場合について詳しく解説していきます。引き続き、Dockerの学習を進めていきましょう。