Posted at

Docker for Macで容量が増え続けてしまう

More than 1 year has passed since last update.


原因

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環境を分割した方が良いのかもしれない。