Dockerはソフトウェアのコンテナ化技術で、デスクトップからクラウドまで、様々なプラットフォームでアプリケーションを開発・デプロイするのに役立ちます。
Dockerコンテナ内でアプリケーションを構築するのに必要になるソースコード、依存関係、ツールのスナップショット(またはブループリント)は、「イメージ」と呼ばれます。また、永続的なデータを必要とするDockerアプリケーションは、基盤となるオペレーティングシステムから独立した「ボリューム」と呼ばれるストレージに依存します。
Dockerを使用する際は、このイメージ、ボリューム、そしてコンテナを効率的に整理することが重要です。これらのアセットの未使用分は蓄積され、貴重なディスク容量を占有し、最終的にはシステムのパフォーマンスに影響を与えかねません。
この記事では、個別または一括でイメージ、ボリューム、コンテナを削除し、システムの整理整頓を行う方法について掘り下げます。docker
コマンドラインインターフェース(CLI)を使用して、不要なものは効率的に削除していきましょう。
Dockerイメージを削除する方法
Dockerでクリーンで整理されたシステムを維持するには、古いまたは不要なイメージを削除することは不可欠。CLIを使って特定のイメージを削除する方法を見ていきます。
まずは、docker image ls
コマンドでDocker環境のイメージを確認します。
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
my_image latest 2cbc27836df4 60 seconds ago 7.05MB
<none> <none> 85b412789704 2 days ago 7.05MB
demo latest 26d80cd96d69 15 months ago 28.5MB
上のイメージには、「my_image」と「demo」という名前のイメージがあり、どちらにも「latest」タグが付いているのがわかります。3つ目のイメージには名前もタグもありません。これは現在コンテナで使用されていない「ぶら下がり」イメージで、「my_image」を再構築した結果生じたものです(これはよくあるパターン)。以前のバージョンのイメージが、現在使用されていないにもかかわらず、ファイルシステム上に残っています。
また上記には、各イメージの64文字のIDの最初の12文字、作成日、およびイメージが消費しているストレージ容量も表示されます。
未使用イメージの削除
「ぶら下がった」イメージであることを示す名前もタグもないイメージが、使用中であることもあり得ます。例えば、IDを参照してコンテナを起動するために使用されたかもしれません。
本当にぶら下がっているイメージをすべて安全に削除するには、docker image prune
コマンドを実行します。
$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Deleted Images:
deleted: sha256:85b412789704c17e9c5e7edc97b2f64c748bbdae7eaa44d3fe2cc21a87acad3d
Total reclaimed space: 7.05MB
削除されたかを確認するために、もう一度イメージを表示してみます。
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
my_image latest 2cbc27836df4 70 seconds ago 7.05MB
demo latest 26d80cd96d69 15 months ago 28.5MB
このとおり、3行目にあった名前もタグもないイメージが消えているのがわかります。
名前を指定してイメージを削除する
イメージの名前を指定して個別に削除することも可能です。
$ docker image rm <image_name>
注意)使用中のイメージを削除するには、イメージを使用している実行中のコンテナを停止または削除しなければなりません。通常は推奨されませんが、-f
フラグを使えば、使用中のイメージを強制的に削除することができます。
$ docker image rm <image_name> -f
docker rmiでイメージを削除する
Docker CLIには、rmi
というエイリアスでイメージを削除するコマンドがあります。削除すると次のようになります。
$ docker rmi demo
Untagged: demo:latest
Deleted: sha256:2cbc27836df4a7707e746e28368f1fdecfefbfb813aae06611ca6913116b80b4
これからご紹介するイメージの削除例では、このrmi
を使用していきます。
タグ付けされていないイメージをすべて削除する
タグ付けされていないイメージは、貴重なディスク容量を占有し、徐々にシステムの速度に悪影響を与えます。
Dockerですべてのタグ無しイメージを削除するには、フィルター付きでdocker rmi
コマンドを使用します。-f
を使うと、特定の条件に基づいてフィルターを指定できます(image rm
で強制的に実行できる-f
フラグとは異なるため要注意)。
dangling=true
フィルターでタグなしイメージを識別することができます。
$ docker rmi $(docker images -f "dangling=true" -q)
上記コマンドの-q
は、タグ付けされていないすべてのイメージIDを表示するものです。IDはすべてdocker rmi
の引数として渡され、削除されます。
このフィルターは「dangling」(ぶら下がり)というキーワードを使用しますが、前述のように、タグ付けされていないイメージの中には、使用中のものがある可能性があります。このフィルターで選択されたイメージがぶら下がっていない場合には、警告が表示されます。
IDで特定のイメージを削除する
docker rmi
コマンドで、イメージIDを参照し特定のイメージを削除できます。
$ docker rmi <image_id>
名前とタグで特定のイメージを削除する
docker rmi
コマンドで、特定のイメージを名前とタグとともに削除することもできます。
例えば、同じ名前でタグが異なるイメージが複数ある場合は、これで特定のイメージを削除します。
$ docker rmi <image_name>:<tag>
あるリポジトリに関連するイメージの中で、特定のバージョンだけを削除したい場合に有用です。
最新タグを持つイメージをすべて削除する
「latest」タグは、特定のDockerイメージの最新バージョンを指し、デフォルトタグとして使用されるのが一般的です。他のタグが明示的に指定されない限り、イメージの最新ビルドに自動的に割り当てられます。
「latest」タグが付いたイメージをすべて削除するコマンドは以下のとおりです。
$ docker rmi $(docker images | grep "latest" | awk '{print $3}')
このコマンドは2つに分かれており、まずはイメージIDの一覧を取得した後、docker rmi
コマンドの引数としてこの一覧を渡します。
リモートリポジトリからイメージを削除する
Docker Hubなどのリモートリポジトリからイメージを削除するには、まずDocker CLIでそのアカウントにログインします。
ログイン後は、docker rmi
コマンドを使ってイメージを削除するだけでOKです。docker rmi
コマンドはローカルとリモートの両方のイメージを削除できます。
docker rmi my_repo/my_image_tag
ただし、削除できるのはリポジトリにプッシュされたイメージのみ。また、実行中のコンテナで使用されているイメージを削除することはできません。
リモートリポジトリから複数のイメージを削除する
リモートリポジトリから複数のイメージを削除するには、以下のようにdocker rmi
コマンドの後にイメージIDまたはタグを続けます。
docker rmi my_repo/image_tag_1 my_repo/image_tag_2 my_repo/image_tag_3
上のコマンドは、image_tag_1
、image_tag_2
、image_tag_3
というタグの3つのイメージをmy_repo
リポジトリから削除します。
Dockerボリュームを削除する方法
Dockerボリュームは、特に大量のデータや複数のバックアップが含まれると、多くのディスク容量を占有する可能性があります。不要になったボリュームを削除することで、データ漏洩のリスクを軽減し、権限のないユーザーから機密情報を保護することができます。定期的にボリュームを削除することで、Docker環境を最新の状態に保ち、古いデータによるエラー発生も回避可能です。
なお、これからご紹介するコマンドは、ボリュームに保存されているすべてのデータを恒久的に削除します。慎重に使用してください。
未使用のボリュームをすべて削除する
未使用のボリュームの削除は、イメージやコンテナの削除くらい重要な作業です。
ディスク容量を解放するには、docker volume prune
コマンドを使いましょう。
名前を指定して特定のボリュームを削除する
名前を指定して、特定のボリュームを削除することもできます。未使用のボリュームを削除するのに有用です。
docker volume rm my_volume_name
上のコマンドで、my_volume_nameボリュームが削除されます。使用中のボリュームを削除しようとするとエラーが発生します。利用可能なボリュームは、docker volume ls
コマンドで確認可能です。
Dockerコンテナを削除する方法
Dockerで作業を重ねるうち、ディスク容量を占有する未使用のコンテナが蓄積されることがあります。コンテナを削除しないでいると、貴重なディスク容量を浪費し、システムが低下して、問題が発生する可能性があります。
停止しているコンテナをすべて削除する
docker container prune
コマンドを実行すると、停止しているコンテナをすべて削除することができます。実行すると、削除されるコンテナの一覧が生成、表示されます。重要なコンテナを削除してしまわないかを再確認することができます。
$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
4df4c47c4df4
d35bcec20bce
このコマンドで削除できるのは停止中のコンテナのみです。実行中のコンテナを削除するには、最初にコンテナを停止するか、別のコマンドを使用します。
IDで特定のコンテナを削除する
Dockerでは、コンテナIDとdocker rm command
コマンドで 、IDで特定のコンテナを削除できます。まず、docker ps command
ですべてのコンテナIDを取得します。
$ docker ps -a -q
1ce3cdeb4035
06b79541e25c
fa98f1804e3e
$ docker rm 1ce3cdeb4035
上のコマンドは、コンテナが停止状態にある場合でのみ機能します。コンテナが実行中の場合は、-f
フラグを使って強制的に削除してください。
$ docker rm -f 1ce3cdeb4035
名前で特定のコンテナを削除する
名前とIDの両方でコンテナを削除するための多目的なdocker rm
コマンドがあります。
例えば、「web_server」という名前のコンテナは、以下で削除可能です。
$ docker rm web_server
まずは、コンテナを停止してください。特定のコンテナを停止するには、docker stop
コマンドが使えます。
実行中のコンテナをすべて削除する
実行中のコンテナをすべて削除する場合も、docker rm
コマンドを使用します。
$ docker rm $(docker ps -q)
docker ps -q
を使うと、実行中のコンテナIDが一覧で表示されます。その後、IDがdocker rm
コマンドに渡され、すべてのコンテナが削除されます。
このコマンドが削除するのは、実行中のコンテナのみです。停止中のコンテナも含めて全てのコンテナを削除するには、次のコマンドを実行してください。
$ docker rm $(docker ps -a -q)
まとめ
Dockerイメージ、ボリューム、コンテナを削除し、クリーンで整理されたシステムを維持する方法についてご紹介しました。未使用、タグなし、または特定のイメージをIDまたは名前ですべて削除するコマンドや、停止しているコンテナをすべて削除するコマンド、IDや名前で特定のコンテナを削除するコマンドなど、用途に応じて使い分けることができる様々な操作があります。
Dockerイメージ、ボリューム、コンテナを削除するのは簡単です。未使用のコンポーネントを管理し、貴重なディスク容量を取り戻し、システムのパフォーマンスを改善してみてください。
Dockerを使って開発したアプリケーションをデプロイするなら、Kinstaのアプリケーションホスティングをお試しください。無料利用枠もご用意しています。
コメントを残す