Docker for Mac でディスク容量が足りなくなった時の対処法


## 追記その１(2017/01/12)

どうやら、Docker for Mac でも頑張ればVMのディスク容量を増やすことはできるようです。
`qemu` というツールを使ってボリュームサイズを増やすようですが、Dockerの仮想ホストを作り直すようで作成済みのimageをexportする必要があるなど、自己責任で行う必要がありそうです。

### 参考URL

- https://community.hortonworks.com/articles/65901/how-to-increase-the-size-of-the-base-docker-for-ma.html
- [Docker For MacでDocker.Qcow2というファイルが肥大化する件](https://gendosu.jp/archives/3009)
- https://forums.docker.com/t/no-space-left-on-device-error/10894/28 (beccari さんの投稿)

## 追記その２(2017/01/12)

調査すると、6GBほどの必要なさそうなtmpディレクトリがあったので削除しました。
この方法では、VMのディスク容量を増やしていませんが、不要なtmpディレクトリを削除して利用可能領域を増やしています。

[Docker for Macでディスク容量が足りなくなった時の対処法(その２)](http://qiita.com/kawasin73/items/ac9280272033616a0442)

## はじめに

Docker for Mac では20GBくらいのディスク容量が割り当てられてます。
しかし、DBとして使っているうちに容量が足りなくなることがあるかもしれません。その時の対処法です。

~~ちなみに、**Docker for Mac で作成されるdocker用のVMのディスク容量を増やすことはできません!!**
残念でした！！！~~ -> `qemu`とかいう黒魔術を使えばできそう

> With Docker for Mac, you get only one VM, and you don’t manage it. It is managed by the Docker for Mac application, which includes autoupdate to update the client and server versions of Docker.

>If you need several VMs and want to manage the version of the Docker client or server you are using, you can continue to use docker-machine, on the same machine, as described in Docker Toolbox and Docker for Mac coexistence.

[The Docker for Mac environment](https://docs.docker.com/docker-for-mac/docker-toolbox/#/the-docker-for-mac-environment)

## 1. MacOS上のvolumeをマウントする（osxfs）

普通にボリュームをマウントするとDocker for MacのVM上にvolumeが作成されるため、ディスク容量不足には対応できません。

```docker-compose.yml
version: "2"
services:
  db:
  	image: elasticsearch:latest
    volumes:
      - "/usr/share/elasticsearch/data" # <- 容量は増えない
    command: "elasticsearch -Des.network.host=0.0.0.0"
    ports:
      - "9200:9200"
      - "9300:9300"
```

Mac上のディレクトリをマウントすることで、ローカルのvolumeがマウントされるので容量が増えます。

```docker-compose.yml
version: "2"
services:
  db:
  	image: elasticsearch:latest
    volumes:
      - "./data/.data:/usr/share/elasticsearch/data" # <- これ
    command: "elasticsearch -Des.network.host=0.0.0.0"
    ports:
      - "9200:9200"
      - "9300:9300"
```

確認してみると確かに`osxfs`でマウントされています。

```
$ docker-compose run es bash
root@ef01fff7ec66:/usr/share/elasticsearch# df -h
Filesystem      Size  Used Avail Use% Mounted on
none             18G   12G  5.9G  66% /
tmpfs          1001M     0 1001M   0% /dev
tmpfs          1001M     0 1001M   0% /sys/fs/cgroup
/dev/vda1        18G   12G  5.9G  66% /etc/hosts
shm              64M     0   64M   0% /dev/shm
osxfs           465G  311G  155G  67% /usr/share/elasticsearch/data
```

しかし、この方法では微妙に書き込みや読み込みの速度が悪化してしまうことがあります。
（私の環境では書き込みにかかる時間が２倍くらいに増えました。）


## 2. 諦めて`docker-machine`を使う

Docker for Macに手をいれることはできないので諦めましょう
`docker-machine`を使って `50GB` のディスク容量を持ったVMを作ります。

```bash
docker-machine create --driver virtualbox --virtualbox-disk-size "50000" dev
```

確認してみると確かに、50GBくらいのディスク容量がマウントされてます。

```
$ docker run --rm -it busybox sh
/ # df -h
Filesystem                Size      Used Available Use% Mounted on
none                     46.3G    410.3M     43.4G   1% /
tmpfs                   497.9M         0    497.9M   0% /dev
tmpfs                   497.9M         0    497.9M   0% /sys/fs/cgroup
/dev/sda1                46.3G    410.3M     43.4G   1% /etc/resolv.conf
/dev/sda1                46.3G    410.3M     43.4G   1% /etc/hostname
/dev/sda1                46.3G    410.3M     43.4G   1% /etc/hosts
shm                      64.0M         0     64.0M   0% /dev/shm
tmpfs                   497.9M         0    497.9M   0% /proc/kcore
tmpfs                   497.9M         0    497.9M   0% /proc/timer_stats
```

## まとめ

ディスク容量くらいいじれるようにしてほしい。クソが。
もし、Docker for Mac でもディスク容量を増やす方法をご存知の方がいらっしゃいましたら教えてください。
あと、初心者なので用語の使い方がめちゃくちゃですが優しく教えていただければと思います。