docker network pruneコマンドの使い方(実例付)CE対応


 docker network pruneコマンドの使い方の紹介ページです。Docker CE ver17.12.1に対応しております。

 このコマンドは、未使用の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-net3con3

 

 作成後、以下の操作を行います。

  • ネットワークtestnet1からコンテナvmtest1をdocker network disconnectコマンドで切断
  • ネットワークtestnet2に接続されているコンテナvmtest2をdocker stopコマンドで停止

 ネットワークtestnet3に接続されているコンテナvmtest3に対してはなにも行いません。

 この状態でdocker network pruneコマンドを実行してみたいと思います。

 では、実験用の環境を作成します。まずは3つのネットワークを作成します。

$ docker network create -d bridge testnet1
$ docker network create -d bridge testnet2
$ docker network create -d bridge testnet3

 次に、それぞれのネットワークに接続したコンテナを作成します。

$ docker run -d --name vmtest1 --net testnet1 centos init
$ docker run -d --name vmtest2 --net testnet2 centos init
$ docker run -d --name vmtest3 --net testnet3 centos init

 これで最初に示しました図の環境ができました。

 ネットワークとコンテナの一覧を出力して確認しておきます。

 ネットワークの一覧です。

$ 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        vmtest3
 b6c667febd24  centos  "init"  5 minutes ago Up 5 minutes        vmtest2
 8406de143b97  centos  "init"  5 minutes ago Up 5 minutes        vmtest1

 では、この状態で試しに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はコンテナが接続されているので削除されません。

 では予定していた以下の操作を行います。

  • ネットワークtestnet1からコンテナvmtest1をdocker network disconnectコマンドで切断
    $ docker network disconnect testnet1 vmtest1
  • ネットワークtestnet2に接続されているコンテナvmtest2をdocker stopコマンドで停止
    $ docker stop vmtest2

 この操作によって、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のコマンドの一覧(ver1.12対応版)(オリジナルな実例付き)」をご参照ください。

 ご訪問ありがとうございました。

 


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください