オレオレ /etc/default/docker の設定

# はじめに
今年の4月にdocker meetup #2で、LTをさせて頂きました。
[Docker地雷n本勝負](http://www.slideshare.net/RyutaKoide/dockern)
※「docker 地雷」で検索すると一番上に出てきます笑

そこでもお話したのですが、自分の環境ではdockerのデフォルト設定ですと、ディスク容量などで何かと問題がありましたので、その解決策を書いておきます。
以下はdockerインストール後、自分が行う設定です。

# 環境

* OS: ubuntu14.04
* docker version: 1.4.1

# 設定
```conf:/etc/default/docker
# Docker Upstart and SysVinit configuration file

# Customize location of Docker binary (especially for development testing).
#DOCKER="/usr/local/bin/docker"

# Use DOCKER_OPTS to modify the daemon startup options.
#DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
DOCKER_OPTS="-g /mnt/docker -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock --insecure-registry [DOCKER_PRIVATE_REGISTRY]:5000"

# If you need Docker to use an HTTP proxy, it can also be specified here.
#export http_proxy="http://127.0.0.1:3128/"

# This is also a handy place to tweak where Docker's temporary files go.
#export TMPDIR="/mnt/bigdrive/docker-tmp"
export TMPDIR="/mnt/docker-tmp"
```

デフォルト設定から変更しているのは下記の点です。
※[DOCKER_PRIVATE_REGISTRY]の箇所は適宜変更して下さい。

* DOCKER_OPTS
 * -g /mnt/docker
 * -H tcp://0.0.0.0:4243
 * -H unix:///var/run/docker.sock
 * --insecure-registry [DOCKER_PRIVATE_REGISTRY]:5000
* export TMPDIR="/mnt/docker-tmp"

# 説明
## DOCKER_OPTS="-g /mnt/docker"
dockerのrootディレクトリである /var/lib/docker の位置を変更するオプションです。
自分はrootパーティションが少ないのもあって、容量に余裕のある /mnt/docker にしています。

## DOCKER_OPTS="-H tcp://0.0.0.0:4243"
これはtcpにてdocker APIを叩けるようにする設定です。

## DOCKER_OPTS="-H unix:///var/run/docker.sock"
docker APIだけならば、上記の設定で良いのですが、それだけだとローカルでdockerコマンドを打つときに下記のようにする必要があります。

```bash
$ sudo docker -H=tcp://localhost:4243 version
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): linux/amd64
Server version: 1.4.1
Server API version: 1.16
Go version (server): go1.3.3
Git commit (server): 5bc2ff8
```

毎回このコマンドを書くのは億劫ですので、docker.sockも設定しておきます。
設定すると、通常通りのdockerコマンドが使用できます。

```bash
$ sudo docker version
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): linux/amd64
Server version: 1.4.1
Server API version: 1.16
Go version (server): go1.3.3
Git commit (server): 5bc2ff8
```

## DOCKER_OPTS="--insecure-registry [DOCKER_PRIVATE_REGISTRY]:5000"
これは private docker registry を未使用の方は書かなくても良いものです。
最近（？）になって、docker private registry がセキュアになったようで、以前までの使用方法(docker run -p 5000:5000 registry)だとイメージpush時にエラーが出力されます。
そのエラーを回避するために、普通は証明書を発行した方が良いのですが、とりあえず使いたい場合などはこの設定を使うと有効です。

## export TMPDIR="/mnt/docker-tmp"
これは地雷の頃の名残です…。dockerはイメージ生成の際に /tmp で作業を行います。rootディレクトリがかつかつな場合は、イメージ生成中、ディスクフルになりかねないため、余裕のある場所にしています。
※docker-tmpは予め作成しておき、適切なパーミッションの設定を行って下さい。

# 設定の反映と確認
```bash
$ ls /mnt
docker-tmp
```

```bash
$ sudo service docker restart
```

```bash
$ ls /mnt
docker docker-tmp
```

# おわりに
以前と違って、dockerのインストールが随分簡単になりましたね。ubuntu14.04の場合、下記のコマンドでインストールができてしまいます。

```bash
$ curl -sSL https://get.docker.com/ubuntu/ | sudo sh
```

# 追記

## [2015/08/31] centos7イメージ での yum update エラーに関して

 - 環境
   - Ubuntu 14.04 LTS
   - docker 1.8.1

```
$ sudo docker pull centos:centos7
```

上記で取得したイメージにて、yum updateを行ったところ、docker build時にエラーが発生した。解決策は下記のようになる。（参考：[cap_set_file not permitted on aufs storage driver only #6980](https://github.com/docker/docker/issues/6980)）

```
sudo service docker stop

sudo vim /etc/default/docker
DOCKER_OPTS="-s devicemapper"

sudo service docker start
```

**注意点としては、devicemapperに切り替わるためか、これまでのdocker imageなどが削除されてしまう点。**前もって、バックアップを取ることを忘れないように。