user icon

Docker for Mac の使用されていないデータボリュームを削除

murave@ファイルの権限絡みで -v オプションの事を調べていたら今日という日が終わりそう、です。

やりたいことは別にあったんですが、せっかく調べたのでメモを残しておきます。今回、結論は最後に書くので経緯とか読みたくない方は最後まで飛ばして下さい。

データボリュームっていうのは例えば、

$ docker run -v コンテナ上のディレクトリ名 busybox
$ docker volume create --name test-volume

などとすると、

$ docker volume ls                       
DRIVER              VOLUME NAME
local               17e11ebb9fc56e18d99b175d77b0c37b90da561bff07d601279ab7bfc0b0f414
local               test-volume

と言った感じでデータボリュームがホスト上に出来ます。
ランダム文字列な名前のほうは前記docker runのように名前未指定な場合によろしくやってくれてるわけです。問題なのが、コンテナを削除しても基本的にこれが残るってこと。

「開発用RDBをゲットだぜ」シリーズの調査中

$ docker rm -f $(docker ps -aq)

でバンバン動作しているコンテナを含めて全部削除しまくっていたのですが、datastoreのデータボリュームが残りまくっているってわけです。

消さねばならぬ。

Macの何処につくられているのだろう?と調べていたのですが、Docker for MacもVMベースで動作しているわけでして、

~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2

の中にDockerイメージ共々はいってるんだと思います。こいつ、どんどん膨らみます。

VM上の状況は

