Mac 上に Docker で ServiceMix を動かしてみる

##手順
- VirtualBox インストール
- Docker インストール
- ServiceMix のイメージを取得
- Docker コンテナの作成・実行

## ViertualBox インストール
Docker には、ピュアな Linux が必要。
Mac だとピュアじゃないので、仮想マシン（ViertualBox）上に Boot2Docker という Linux 入り仮想イメージを立ち上げる。
なので、ViertualBox が必要。

[VirtualBox](http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html?ssSourceSiteId=otnjp)

dmg なので、簡単インストール。

## Docker をインストール
Boot2Docker という VM を Mac では使う必要アリ。

[Boot2Docker ダウンロードページ](https://github.com/boot2docker/osx-installer/releases/latest)

pkg ファイルなので、簡単インストール。

1 初期化

```Bash:
$ boot2docker init
```

2  起動

```Bash:
$ boot2docker start
```

3 シェル実行情報として環境変数情報確認

```Bash:
$ boot2docker shellinit
```

4 上記を使って環境変数を設定

```Bash:
$ $(boot2docker shellinit)
```

5 Hello world 的テスト

```Bash:
$ docker run hello-world
```

なんかうまく動かなかった。
と思ったら、公式の導入手順に run が抜けていた。。。

6 Boot2Docker の状況確認

```Bash:
$ boot2docker status
```
実行していると running

7 docker の構成確認

```Bash:
 $ docker version
```

```:実行結果
Client version: 1.5.0
Client API version: 1.17
Go version (client): go1.4.1
Git commit (client): a8a31ef
OS/Arch (client): darwin/amd64
Server version: 1.5.0
Server API version: 1.17
Go version (server): go1.4.1
Git commit (server): a8a31ef
```

### boot2docker のip確認

```Bash:
 $ boot2docker ip
```

```:実行結果
192.168.59.103
```


###* 参考ページ
[Docker 公式インストールページ](https://docs.docker.com/installation/mac/)
[はじめての Docker on Mac OS X](http://dev.classmethod.jp/tool/docker/getting-started-docker-on-osx/)

## ServiceMix のイメージを取得
Docker のイメージがリポジトリにある
多くは、[Docker Hub Registry](https://registry.hub.docker.com/)にて公開。

ServiceMix を検索すると、以下があったので、とりあえず、これを使ってみる。
[mkroli/servicemix](https://registry.hub.docker.com/u/mkroli/servicemix/)
Linux イメージから ServiceMix をインストールしてもいいわけだが、せっかく mkroli さんがイメージ作ってくれているので信頼して使ってみる。感謝。

### pull のやり方
コマンドで、以下を実行。

```Bash:
 $ docker pull ｛イメージ名｝:｛タグ名｝
```

今回は、

```Bash:
 $ docker pull mkroli/servicemix
```
```:実行結果
Pulling repository mkroli/servicemix
64e29cdc4d2e: Download complete 
511136ea3c5a: Download complete 
8771fbfe935c: Download complete 
0e30e84e9513: Download complete 
c90a56bfe7dd: Download complete 
6b030fdd4748: Download complete 
dc805b94fda3: Download complete 
454c672868f7: Download complete 
aa55d7aadb96: Download complete 
493d82594c15: Download complete 
3fd68b0cc322: Download complete 
478de6154258: Download complete 
d521fe8429e4: Download complete 
a7544a15f991: Download complete 
70abec29f3af: Download complete 
Status: Downloaded newer image for mkroli/servicemix:latest
```

ServiceMix 5.0 が欲しかったので、5.0 もゲット。
mkroli さんは、僕の思いを汲み取ってくれていたのかタグでバージョン管理してくれている。感謝。

```Bash:
 $ docker pull mkroli/servicemix:5.0
```

### 取得したイメージの確認

```Bash:
 $ docker images
```
```:実行結果
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
mkroli/servicemix   latest              64e29cdc4d2e        2 weeks ago         679 MB
mkroli/servicemix   5.0                 6f262f4a1db7        2 weeks ago         678.1 MB
```
mkroli/servicemix が取得されていることを確認。
5.0 も、ちゃんとある。

## Docker コンテナの作成・実行と各種コマンド

### Docker コンテナの作成・実行

```Bash:
 $ docker run [オプション][--name コンテナ名] イメージ名 [コンテナで実行するコマンド] [引数...] 
```

さあ、ServiceMix を立ち上げてみる。

-i オプションは、コンテナ側の標準入力を開くオプション。プロセス終了するとコンテナも止まる。
-d オプションは、デーモンとして起動するオプション。
-t オプションは、tty（端末デバイス）を確保するオプション。
-p オプションは、｛ホスト側のポート番号｝:｛コンテナ側のポート番号｝といった指定で、Docker サーバのホストとポートマッピングを構成するオプション。
-v オプションは、｛ホスト側のディレクトリ｝:｛コンテナ側のディレクトリ｝といった指定で、ホスト側のディレクトリをコンテナのディレクトリにマウントするオプション。

```Bash:
 $ docker run -i -t \
  --name servicemix \
  -p 1099:1099 \
  -p 8101:8101 \
  -p 8181:8181 \
  -p 61616:61616 \
  -p 36888:36888 \
  -p 44444:44444 \
  -v /host/path/deploy:/deploy \
  mkroli/servicemix
```

5.0 は、デーモン化して上げてみる。

```Bash:
 $ docker run -d -t \
  --name servicemix \
  -p 1099:1099 \
  -p 8101:8101 \
  -p 8181:8181 \
  -p 61616:61616 \
  -p 36888:36888 \
  -p 44444:44444 \
  -v /host/path/deploy:/deploy \
  mkroli/servicemix:5.0
```

### Docker コンテナの状況確認

```Bash:
 $ docker ps [-a]
```

オプション
　-a　:　停止中のコンテナも表示

### Docker コンテナの停止

```Bash:
 $ docker stop ｛コンテナー名｝|｛コンテナーID｝
```

### Docker コンテナの再実行

```Bash:
 $ docker start [-i] ｛コンテナー名｝|｛コンテナーID｝
```

オプション
　-i　:　シェルを実行する

### Docker コンテナの削除

```Bash:
 $ docker rm ｛コンテナー名｝|｛コンテナーID｝
```
コンテナは止まってないと削除できない。

### Docker イメージの削除

```Bash:
 $ docker rmi ｛コンテナー名｝|｛コンテナーID｝
```
イメージはコンテナで使っていない状況じゃないと削除できない。

###* 参考ページ
[ついに1.0がリリース！ Dockerのインストールと主なコマンドの使い方](http://www.atmarkit.co.jp/ait/articles/1406/10/news031.html)
[docker のボリュームオプションを使った（Amazon Linux で docker 使えた！）](http://inokara.hateblo.jp/entry/2014/04/03/060455)