プロジェクトのデプロイとDockerコンテナーでのテストに集中していると、事態は非常に簡単に混乱する可能性があります。ワークスペースを時々クリーンアップする必要があることに気付くでしょう。では、Dockerイメージの整理やその他の便利なコマンドを使用して、Docker環境をすっきりさせてみませんか?
このチュートリアルでは、Docker環境をクリーンで管理しやすくするための多くの方法と、潜在的な複雑さを抑えるためのいくつかのベストプラクティスについて説明します。
始めましょう!
前提条件
このチュートリアルを続けるには、次のものを自由に使用できるようにする必要があります。
- Windows 10 PC –このチュートリアルではWindows 10を使用し、PowerShellでDockerコマンドを起動しますが、Dockerを実行するOSであれば問題ありません。
- Docker –このチュートリアルでは、コンテナーホストにDockerDesktopv3.6.0を使用します。
- クリーンアップする既存のDockerコンテナ
Dockerイメージの削除
Docker環境は、イメージ、コンテナー、ネットワーキングなどのさまざまなコンポーネントで構成されています。クリーンアップするさまざまなコンポーネントがあります。最初に、不要になった古い画像を削除することから、このクリーンアッププロセスを開始しましょう。ただし、画像を削除し、それらの削除された画像を必要とするDockerfileを作成した場合、Dockerはそれらを自動的に再度ダウンロードします。
過去にダウンロードした不要な画像を削除する必要がある場合は、rm
コマンドはあなたの友達です。このコマンドは、画像を削除します コンテナですが、チュートリアルでは最初に画像に焦点を当てます。
削除するイメージを現在使用しているコンテナが1つ以上ある場合は、最初に
docker stop
を使用してそのイメージを使用しているコンテナを停止する必要があります。 指図。詳細については、ATAの記事「物事を台無しにせずにDockerStopContainersを使用する」をご覧ください。
イメージを使用しているコンテナーを停止しない限り、Dockerイメージを削除できないことに注意してください。
docker rm
を使用して画像を削除するには 、最初に画像IDを見つける必要があります。これを行うには、docker image ls
を実行します 指図。 docker image ls
コマンドはDockerを読み取り、各イメージのIDを含む現在のすべてのイメージを返します。
docker images
を実行することもできます 最近作成された画像からを一覧表示するコマンド。
docker image ls
以下に、docker image ls
の結果を示します。 列がREPOSITORYのテーブルリストのコマンド 、タグ 、画像ID 、作成済み およびサイズ 。
イメージIDがわかったら、そのイメージIDをdocker image rm
に提供します 以下に示すように、コマンド。これを行うと、Dockerは指定されたIDのイメージを削除します。
# Remove only the images with the specified image ID
docker image rm image_id
「ぶら下がっている」Dockerイメージの削除
より多くのコンテナを構築し、より多くのイメージをダウンロードし始めると、コンテナが関連付けられていないさまざまなイメージが作成される可能性があります。これらの画像は「ぶら下がり」または「漂遊」画像と呼ばれ、現在Dockerでは使用されていません。
ディスクスペースを節約し、整理整頓するために、これらのぶら下がっている画像をすべてクリーンアップしましょう。これを行うには、docker image prune
を実行します 。このコマンドはprunes または、コンテナが構築されていないイメージを削除します。
docker image prune
コンテナが関連付けられているかどうかに関係なく、すべての画像を削除する場合は、特定の画像IDを見つける必要はありません。
docker image prune -a
を実行します 核になり、それらをすべて削除します。
Dockerコンテナの削除
Dockerイメージをクリーンアップしたら、コンテナーに移動します。幸い、コンテナを削除するタスクは、rm
を使用して画像を削除するのと似ています。 コマンド。
まず、docker container ls
でコンテナーIDを見つけます 以下に示すように、コンテナを削除するコマンド。このコマンドは、 CONTAINER IDを含むすべてのコンテナを返します 。 -al
パラメータはオプションで、すべてのコンテナ(実行中かどうか)と各コンテナの最新バージョンのみを表示します。
docker container ls -al # List all Docker containers
コンテナIDがわかったら、docker rm
を実行します 削除するコンテナIDを渡します。
# Remove only the containers with the specified container ID
docker rm container_id
以下に示すように、各IDをスペースで区切ることにより、複数のコンテナーIDを指定することもできます。このコマンドは(rm
を削除します )コンテナIDがf8ec07177218
のAlpineおよびDocker101チュートリアルコンテナ および6fac840d9382
。
docker rm f8ec07177218 6fac840d9382
停止したすべてのDockerコンテナを削除する
おそらく、スペースを占有している停止したコンテナがたくさんあります。ぶら下がっている画像のように、停止したコンテナは現時点では何の目的も果たしていません。
停止したすべてのコンテナを削除するには:
1. docker
を実行します 以下のコマンドですべてを一覧表示します(ls --all
)Dockerコンテナ。 ステータスのすべてのコンテナに注目してください 終了(X)Y時間前 。これらのコンテナはすべて現在停止中です。
docker container ls --all
2.次に、docker container prune
を実行します。 停止したすべてのコンテナを削除するコマンド。このコマンドを実行すると、コマンドが削除したコンテナIDが表示されます。
docker container prune
3.最後に、docker container ls -a
を実行します 停止した各コンテナが削除されたことを再度確認します。
1つ以上のコンテナIDを手動で指定したくない場合は、
$()
を使用してDockerコマンドをネストすることもできます。 両方のリストコンテナに移動し、docker container rm $(docker container ls -aq)
を使用して1行で削除します 。docker container
コマンドはq
を使用します コンテナをコンソールに戻さないように切り替えます。 Dockerがすべてのコンテナーを収集すると、docker container rm
を実行します。 それぞれに対して。
ルールのフィルタリングによるDockerコンテナの削除
おそらくあなたは多くの異なるコンテナを持っていて、IDでそれらをそれぞれ削除するのは苦痛でしょう。それらすべてに共通の特性がある場合は、特定のクエリに一致するコンテナのみを削除するフィルタを作成できます。
特定のクエリに一致する複数のコンテナを削除するには、filter
を使用します docker container prune
のパラメーターまたはフィルタリングフラグ 指図。このパラメータを使用すると、until
のいずれかを指定できます 日付またはlabel
より前に作成されたコンテナをフィルタリングする属性 特定のラベルの有無にかかわらずコンテナを照合するための引数。
たとえば、10h
を超えて作成されたすべての停止したコンテナを削除できます。 前に以下のコマンドを実行してください。
docker container prune --filter "until=10h"
Yと入力します 以下に示すように、Dockerコンテナの削除を確認します。削除が完了すると、削除されたコンテナと再利用されたスペースの合計が表示されます。
Dockerコマンドをネストしてコンテナをクリーンアップする
これまでに説明したすべてのコマンドでは、事前に各コンテナーを停止する必要がありました。しかし、コンテナが実行されている場合はどうなりますか?各コンテナを個別に停止する代わりに、Dockerコマンドを削除コマンドにネストして、すべてのコンテナを停止し、同時に削除することができます。
実行中のコンテナを削除するときは、特に注意してください。削除すると、そのDockerコンテナに依存する一部のアプリケーションまたはプロセスに影響を与える可能性があります。
ネストされたDocker($(docker container
)以下のコマンドは、すべてのコンテナを静かに一覧表示します(-aq
)現在実行中のものを含むメモリ内。次に、コンテナのリストが外部のdocker
に渡されます。 削除するコマンド(rm
)リスト内のコンテナ。
以下に示すように、ネストされたコマンドを実行すると、すべてのコンテナが一度に削除されることがわかります。したがって、コンテナのリストを確認すると、リストが空であるため、出力は得られません。
--rm
を使用してコンテナを自動的に削除する フラグ
前のコマンドは、Dockerリストが乱雑になった後でのみDockerコンテナーを削除するために使用されます。しかし、なぜDockerリストが乱雑になるのを待つのでしょうか。あなたが「あなたが行くようにきれいな」タイプの労働者であるならば、予防的な掃除手段は--rm
であなたの指先でちょうどあります フラグ。
--rm
docker run
のフラグ このコマンドは、マシン上で短時間だけテストを行い、そのコンテナ内の重要なファイルやデプロイメントを処理しない場合に便利です。
docker run
以下のコマンド構文は、選択した名前(container_name
)でDockerコンテナーを追加します )とDockerイメージ(organization/base_image
)DockerHubライブラリから。しかし、その後、--rm
フラグはコンテナを自動的に削除します。
docker run --rm --name container_name organization/base_image
Dockerボリュームのクリーンアップ
Dockerは、イメージとコンテナだけで構成されているわけではありません。 Dockerエコシステムもストレージボリュームで構成されています。 IDの検索とアイテムの整理と同じ一般的な方法を使用して、ストレージボリュームもクリーンアップできます。
コンテナやイメージと同様に、docker volume ls
を実行します システムにあるすべてのボリュームIDを確認します。
docker volume ls
以下に、このチュートリアルでは3つのボリュームがリストされていることがわかります。
次に、docker
を実行します 以下のコマンドを実行して、未使用のボリュームをすべて削除します(volume prune
。
未使用のDockerネットワークを削除するには、代わりに次のコマンドを実行します:
docker network prune
docker volume prune
以下では、削除時に使用されていなかったため、コマンドによってすべてのローカルボリュームが削除されることがわかります。したがって、すべてのDockerボリュームを一覧表示すると、空のテーブルリストのみが表示されます。
未使用のDockerコンポーネントをすべて一度に削除する
このチュートリアル全体を通して、削除するDockerコンポーネントを選択してきました。テスト環境で作業していて、すべてを一度にクリーンアップしたい場合があります。各コンポーネントを個別にクリーンアップするのではなく、docker system prune
を使用してすべてをクリーンアップします。 !
docker system prune
コマンドは、実行されていないコンテナ、未使用のネットワーク、未使用のイメージ、およびDockerエンジンのビルドキャッシュを削除します。
docker system prune
dd
-f
警告メッセージを強制または抑制し、次のようにDockerシステム要素の削除を確認するフラグ:docker system prune -f
以下に、Dockerシステム要素の削除を続行するかどうかを尋ねるプロンプトが表示されます。 Yを入力して確定し、続行します。
結論
このチュートリアルでは、docker image prune
を使用してDockerイメージをクリーンアップするさまざまな方法について説明しました。 コマンド、docker container rm
を使用してコンテナーを削除します 、など。
この新しく発見された知識を使用して、Dockerイメージをクリーンアップする独自の方法を開発してみませんか?おそらく、Dockerアセットインベントリまたはプロジェクトに適切な名前を付けて重要なイメージやコンテナの削除を回避できる優れたタグ付けシステムを作成しますか?