dockerのvolumeがホストのどこにあるのか
Dockerのvolumeがホストのどこに存在するか知りたい。
docker-compose.yml内で以下のように記述することに関していままで自分が勘違いしていた。
db: image: postgres volumes: - postgres_data:/var/lib/postgresql/data <-コレ environment: - POSTGRES_DB=docker_test_db - POSTGRES_USER=docker_test_user - POSTGRES_PASSWORD=docker_pass - DATABASE=postgres ports: - 5432:5432 volumes: postgres_data:
postgres_dataはいかなるホスト(OS)でも存在し、そしてdocker-compose.ymlではパスで表示している。ひょっとするとdocker-compose.ymlのカレントディレクトリに隠しファイルとして作成されるのか、とも思っていた。
こんなふうに考えていたが、少し確かめたことがありその結果は以下になる。まずpostgres_dataはすべてのホストで存在している事実はない。volumesで宣言することで新たにpostgres_dataというディレクトリもしくはファイルが作成されることはなかった。次にdocker-compose.ymlでpostgres_dataはパスとして書いていない。 そしてカレントディレクトリの隠しファイルとして新たにファイルが作成されることもなかった。
ではどこにvolumesの値が保存されるのかという話だ。
どこにデータが存在するか確かめたい。本当にホストに存在しているのか確かめたいと思った。
Volumeのパスは以下のコマンドで確認することができると分かった。
docker inspect コンテナID
Volumeのパスを参照するコマンドについての資料
Dockerで特定のコンテナのVolumeのパスを確認する方法 - Qiita
結果としてホストのある部分にvolumeに該当する領域を確認することができた。
"Mounts": [ { "Type": "volume", "Name": "mydockertest_postgres_data", "Source": "/var/lib/docker/volumes/mydockertest_postgres_data/_data", "Destination": "/var/lib/postgresql/data", "Driver": "local", "Mode": "rw", "RW": true, "Propagation": "" } ],
またvolumeは自分で削除しない限りずっと残り続けてしまうので確認が必要だと認識した。 ちなみにvolumeのリスト表示は以下のコマンドで表示することができる。
docker volume ls
これでコンテナを使っていないのにvolumeだけ残っているものを発見したら削除できる
Volumeの削除は以下のようにして実行する。 未使用のvolumeを一括削除する
docker volume rm $(docker volume ls -qf dangling=true)
指定して削除するコマンドは以下の通り。
docker volume rm project_db-data