CentOSリポジトリの docker から Docker社リポジトリの docker-engine に移行する

１つの Dockerfile を使って、バージョンの違うイメージをいくつか作りたかった。
いろいろ調べていると [build-time argumentsの利用](http://qiita.com/thaim24/items/f8e0df0695bed47c9e2e#build-time-arguments%E3%81%AE%E5%88%A9%E7%94%A8) が docker 1.9 からできるらしい。

CentOS 7.1.1503 の最新の docker は 1.8 でどうしたものかと思っていたが、
[公式サイト](https://docs.docker.com/engine/installation/centos/)に Docker Repository を追加する方法が載っていた。
こちらの方が最新版をすぐ使えそうなので、さっそく移行してみた。


```
Docker 停止
# systemctl stop docker

CentOSリポの Docker 削除
# yum remove docker docker-selinux
 docker.x86_64 0:1.8.2-7.el7.centos
 docker-selinux.x86_64 0:1.8.2-7.el7.centos

# tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF

Dockerリポからインストール
# yum install docker-engine
 docker-engine.x86_64 0:1.9.1-1.el7.centos
 docker-engine-selinux.noarch 0:1.9.1-1.el7.centos

# systemctl start docker
```

これだけでイメージやコンテナが失われず移行できてしまった。

##/etc/sysconfig/docker が読まれてない問題(追記)
Remote API を使えるようにするため
/etc/sysconfig/docker に [Daemon socket option](https://docs.docker.com/v1.8/reference/commandline/daemon/#daemon-socket-option) を指定していたが効いていなかった。
```OPTIONS='-H tcp://0.0.0.0:2375'```

公式マニュアル [Custom Docker daemon options](https://docs.docker.com/engine/articles/systemd/#custom-docker-daemon-options) に従ってやってみたら効くようになった。

ようは、Systemdの設定ファイルで /etc/sysconfig/docker を読み込むようになっていない様子。

```
# cat /lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target docker.socket
Requires=docker.socket

[Service]
Type=notify
ExecStart=/usr/bin/docker daemon -H fd://
MountFlags=slave
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity

[Install]
WantedBy=multi-user.target
```

公式ドキュメントに従って下記のようにやってみたらOKだった。

```
# systemctl show docker | grep Env
出力なしなので、Custom Docker daemon options の設定をする

# mkdir /etc/systemd/system/docker.service.d
# tee /etc/systemd/system/docker.service.d/docker.conf <<EOF
[Service]
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// \$OPTIONS \\
          \$DOCKER_STORAGE_OPTIONS \\
          \$DOCKER_NETWORK_OPTIONS \\
          \$BLOCK_REGISTRY \\
          \$INSECURE_REGISTRY
EOF
# systemctl restart docker
Warning: Unit file of docker.service changed on disk, 'systemctl daemon-reload' recommended.
# systemctl show docker | grep Env
出力なしだったので、Warning を試す

# systemctl daemon-reload
# systemctl show docker | grep Env
EnvironmentFile=/etc/sysconfig/docker (ignore_errors=yes)
EnvironmentFile=/etc/sysconfig/docker-storage (ignore_errors=yes)
EnvironmentFile=/etc/sysconfig/docker-network (ignore_errors=yes)
設定ファイルが読まれるようになったことが確認できた

# ps -ef | grep docker
root     10000     1  0 01:20 ?        00:00:00 /usr/bin/docker daemon -H fd://
この時点ではまだ反映されていない

# systemctl restart docker
# ps -ef | grep docker
root     10071     1  4 01:21 ?        00:00:00 /usr/bin/docker daemon -H fd:// -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
無事に反映された
```