Mac+Vagrant+CoreOS+Docker+Packer

#目的
Mac上でDockerを扱う為のメモ(途中)

#Bug
* [Shell scripts broken with Docker 1.4.x #1752](https://github.com/mitchellh/packer/issues/1752)

Packer 0.7.5
Docker 1.5.0

環境でこのISSUEのバグが発生していて、Packerのinlineでshellを実行するとDocker imageの作成時に失敗します。

修正はmergeされてるので次のバージョンで改善されそう

* [Use Docker exec for shell provisioner by bashtoni · Pull Request #1825 · mitchellh/packer](https://github.com/mitchellh/packer/pull/1825)

~~次のリリースまで利用したい場合は自己責任でISSUEに記載されてる修正版のバイナリを利用するか、自分でコンパイルしたら良さそう。~~

**PackerとDockerの組み合わせはMac上では試行錯誤したが期待通りには動作してないです。**
試行内容についてはまとめています。

#参考資料
* [DockerイメージのビルドにPackerを使うべき理由 | SOTA](http://deeeet.com/writing/2014/03/03/why-building-docker-by-packer/)
* [Packerを使ってChef/Puppet/AnsibleでDockerのイメージをつくる | SOTA](http://deeeet.com/writing/2014/03/02/build-docker-image-by-packer/)
* [Vagrant + CoreOS + Docker でコンテナ環境体験 - Qiita](http://qiita.com/gom/items/0bfc1925a7fddfcdfdaf)
* [boot2dockerでのVolume問題が解決しそう | SOTA](http://deeeet.com/writing/2014/10/08/boot2docker-guest-additions/)
* [Packer by HashiCorp](https://www.packer.io/)

#準備
インストールするもの

* [VirtualBox](https://www.virtualbox.org/wiki/Downloads)
* [Vagrant](http://www.vagrantup.com/downloads.html)

#CoreOS
[CoreOS公式](https://coreos.com/)
[Vagrantで実行する手順](https://coreos.com/docs/running-coreos/platforms/vagrant/)

##CoreOSの取得
```shell-session
git clone https://github.com/coreos/coreos-vagrant.git
cd coreos-vagrant
```

##設定
```bash
$ cp user-data.sample user-data
$ cp config.rb.sample config.rb
```

config.rbはvagrantの起動設定、user-dataはcoreos上で動作するdockerの設定

```config.rb
# Size of the CoreOS cluster created by Vagrant
$num_instances=1
```

localで動かすだけなのでインスタンスを1に限定、user-dataは特に変更なし

##CoreOSの起動
```shell-session
vagrant up
```

##CoreOSへのログイン

```shell-session
vagrant ssh
```

#構成
ここまでの作業で以下のような構成になる

Mac-vagrant-CoreOS-Docker

#dockerをMacのローカルからコマンドを実行できるように設定する
CoreOSのDockerとMacに入れるDockerのバージョンは揃える必要があるらしい。
`brew install docker`

macにて

```bash
$ docker info
FATA[0000] Get http:///var/run/docker.sock/v1.17/info: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?
```

vagrantのCoreOSで動作しているdockerに接続する設定を追加する必要がある

```bash
$ export DOCKER_HOST=tcp://CORE_OS_HOST:port
```

ip_addressはVagrantfileを開くと以下の様な形で定義されている。

```
114       ip = "172.17.8.#{i+100}"
115       config.vm.network :private_network, ip: ip
```

起動しているインスタンスは1つだけだと思うので 172.17.8.101

IPアドレスはVagrantfileに以下の用に記載されており2375

```
 96       if $expose_docker_tcp
 97         config.vm.network "forwarded_port", guest: 2375, host: ($expose_docker_tcp + i - 1), auto_correct: true
 98       end
```

改めてdocker infoを実行すると接続できていることが確認できる

```bash
$ export DOCKER_HOST=tcp://172.17.8.1:2375
$ docker info
Containers: 0
Images: 0
Storage Driver: overlay
 Backing Filesystem: extfs
Execution Driver: native-0.2
Kernel Version: 3.18.6
Operating System: CoreOS 598.0.0
CPUs: 1
Total Memory: 998 MiB
Name: core-01
ID: RWOF:XYHF:XFI3:AW6F:RHLU:CV4F:SRXU:XDHR:MABW:P2PM:4B5D:QRY2
```

#Packerを利用してDockerのコンテナイメージを作成する
## Packerのインストール
[INSTALL PACKER](https://www.packer.io/intro/getting-started/setup.html)

```
$ brew tap homebrew/binary
$ brew install packer
```

## 設定ファイル
[Docker Builder - Packer by HashiCorp](http://www.packer.io/docs/builders/docker.html)

以下の内容でubuntu.jsonを作成

```json
{
  "builders": [
    {
      "type": "docker",
      "image": "ubuntu:14.04",
      "export_path": "ubuntu.tar"
    }
  ]
}
```

docker imageの作成

```bash
$ packer build ubuntu.json
```

ubuntu.tar が作成される。

docker imageに登録したいので設定ファイルにpost-processorsを追加する

```json
{
  "builders": [
    {
      "type": "docker",
      "image": "ubuntu:14.04",
      "export_path": "ubuntu.tar"
    }
  ],
  "post-processors": [
    [
      {
        "type": "docker-import",
        "repository": "shiwork/ubuntu",
        "tag": "0.1"
      }
    ]
  ]
}
```

`packer build ubuntu.json` 実行後に`docker images`を実行すると作成したdocker imageが追加されていることが確認できる

```bash
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
shiwork/ubuntu      0.1                 7acf3b11890e        11 seconds ago      188.1 MB
ubuntu              latest              2d24f826cb16        5 days ago          188.3 MB
ubuntu              trusty              2d24f826cb16        5 days ago          188.3 MB
ubuntu              trusty-20150218.1   2d24f826cb16        5 days ago          188.3 MB
ubuntu              14.04               2d24f826cb16        5 days ago          188.3 MB
ubuntu              14.04.2             2d24f826cb16        5 days ago          188.3 MB
```

実行

```bash
$ docker run shiwork/ubuntu:0.1 echo "Hello"
Hello
```