docker network prune コマンドを使って未使用のネットワークを削除する方法

DockerDockerBeginner
今すぐ練習

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

はじめに

この実験では、docker network prune コマンドを使用して Docker ネットワークを効果的に管理する方法を学びます。まず、複数のネットワークが存在する実際のシナリオを模擬するために、いくつかのカスタムネットワークを作成します。

これらのネットワークを作成した後、現在使用されていないネットワークを一覧表示して特定する方法を学びます。最後に、docker network prune コマンドを使用してこれらの未使用ネットワークを削除する練習を行います。この際、よりターゲットを絞った削除を行うためのフィルターの適用方法も学びます。この実践的な経験を通じて、Docker 環境をクリーンで最適化された状態に保つスキルを身につけることができます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker(("Docker")) -.-> docker/NetworkOperationsGroup(["Network Operations"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/SystemManagementGroup -.-> docker/prune("Remove Unused Docker Objects") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") subgraph Lab Skills docker/ls -.-> lab-555178{{"docker network prune コマンドを使って未使用のネットワークを削除する方法"}} docker/ps -.-> lab-555178{{"docker network prune コマンドを使って未使用のネットワークを削除する方法"}} docker/rm -.-> lab-555178{{"docker network prune コマンドを使って未使用のネットワークを削除する方法"}} docker/prune -.-> lab-555178{{"docker network prune コマンドを使って未使用のネットワークを削除する方法"}} docker/network -.-> lab-555178{{"docker network prune コマンドを使って未使用のネットワークを削除する方法"}} end

カスタムネットワークを作成する

このステップでは、Docker でカスタムネットワークを作成する方法を学びます。デフォルトでは、Docker は bridgehostnone の 3 つのネットワークを提供しています。ただし、コンテナを分離し、コンテナ間の通信方法を制御するために、独自のカスタムネットワークを作成することができます。

カスタムネットワークを作成するには、docker network create コマンドを使用します。my-network-1 という名前のブリッジネットワークを作成しましょう。

docker network create my-network-1

ネットワークが正常に作成されたことを示す、以下のような出力が表示されるはずです。

<network_id>

次に、my-network-2 という名前の別のブリッジネットワークを作成しましょう。

docker network create my-network-2

再び、ネットワーク ID が出力として表示されるはずです。

docker network ls コマンドを使用してすべての利用可能なネットワークを一覧表示することで、ネットワークが作成されたことを確認できます。

docker network ls

出力には、デフォルトのネットワークと、先ほど作成した 2 つのカスタムネットワーク (my-network-1my-network-2) を含むネットワークの一覧が表示されます。

未使用のネットワークを特定するためにネットワークを一覧表示する

このステップでは、Docker ネットワークを一覧表示し、現在どのコンテナにも使用されていないネットワークを特定する方法を学びます。これは、Docker 環境をクリーンアップし、リソースを解放するのに役立ちます。

前のステップですでに docker network ls コマンドを使用してすべてのネットワークを一覧表示しました。現在の状態を確認するために、もう一度実行してみましょう。

docker network ls

出力には、各ネットワークのネットワーク ID、名前、ドライバー、およびスコープが表示されます。作成した my-network-1my-network-2 のネットワークが一覧に表示されていることに注意してください。

未使用のネットワークを特定するには、--dry-run フラグを使用して docker network prune コマンドを実行します。このフラグを使用すると、実際にネットワークを削除することなく、どのネットワークが削除されるかを確認できます。

docker network prune --dry-run

このコマンドの出力には、実行中のコンテナに接続されていないネットワークが一覧表示され、これらのネットワークが削除されることになります。my-network-1 または my-network-2 にコンテナを接続していないため、ドライランの出力にこれらのネットワークが表示されるはずです。

my-network-1 に接続された単純なコンテナを実行して、docker network prune --dry-run の出力にどのような影響があるかを確認しましょう。非常に小さい hello-world イメージを使用します。まず、イメージを取得します。

docker pull hello-world

次に、このイメージを使用してコンテナを実行し、my-network-1 に接続します。-d フラグを使用すると、コンテナがデタッチドモード(バックグラウンド)で実行されます。

docker run -d --network my-network-1 hello-world

出力としてコンテナ ID が表示されます。

次に、もう一度 docker network prune --dry-run コマンドを実行しましょう。

docker network prune --dry-run

今回は、実行中の hello-world コンテナによって my-network-1 が使用されているため、削除対象のネットワークの一覧には表示されないはずです。使用されていない my-network-2 は、依然として一覧に表示されます。

hello-world コンテナを停止して削除するには、まず docker ps を使用してその ID を見つけます。

docker ps

次に、docker stop <container_id> を使用してコンテナを停止し、docker rm <container_id> を使用して削除します。<container_id>docker ps の出力に表示される実際の ID に置き換えてください。

docker stop <container_id>
docker rm <container_id>

ここで、もう一度 docker network prune --dry-run を実行すると、my-network-1my-network-2 の両方が削除対象のネットワークとして一覧に表示されるはずです。これは、これらのネットワークがもはや使用されていないためです。

すべての未使用ネットワークを削除する

このステップでは、docker network prune コマンドを使用してすべての未使用ネットワークを削除する方法を学びます。このコマンドは、現在どのコンテナにも接続されていないネットワークを削除することで、Docker 環境をクリーンアップし、リソースを解放するのに役立ちます。

削除する前に、現在存在するネットワークを再度一覧表示してみましょう。

docker network ls

デフォルトのネットワーク (bridgehostnone) と、最初のステップで作成したカスタムネットワーク (my-network-1my-network-2) が表示されるはずです。前のステップで hello-world コンテナを停止して削除したため、my-network-1my-network-2 は現在未使用になっているはずです。

すべての未使用ネットワークを削除するには、フラグを指定せずに docker network prune コマンドを実行します。Docker は操作の確認を求めるメッセージを表示します。

docker network prune

以下のような確認メッセージが表示されます。

WARNING! This will remove all custom networks not used by at least one container.
Are you sure you want to continue? [y/N]

削除を続行するには、y と入力して Enter キーを押します。

出力には、削除されたネットワークと、解放された総容量が表示されます。

次に、再度ネットワークを一覧表示して、my-network-1my-network-2 が削除されたことを確認しましょう。

docker network ls

これで、一覧にはデフォルトのネットワーク (bridgehostnone) のみが表示されるはずです。

フィルターを使用して未使用のネットワークを削除する

このステップでは、フィルターを使用して未使用のネットワークを削除する方法を学びます。フィルターを使用すると、ラベルや作成時間などの特定の条件に基づいてネットワークを選択的に削除できます。

まず、フィルターのデモンストレーションのために、ラベル付きの新しいネットワークをいくつか作成しましょう。ラベル env=dev を持つ network-a と、ラベル env=test を持つ network-b を作成します。

docker network create --label env=dev network-a
docker network create --label env=test network-b

両方のコマンドの出力としてネットワーク ID が表示されるはずです。

次に、新しく作成されたネットワークとそのラベルを確認するために、ネットワークを一覧表示しましょう。

docker network ls

一覧に network-anetwork-b が表示されるはずです。

フィルターに基づいてネットワークを削除するには、docker network prune コマンドに --filter フラグを使用します。たとえば、ラベル env=dev を持つすべての未使用ネットワークを削除するには、フィルター label=env=dev を使用できます。

まず、このフィルターでどのネットワークが削除されるかを確認するために、ドライランを実行しましょう。

docker network prune --filter label=env=dev --dry-run

出力には、env=dev ラベルを持ち、現在未使用の network-a が削除対象のネットワークとして表示されるはずです。

次に、実際に env=dev ラベルを持つ未使用のネットワークを削除しましょう。

docker network prune --filter label=env=dev

確認メッセージが表示されます。y と入力して Enter キーを押します。

出力には、network-a が削除されたことが表示されます。

再度ネットワークを一覧表示して、network-a が削除され、env=test ラベルを持つ network-b がまだ存在することを確認しましょう。

docker network ls

一覧には network-b が表示され、network-a は表示されないはずです。

特定の時間より前に作成されたネットワークなど、他の条件に基づいてフィルターをかけることもできます。ただし、ラベルでフィルターをかけることは、ネットワークを管理する一般的で便利な方法です。

まとめ

この実験では、Docker ネットワークの管理方法、特に未使用のネットワークの特定と削除方法を学びました。まず、docker network create コマンドを使用してカスタムブリッジネットワークを作成し、デフォルトのネットワーク以外に新しいネットワークを追加する方法を実演しました。次に、docker network ls コマンドを使用して利用可能なすべてのネットワークを一覧表示し、カスタムネットワークが作成されたことを確認しました。

その後、未使用のネットワークを特定する方法を調べました。docker network prune コマンド、特に --dry-run フラグを使用すると、どのネットワークがコンテナに接続されておらず、したがって削除の対象となるかを事前に確認するのに役立つことを学びました。このステップは、実際にネットワークを削除する前に削除の影響を理解するために重要です。