CentOSでDocker Remote API

## 課題

* 外部で動作する [Docker](https://www.docker.com/) を [Docker Toolbox](https://www.docker.com/products/docker-toolbox) を用いて操作する。

## 手法

* Docker の [Remote API](https://docs.docker.com/engine/reference/api/docker_remote_api/) を有効にする。

## 前提

### 1. ホスト

* 対象: Docker Toolbox 1.10.1

* 環境: Windows 8.1, [Cygwin](https://www.cygwin.com/) 2.4.1, [VartualBox](https://www.virtualbox.org/) 5.0, [Vagrant](https://www.vagrantup.com/) 1.8.1

### 2. 仮想マシン

* 対象: Docker 1.10.1

* 環境: CentOS 7.1

## 内容

### 1. 仮想マシンの起動

* Vagrant の Box を準備する。

```bash
$ vagrant box add packer/centos-7.1 https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.1/vagrant-centos-7.1.box
```

* Vagrantfile を作成する。

```:Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|

  config.vm.box = "packer/centos-7.1"

  config.vm.network :forwarded_port, guest: 22, host: 2222, id: "ssh", auto_correct: true
  config.vm.network "public_network"

end
```

* 仮想マシンを起動する。

```bash
$ vagrant up
```

### 2. 仮想マシンのアップデート

* 仮想マシンの CentOS をアップデートする。

```bash
$ vagrant ssh
[vagrant@localhost ~]$ sudo yum update
[vagrant@localhost ~]$ sudo shutdown -r now
```
* 仮想マシンの VirtualBox Guest Additions をアップデートする。

```bash
$ vagrant plugin install vagrant-vbguest
$ vagrant vbguest
```

* 必要に応じて[こちら](http://te2u.hatenablog.jp/entry/2015/08/01/115346)を参考に仮想マシンの容量を拡張する。

### 3. Docker の起動

* 仮想マシンに Docker をインストールする。

```bash
$ vagrant ssh
[vagrant@localhost ~]$ sudo 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
[vagrant@localhost ~]$ sudo yum install docker-engine
```

* 仮想マシンの Docker を起動する。

```bash
[vagrant@localhost ~]$ sudo systemctl enable docker
[vagrant@localhost ~]$ sudo systemctl start docker
```

### 4. Docker Remote API の有効化

* 仮想マシンの Docker Remote API を有効にする socket の定義を作成する。

```bash
[vagrant@localhost ~]$ sudo tee /usr/lib/systemd/system/docker-tcp.socket <<-'EOF'
[Unit]
Description=Docker Socket for the API
[Socket]
ListenStream=2376
BindIPv6Only=both
Service=docker.service
[Install]
WantedBy=sockets.target
EOF
```

* 仮想マシンの Docker を再起動する。

```bash
[vagrant@localhost ~]$ sudo systemctl enable docker-tcp.socket
[vagrant@localhost ~]$ sudo systemctl stop docker
[vagrant@localhost ~]$ sudo systemctl start docker-tcp.socket
[vagrant@localhost ~]$ sudo systemctl start docker
```

### 5. Docker Toolbox の準備

* インストーラ `DockerToolbox-1.10.1.exe` でホストに Docker Toolbox をインストールする。

* ホストの Docker Toolbox の環境設定をする。

```bash
$ export DOCKER_HOST="tcp://${仮想マシンのIPアドレス}:2376"
```

### 6. 動作確認

* ホストの Docker Toolbox の `docker.exe` を実行する。

```bash
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
```

## 参考

* [VagrantのboxのGuest Additionsのアップデート方法](http://qiita.com/isaoshimizu/items/e217008b8f6e79eccc85)

* [Installation on CentOS](https://docs.docker.com/engine/installation/linux/centos/)

* [Customizing Docker](https://coreos.com/os/docs/latest/customizing-docker.html)

* [Docker Machine - env](https://docs.docker.com/machine/reference/env/)