モヒカンは正義

プログラマー風林火山で言う「風のエンジニア」になりたい(比較的)若者Webエンジニアの備忘録

Docker for Macでは定期的にdisk imageをお掃除する必要がある

要点

  • Docker for Macを使うなら、定期的にdisk imageをお掃除してあげるべし

背景

Docker for Macで開発しているとあるScalaアプリで、下記のようなエラーが出た

java.io.IOException: No space left on device

あっれー?そんなにdisk使ってたかなーと思って df -h コマンドを叩いたけどdiskには全然余裕がある。dockerでdisk使用量のquotaとか設定してたかな?と思ってPreferencesを開いて思い出した。

Docker for Macはイメージをbuildすると残りかすがちょっとづつ溜まっていくので、定期的にdisk imageをお掃除する必要がある。

( docker images prune の話じゃないよ! )

Disk image?

ここでいうdisk imageとはdocker imageの話ではなく、文字通りDocker for Macがdocker imageを管理するためのファイルのこと。disk imageにdocker imageがたくさん詰まってる感じ。

PreferencesのDiskタブでUsageを確認できる。自分の環境の場合64GB割当で62.5GB使用中 = 使用率97%。やっぱりこれだわ〜〜〜。

f:id:pinkumohikan:20190823010305p:plain

ls等のコマンドでもdisk imageファイルの存在を確認出来る。割当サイズ分を最初にガツッと確保するスタイルらしいので、実際に何%ぐらい使っているかは上記の画面で確認すべし。

$ ls -alh /Users/pinkumohikan/Library/Containers/com.docker.docker/Data/vms/0/Docker.raw
-rw-r--r--  1 pinkumohikan  staff    60G  8 23 01:17 /Users/pinkumohikan/Library/Containers/com.docker.docker/Data/vms/0/Docker.raw

余談: 昔はqcow2っていうフォーマットだったけど、最近はrawらしい。

docs.docker.com

Qcow2 or Raw?

Starting with High Sierra with Apple Filesystem (APFS) enabled, Docker uses disk images in the “raw” format (Docker.raw), otherwise in the Qcow2 format (Docker.qcow2).

対処法はdisk imageのリセット

PreferencesのResetタブにある、 Reset disk image ってやつ。

f:id:pinkumohikan:20190823010614p:plain

これを実行するとdocker imagesがまるっと消えるので次にdocker runやbuildしたときにbase imageのpullから始まる。出先等のインターネットが弱い場所や、急いでコンテナを立ち上げる必要があるときにはやらないほうが良い。

f:id:pinkumohikan:20190823011004p:plain

きれいさっぱり

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

$ docker images -a
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

f:id:pinkumohikan:20190823011201p:plain

地味なトラップでした。