原因
Docker for Macを利用開始してから、ディスク容量がガッツリと減っていることに気付いた。
色々なイメージをダウンロードしすぎたかなと思って、不要なイメージをdocker rmi hogehoge
など実行しても容量が開放されない。
色々と調べてみたところ、下記のファイルのサイズがやたらと大きい。
~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
このファイルは、ダウンロードしたイメージが一式格納されているVMの実体ファイルのようだ。
※qcow2は、「qemu」という仮想マシンのファイル。
※インストール直後の初期状態だとファイルサイズは1.1Gだった(Docker Ver.1.12.6)。
「イメージの削除」は、VM内のファイルの削除ということになるので、VMの実体ファイルは縮小されないのだろう。
解決策
検索してみると、同様の症状の人が多い。
解決策としては、以下のいずれかのようだ。
- 解決策1:Docker for Macのリセットをする。
- 解決策2:qemuをインストールして、イメージをshrinkさせる(非常に有用な参考記事:https://gendosu.jp/archives/3009)
解決策1は、ダウンロードしたイメージや作成したコンテナが全て消えてしまう。
永続化データなどは、全てバックアップしてから実施しないといけない。
解決策2は、必要なイメージやコンテナを保持したまま実施できる。
詳細は、上記リンク先を確認してもらうとして、簡単な概要だけここにメモしておく。
解決策2の概要
実施前に、不要なイメージやコンテナは削除しておいた方が良い。
# qemuのインストール(MacPorts)
% sudo port install qemu
## Docker for Macの本体のVMにログイン
% cd ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux
% screen tty
## /var/tempfileに0書き出しすることで、仮想ディスク内で削除されているファイル群を削除。
## 上記リンク先では、ddでサイズ指定(例えば、Docker.qcow2の現在のファイルサイズの半分くらい)をして消しているようだ。
vm> dd if=/dev/zero of=/var/tempfile
vm> rm /var/tempfile
ここまで来たら、Docker for Macを停止して、仮想ディスクファイルをshrink
% qemu-img convert -O qcow2 Docker.qcow2 Docker.qcow2.new
% rm Docker.qcow2
% mv Docker.qcow2.new Docker.qcow2
Docker for Macを起動して完了。
都合により上記ゼロ埋め後の削除は実施しなかったが、qemu-imgによりshrinkだけで5.9Gが4.9Gに減った。
余談
上記のことから、下記の環境をDocker for Macで全て構築すると、不要にディスク容量を圧迫し、そのメンテナンスに手間がかかってしまう。
Docker for macを使うことで、Virtual Boxを利用しなくて済むので喜んでいたけど、「継続して利用したい環境」、「気軽に試す環境」などのように、ある程度の固まり毎にVagrantでDocker環境を分割した方が良いのかもしれない。