Macでdockerを動かす

https://docs.docker.com/installation/mac/ のページを参考にしてます。

dockerはlinuxカーネルの特別な機能を使っているらしくOS Xでは動かせないとのことなので、Boot2Dockerというツールを使ういいようです。

Boot2Dockerはコンテナを配置するLinux仮想マシンを作成するツールで、Macでコンテナを動かすために必要らしいのでインストールします。


```
$ brew install docker
==> Downloading https://homebrew.bintray.com/bottles/docker-1.6.2.yosemite.bottle.tar.gz
######################################################################## 100.0%
==> Pouring docker-1.6.2.yosemite.bottle.tar.gz
==> Caveats
Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

zsh completion has been installed to:
  /usr/local/share/zsh/site-functions
==> Summary
🍺  /usr/local/Cellar/docker/1.6.2: 9 files, 7.3M
$ brew install boot2docker
==> Downloading https://homebrew.bintray.com/bottles/boot2docker-1.6.2.yosemite.bottle.tar.gz
######################################################################## 100.0%
==> Pouring boot2docker-1.6.2.yosemite.bottle.tar.gz
==> Caveats
To have launchd start boot2docker at login:
    ln -sfv /usr/local/opt/boot2docker/*.plist ~/Library/LaunchAgents
Then to load boot2docker now:
    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.boot2docker.plist
==> Summary
🍺  /usr/local/Cellar/boot2docker/1.6.2: 3 files, 7.3M
```

### boot2dockerを初期化

```
boot2docker init
```
上記コマンドを実行すると`~/.boot2docker/boot2docker.iso`, `~/.ssh/id_boot2docker`, `~/.ssh/id_boot2docker.pub`
のファイルが作成されます。

### boot2dockerのVMを起動

```
$ boot2docker up
Waiting for VM and Docker daemon to start...
...................ooo
Started.
Writing /Users/daichi/.boot2docker/certs/boot2docker-vm/ca.pem
Writing /Users/daichi/.boot2docker/certs/boot2docker-vm/cert.pem
Writing /Users/daichi/.boot2docker/certs/boot2docker-vm/key.pem

To connect the Docker client to the Docker daemon, please set:
    export DOCKER_HOST=tcp://192.168.59.103:2376
    export DOCKER_CERT_PATH=/Users/daichi/.boot2docker/certs/boot2docker-vm
    export DOCKER_TLS_VERIFY=1
```

### dockerでつかう環境変数をbashに設定する

```
$ eval "$(boot2docker shellinit)"
```

`boot2docker shellinit`を実行すると

```
Writing /Users/daichi/.boot2docker/certs/boot2docker-vm/ca.pem
Writing /Users/daichi/.boot2docker/certs/boot2docker-vm/cert.pem
Writing /Users/daichi/.boot2docker/certs/boot2docker-vm/key.pem
    export DOCKER_HOST=tcp://192.168.59.103:2376
    export DOCKER_CERT_PATH=/Users/daichi/.boot2docker/certs/boot2docker-vm
    export DOCKER_TLS_VERIFY=1
```

が標準出力に表示されるのでevalで評価している。
`boot2docker up`でVMが起動していないと`boot2docker shellinit`はエラーするので、VMを起動するたびに`eval "eval "$(boot2docker shellinit)"`を実行する必要がある。
また新しいターミナルを立ち上げる時は環境変数をセットし直す必要が有るために`eval "$(boot2docker shellinit)"`を実行する必要がある。


ここまですると`docker`コマンドでboot2dockerで作成したVMにコンテナを配置することができる。

---

サンプルに書いて有るnginxを立ち上げてみました。

```
$ docker run -d -P --name web nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from nginx
39bb80489af7: Pull complete 
df2a0347c9d0: Pull complete 
dc2e1697e33e: Pull complete 
e21d523a1481: Pull complete 
5ec936b59c11: Pull complete 
3ec5f57e729c: Pull complete 
1f1cfc8b4072: Pull complete 
514f4db63e53: Pull complete 
e2fde5e7e71f: Pull complete 
8cac0c007422: Pull complete 
72d73c46937a: Pull complete 
a785ba7493fd: Already exists 
nginx:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:88f8d82bc9bc20ff80992cdeeee1dd6d8799cd36797b3653c644943e90b3acdf
Status: Downloaded newer image for nginx:latest
fa0d0969c7cff2e59d502e85d48531e03c352def9b4f5dc9d2be31a69505ac63

```

`docker run`で指定したimageがないとdocker hubに登録されているものをダウンロードしてそれを起動するみたいです。
`-d`は`docker run`コマンドが終了してもコンテナが起動し続けさせるフラグ。
`-P`は`EXPOSE`で公開するとしたポートをランダムなポートに設定して公開するフラグ。Macからnginxにアクセスするのに必要。
`--name`はコンテナに名前を割り当てる。

VMで起動しているポートとipを調べる

```
$ boot2docker ip
192.168.59.103
$ docker port web
443/tcp -> 0.0.0.0:32771
80/tcp -> 0.0.0.0:32770
```
この場合は`http://192.168.59.103:32770/`でnginxにアクセスできます。

最後に`boot2docker down`でVMを終了します.


とりあえずここまででdockerの動作確認出来たので自作のDockerfileを作成して動かしてみようと思います。