docker volume pruneコマンドの使い方(実例付)

Docker公式ロゴ3a
©2023 Docker Inc. All rights reserved

 本記事はDocker ver24.0.7の環境で確認しています。

 このコマンドは、参照されていないデータボリュームの一括削除ができます。

 参照されていないというのは、コンテナから利用されていないデータボリュームのことでして、無駄な領域の可能性が大きいです。

 dockerのデータボリュームにつきましては、別記事「Dockerのデータボリュームについてもう少し詳しい説明」をご参照ください。

docker volume pruneコマンドのフォーマットとオプション

フォーマット

docker volume prune [オプション]

※このコマンドはDocker Engine Ver1.13から実装されました。

主なオプション一覧

オプション概説
-f, --force参照されていないデータボリュームを確認なしで
削除する

コマンド例

$ docker volume prune
$ docker volume prune -f

docker volume pruneコマンドの主な使い方

 以下で実例をまじえたコマンドの使い方を解説していきたいと思います。

実例では、Ubuntuの公式イメージにより起動したコンテナ(testvm)を使用します。

コンテナは「docker run -dit --init --name testvm ubuntu」で起動します。

※「--rm」オプションを付けておりませんので、ご利用後はコンテナ削除をお忘れなく。

基本事項の解説

 docker volume pruneコマンドは、不要なデータボリュームを一括で削除することができます。

 不要かどうかの判断は、コンテナから参照されているか否かで行います。

 事前にdocker volume pruneコマンドで削除対象のデータボリュームを確認できれば良いのですが、そのようなオプションは用意されていません。

 docker volume lsコマンドで参照されていないデータボリュームの一覧を取得できますが、docker volume pruneコマンドの削除対象データボリュームと完全に一致しているかは不明です。

参照されていないデータボリュームを一括削除する

 まずは、以下のコマンドでデータボリュームtestvol01を作成します。

$ docker volume create testvol01

※「docker volume create」コマンドにつきましては別記事「docker volume createコマンドの使い方(実例付)」を参照下さい

 以下のコマンドでデータボリュームの存在確認を行います。

$ docker volume ls -f name=testvol01
DRIVER VOLUME NAME
local testvol01

※「docker volume ls」コマンドにつきましては別記事「docker volume lsコマンドの使い方(実例付)」を参照下さい

 この状態でdocker volume pruneコマンドを実行してみます。

$ docker volume prune

 以下の通り、コンテナから使われていない全てのボリュームを削除する確認メッセージが表示されますので、「y」または「n」を入力します。

※実際に行う場合は、事前にバックアップを行うなど、十分注意して行って下さい。

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

「y」を入力後Enterキーを押しますと処理を続行します。削除が完了しますと以下のようなメッセージが出力されます。

Deleted Volumes:
testvol01
3a2baec2a45fb471eca30d1518ba43094fd6e8ada76cb4509e0abcf4165cec4a
6563f82bc6e9be7904c86eeb2361da525efd6ceff21d476dc5542b4c80041253
6ceeaf131a32571b6d478d9aad42ff467a4600789ff6557f0b653816f235ec78
(以下省略)

 Dockerホスト内のどのコンテナからも参照されていないデータボリュームが全て削除されました。

 以下のコマンドでデータボリュームの存在確認を行ってみましょう。

$ docker volume ls -f name=testvol01

DRIVER VOLUME NAME

 先ほどは存在していたtestvol01が削除されてます。

参照されていないデータボリュームを確認無しで一括削除する

 以下のように「-f」オプション付きでdocker volume pruneを実行した場合は、削除処理を行うか否かの確認がありません。

※実際に行う場合は、事前にバックアップを行うなど、十分注意して行って下さい。

$ docker volume prune -f

 実行後ただちに削除処理が行われて、以下のメッセージが出力されました。

Deleted Volumes:
testvol01

Total reclaimed space: 0 B

 シェルスクリプトなどで削除処理を自動化する場合に便利ですね。

「docker volume prune」を使わないで参照されていないデータボリュームを削除する方法

 docker volume lsとdocker volume rmを組み合わせることで、「docker volume prune」を使わないで参照されていないデータボリュームを削除することもできます。

※実際に行う場合は、事前にバックアップを行うなど、十分注意して行って下さい。

 以下のコマンドを実行します。

$ docker volume rm $(docker volume ls -qf dangling=true)

 上のコマンドについて説明します。

 まず、カッコ内の「docker volume ls -qf dangling=true」の部分で、docker volume lsコマンドを使用して、参照されていないデータボリュームの名前の一覧を取得します。

 その一覧を入力元としまして、docker volume rmを実行して削除しています。

 もし削除対象のデータボリュームが存在しない場合は、以下のエラーが出力されます。

 docker volume rmコマンドの引数が存在しないというエラーです。無視して大丈夫です。

"docker volume rm" requires at least 1 argument.
See 'docker volume rm --help'.

Usage: docker volume rm [OPTIONS] VOLUME [VOLUME...] [flags]

Remove one or more volumes

※docker volume lsとdocker volume rmに関しましては、別記事「docker volume lsコマンドの使い方(実例付)」もしくは「docker volume rmコマンドの使い方(実例付)」をご覧ください。

おわりに

  以上でdocker volume pruneコマンドの紹介を終わります。

 ご指摘、ご要望などが御座いましたらコメントいただけるとうれしいです。

 他のDockerコマンドの実例付紹介記事は、本サイト内の別記事「Dockerのコマンドの一覧(オリジナルな実例付き)」をご参照ください。

 最後までお読みいただきありがとうございました。

コメント