$ docker run --rm -it -v /:/vm-root alpine ls -l /vm-root/var/lib/docker/volumes
total 220
drwxr-xr-x    3 root     root          4096 Aug 15 08:16 0f2fee8ea1b621774905898b5fb22b79478251f0e6d3901dde5698e9430cfc0f
drwxr-xr-x    3 root     root          4096 Aug 16 07:58 15bc83ca3604af4ca66713e3388dd879722ceca30ffcdc3fc05763d75b3dd077
drwxr-xr-x    3 root     root          4096 Aug 26 07:23 17e11ebb9fc56e18d99b175d77b0c37b90da561bff07d601279ab7bfc0b0f414
drwxr-xr-x    3 root     root          4096 Aug 23 02:08 18e959a82fa5e40f1d02facba9924d6f06f18aa2c2da2c6e07dd3a1c7e429f3a
drwxr-xr-x    3 root     root          4096 Aug 16 08:38 261353597aeb63143e38b51306cba073835251795614fa7d3a43ee49008d5756
drwxr-xr-x    3 root     root          4096 Aug 16 08:01 3326a3b193cc8e6bce214fd3c33fcc4f10c1317e92959e70c3752d3df83eb771
drwxr-xr-x    3 root     root          4096 Aug 16 06:58 33844fb90eb4326f978bc35caf2cb244d5a66d211b4164fcb5130be2a7453c63
drwxr-xr-x    3 root     root          4096 Aug 15 08:31 3adc5ccfbd90b059ce8a9fe55034411d0b49d97d18cd00147a11dcc49d7cef3b
drwxr-xr-x    3 root     root          4096 Aug 16 05:20 42754f3ef91f7460cb31295de09d203a1c25097051b70451f356fde334efea0a
drwxr-xr-x    3 root     root          4096 Aug 16 08:42 4b90ee03c48f0a328ba261cb9174dd62f9f167d544b73576db5171270d17b262
drwxr-xr-x    3 root     root          4096 Aug 16 02:23 4e755fcf6804123343e9b40a681dbe5fc9de280cd526497d0afcf89cec963534
drwxr-xr-x    3 root     root          4096 Aug 22 08:46 5ce13286a385bd714468174491c9f65bbb9e05e8bdfc4628d89a85b437344351
drwxr-xr-x    3 root     root          4096 Aug 16 06:23 63a9fca8324a2e462901a6a92ebbdf08a82fbe50268771353c0017a9ef799f45
drwxr-xr-x    3 root     root          4096 Aug 16 06:57 76e7e31984beea2b91d340e91fa20011c69b4922e0c2f22be1c290d75e45b82d
drwxr-xr-x    3 root     root          4096 Aug 16 07:46 834badee4c6ae6290f6879779e33885772b962131f85496aaabd43809d6cec62
drwxr-xr-x    3 root     root          4096 Aug  9 07:32 8805aaef35fe82403bfb0939cfbb3b66100f051b3bd5f52412e14a28bcb95342
drwxr-xr-x    3 root     root          4096 Aug 16 09:02 96b0b5ca5c624d03c310db3e9952d1211cc7123e72aa193eb3d4515286b83c64
drwxr-xr-x    3 root     root          4096 Aug 15 09:08 9c09d5123d36a349273a8b3213273317c75b7ba205316e0d6bb1b4596f5a5f01
drwxr-xr-x    3 root     root          4096 Aug 16 08:28 9dc0d5b59060261c19a6db265010f975ec90597cf8a80a7a02d629917b7aa143
drwxr-xr-x    3 root     root          4096 Aug  9 07:32 a00d1be583a3f80f156f5a77b98cad6687dce8772e345c7b5065e895ba46f110
drwxr-xr-x    3 root     root          4096 Aug 16 07:36 a013c0992864236cbf872e33edd7063394111d7d64ce261a0bd49f3533f93612
drwxr-xr-x    3 root     root          4096 Aug 15 04:40 a68f07ad252ceb73f842767ed3f2fd1a9628e0ec4b64516d8fd5371a63e1b22e
drwxr-xr-x    3 root     root          4096 Aug 10 06:45 ab798f01923ecd36eaf5f92d627a16391c77f036cd9ff45ddad2f7fde6534b03
drwxr-xr-x    3 root     root          4096 Aug 16 07:22 ad28856ce3de53103b2c20c7c9f32c616f1e806913c5f37d0c45984443bde92d
drwxr-xr-x    3 root     root          4096 Aug 16 07:08 b381a395adf5d6237ba57ca70c8b1c7edd8834b113c204472be25e15ac44d84f
drwxr-xr-x    3 root     root          4096 Aug 16 06:20 b5c2eaa2958e6679d9efbcbf915e6018314aeb90641c50368b2728c41efffc4b
drwxr-xr-x    3 root     root          4096 Aug 16 09:26 ba6da465e33ee52ff58187a3104624693a5485d1d6084b6a0972a29a92a1210b
drwxr-xr-x    3 root     root          4096 Aug 16 07:27 ce72509bdb23ac0791c71b4736c1e92a0d0175e5cc443616639ee8691bfe6613
drwxr-xr-x    3 root     root          4096 Aug 23 02:08 d5237bdcc608de3ca3c8a513df47676330844043503dc436e8e6a8a05bb31873
drwxr-xr-x    3 root     root          4096 Aug 16 08:55 d548a17a651bef16453793d79c2ff06b20d650039a68627b6736e27002bbaf0d
drwxr-xr-x    3 root     root          4096 Aug 15 08:58 d56545b413bb10139f76ecee271a2477be0fe1ca92e1657ec7f57a73e6ae8806
drwxr-xr-x    3 root     root          4096 Aug 16 07:14 d6230f991ce389726121d7e03fdf25b8f9bf72764cce7c93998cabca213551d9
drwxr-xr-x    3 root     root          4096 Aug 15 09:09 dcd3700e965b5a6b9707e68584106820cbab895d7da99c046af9e6d36ebfd81b
drwxr-xr-x    3 root     root          4096 Aug 16 07:30 e0130a6762542f69b670112cf2033f2816546293b4d5ed3189d7b89fb78ff676
drwxr-xr-x    3 root     root          4096 Aug 16 08:54 e042396da246d4700a0db47a511d4f0e3214f646e2df2c034bf7056a1fc20f5c
drwxr-xr-x    3 root     root          4096 Aug 10 06:52 e316debbe91c31402271ec50af58c975d6af1e345177426708c95ece630da53c
drwxr-xr-x    3 root     root          4096 Aug 22 08:49 e8ed864afc8da5110fb3041182c9c26b0bb497293b0df666783d9ad1ba292854
drwxr-xr-x    3 root     root          4096 Aug 15 04:54 f5d083892023106f0e17fae041da3d133c2b2ce7f334db24e285f41b1033f425
drwxr-xr-x    3 root     root          4096 Aug 16 07:34 f703c284137660273a40e94bf6f2eb3f4ae0305113d8e513774be4da7a857862
drwxr-xr-x    3 root     root          4096 Aug 15 08:58 initdb
-rw-------    1 root     root         65536 Aug 26 07:23 metadata.db

てな感じで確認できますが、こんなことを調べても動作理解以上の意味はないのでした。

なぜなら

$ docker volume ls

で必要な情報は取得できるからです。

さらに docker volume ls の -q オプションでボリューム名のみ、-f オプションのdangling=true指定でコンテナから参照されていないもの(danglingは宙ぶらりんなという意味らしい)を取得できるので大変便利。

ということで以下のコマンドを実行すると使用されていないデータボリュームが削除されます。

$ docker volume rm $(docker volume ls -q -f dangling=true)

参考
No space left on device error – Docker for Mac – Docker Forums
volume ls — Docker-docs-ja 1.12.RC ドキュメント

Facebooktwittergoogle_pluslinkedintumblrmail

タグ: ,

名前
E-mail
URL
コメント