本記事はDocker ver24.0.7の環境で確認しています。
このコマンドは、未使用のDockerネットワークを一括削除する際に使用します。
Dockerネットワークが未使用の状態とは、コンテナが全く接続されていない状態です。
接続されていたコンテナをdocker network disconnectコマンドで切り離すことで接続されなくなりますが、docker stopコマンドでコンテナを停止することでも接続されなくなります。
※このコマンドを使用するためにはDocker Engineのバージョンが1.13以上である必要があります。
dockerネットワークに関しましては、別記事「Dockerネットワークの概要とその作り方の解説」をご参照ください。
docker network pruneコマンドのフォーマットとオプション
フォーマット
docker network prune <オプション>
※このコマンドを使用するためにはDocker Engineのバージョンが1.13以上である必要があります。
主なオプション一覧
オプション | 概説 |
---|---|
--force, -f | 削除する前に確認のプロンプトを出力しない |
コマンド例
$ docker network prune
docker network pruneコマンドの主な使い方
以下で実例をまじえたコマンドの使い方を解説していきたいと思います。
基本事項の解説
docker network pruneコマンドは、コンテナが1つも接続されていないDockerネットワークを一括削除することができます。
冒頭でふれましたが、コンテナが停止していますとDockerネットワークから切り離された状態になりますので、対象のDockerネットワークはdocker network pruneコマンドでの一括削除対象になります。
コンテナが接続されていないネットワークを一括削除する
Dockerネットワークの一括削除の実験を行うため、以下の図の環境を作成します。
作成後、以下の操作を行います。
- ネットワークtestnet1からコンテナtestvm1をdocker network disconnectコマンドで切断
- ネットワークtestnet2に接続されているコンテナtestvm2をdocker stopコマンドで停止
ネットワークtestnet3に接続されているコンテナtestvm3に対してはなにも行いません。
この状態でdocker network pruneコマンドを実行してみたいと思います。
では、実験用の環境を作成します。まずは3つのネットワークを作成します。
$ docker network create -d bridge testnet1
$ docker network create -d bridge testnet2
$ docker network create -d bridge testnet3
次に、それぞれのネットワークに接続したコンテナを作成します。
$ docker run -dit --init --name testvm1 --net testnet1 ubuntu
$ docker run -dit --init --name testvm2 --net testnet2 ubuntu
$ docker run -dit --init --name testvm3 --net testnet3 ubuntu
これで最初に示しました図の環境ができました。
ネットワークとコンテナの一覧を出力して確認しておきます。
ネットワークの一覧です。
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
3abe6d83703c bridge bridge local
8a9d400abb35 host host local
9b510d65ac45 none null local
6101319f2c96 testnet1 bridge local
7939fcbf2783 testnet2 bridge local
ee5fee3fb2b2 testnet3 bridge local
コンテナの一覧です。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d70211255cba centos "init" 4 minutes ago Up 4 minutes testvm3
b6c667febd24 centos "init" 5 minutes ago Up 5 minutes testvm2
8406de143b97 centos "init" 5 minutes ago Up 5 minutes testvm1
では、この状態で試しにdocker network pruneコマンドを実行してみます。
$ docker network prune
以下の確認メッセージが出力されますので「y」を入力してEnterキーを押します。
WARNING! This will remove all networks not used by at least one container.
Are you sure you want to continue? [y/N] y
削除条件を満たすネットワークが全て削除されますので、十分ご注意ください
ネットワークの一覧を確認してみましょう。
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
3abe6d83703c bridge bridge local
8a9d400abb35 host host local
9b510d65ac45 none null local
6101319f2c96 testnet1 bridge local
7939fcbf2783 testnet2 bridge local
ee5fee3fb2b2 testnet3 bridge local
変化なしですね。
作成したネットワークtestnet1、testnet2、testnet3は、コンテナが接続されているので削除されません。
では以下の操作を行います。
(1)ネットワークtestnet1からコンテナtestvm1をdocker network disconnectコマンドで切断
$ docker network disconnect testnet1 testvm1
(2)ネットワークtestnet2に接続されているコンテナtestvm2をdocker stopコマンドで停止
$ docker stop testvm2
この操作によって、testnet1とtestnet2に接続されたコンテナは無くなっていますので、docker network pruneコマンドを実行するとtestnet1とtestnet2は削除されるはずです。
試してみます。
$ docker network prune
削除条件を満たすネットワークが全て削除されますので、十分ご注意ください
以下のように出力されました。プロンプトには「y」を入力しています。
WARNING! This will remove all networks not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Networks:
testnet1
testnet2
削除されたネットワークとしてtestnet1とtestnet2が出力されていますね。
念のためネットワークの一覧を出力してみます。
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
3abe6d83703c bridge bridge local
8a9d400abb35 host host local
9b510d65ac45 none null local
ee5fee3fb2b2 testnet3 bridge local
予想通りtestnet1とtestnet2が削除されてます。
このように、コンテナの接続されていないネットワークは一括して削除することが可能です。
コンテナが停止していますとネットワークから切断された状態になりますのでdocker network pruneの削除対象になる、という点については運用によっては注意が必要な場合があるかもしれません。
おわりに
以上でdocker network pruneコマンドの紹介を終わります。
ご指摘、ご要望などが御座いましたらコメントいただけるとうれしいです。
他のDockerコマンドの実例付紹介記事は、本サイト内の別記事「Dockerのコマンドの一覧(オリジナルな実例付き)」をご参照ください。
ご訪問ありがとうございました。
コメント