MacにインストールしたDocker上のCentOSでTomcatを動かす

長ったらしいタイトルのとおりです。

## 前提条件

以下が導入されていることを前提とします。

* [Homebrew (OS X用パッケージマネージャー)](http://brew.sh/index_ja.html)
* [Homebrew Cask (Homebrew機能拡張)](http://caskroom.io/)

## 手順

### OS XでDockerを動かす

まずOS XでDockerを動かせるようにします。
DockerはLinux向けのソフトウェアなのでVMを挟む必要があります。
OS X → [VirtualBox](https://www.virtualbox.org/) → [boot2docker](http://boot2docker.io/) → [Docker](http://www.docker.com/) という構成です。

#### 1. VirtualBox、boot2docker、Dockerをインストールする

Homebrewを利用するのでインストールは簡単です。

```bash
$ brew update
$ brew tap homebrew/binary
$ brew cask install virtualbox
$ brew install boot2docker docker
```

これだけ！

```bash
$ boot2docker version
Boot2Docker-cli version: v1.6.2
Git commit: cb2c3bc
$ docker -v
Docker version 1.6.2, build 7c8fca2
```

インストール出来ました。

#### 2. boot2dockerを実行する

boot2dockerのVMを作成します。

```bash
$ boot2docker init
```

続いて起動。

```bash
$ boot2docker up
```

確認してみます。

```bash
$ boot2docker status
running
```

起動してますね。

#### 3. 環境変数を設定する

先ほど `boot2docker up` した時にexport文が表示されたはずです。
これでクライアントからのアクセスが可能になるので実行しましょう。

```bash
$ export DOCKER_HOST=tcp://192.168.XXX.XXX:XXXX
$ export DOCKER_CERT_PATH=/Users/your.user.name/.boot2docker/certs/boot2docker-vm
$ export DOCKER_TLS_VERIFY=1
```

#### 4. Dockerを実行する

ベースとなるイメージをダウンロードします。
今回使用するのはCentOS 6です。

```bash
$ docker pull centos:centos6
```

`docker images` でイメージが一覧表示されます。

```bash
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              centos6             b9aeeaeb5e17        3 weeks ago         202.6 MB
```
ダウンロードされたので実行しましょう。

```bash
$ docker run -t -i -v /shared/:/shared centos:centos6 /bin/bash
```

ざっくりとコマンドの内容を解説します。

* `-t` と `-i` は標準入力や端末デバイスに関するオプションです。
* `-v` は共有領域を指定するオプションです。`ホスト側のディレクトリ:コンテナ側のディレクトリ` で指定します。
* `centos:centos6` はイメージ名です。
* `/bin/bash` はコンテナで実行するコマンドです。

これでDockerコンテナとしてCentOSを動かすことが出来ました。

### CentOSでTomcatを動かす

続いてDockerコンテナのCentOSに各種ソフトウェアをインストールしていきます。
先ほどコマンドに `/bin/bash` を指定したので、既にシェルが起動しているはずです。

#### 1. Tomcat、Javaをインストールする

yumとrpmでインストールしていきます。

```bash
$ yum -y install yum-plugin-priorities
$ rpm -Uvh http://mirrors.dotsrc.org/jpackage/6.0/generic/free/RPMS/jpackage-release-6-3.jpp6.noarch.rpm
$ yum -y --nogpgcheck install tomcat6 tomcat6-webapps tomcat6-admin-webapps java-1.7.0-openjdk
```

それから今回使うWARファイルをTomcatにデプロイします。

```bash
$ cp /shared/test.war /var/lib/tomcat6/webapps/.
```

#### 2. Tomcatを起動する

あとはTomcatを起動するだけです。

```bash
$ /etc/init.d/tomcat6 start
Starting tomcat6:                                          [  OK  ]
```
無事に起動されました。
また、システム開始時に自動で起動するようにしておきます。

```bash
$ chkconfig tomcat6 on
```

これでコンテナの設定は完了です。
コンテナから抜けましょう。

```bash
$ exit
```

### Dockerのコンテナとイメージ

#### 1. コンテナからイメージを作る

今度は先ほどのコンテナをイメージ化しましょう。
`docker ps` でコンテナ一覧を表示します。
`-a` オプションで停止しているコンテナも含まれるようになります。

```bash
$ docker ps -a
CONTAINER ID    IMAGE           COMMAND        CREATED          STATUS                      PORTS    NAMES
dd1bd069a5bf    centos:centos6  "/bin/bash"    5 seconds ago    Exited (0) 2 seconds ago             distracted_perlman
```

`dd1bd069a5bf` がコンテナIDです。
これをイメージ化します。

```bash
$ docker commit dd1bd069a5bf centos_with_tomcat
```

確認します。

```bash
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos_with_tomcat  latest              4d81cb6ac299        7 seconds ago       897.5 MB
centos              centos6             b9aeeaeb5e17        3 weeks ago         202.6 MB
```

`centos_with_tomcat` が出来ました。

#### 2. イメージからコンテナを作る

作ったイメージを元にコンテナを立ち上げます。

```bash
$ docker run -d -p 80:8080 centos_with_tomcat /sbin/init
```

`-p` はポートフォワーディングの設定です。
次にboot2dockerのIPを調べましょう。

```bash
$ boot2docker ip
```

ここをブラウザで開けばTomcatのデフォルトページが表示されるはずです。
先ほどboot2dockerのポート80をDockerコンテナの8080にマッピングしたので
ポートの指定も不要です。

## 参考情報

Docker

* [MacでDockerを試してみる](http://qiita.com/itopan88/items/8be49baae40df392f6f2)
* [はじめてのDocker on Mac OS X](http://dev.classmethod.jp/tool/docker/getting-started-docker-on-osx/)

Tomcat

* [CentOS 6.5 に Tomcat7 をインストールする](http://blog.enjoyxstudy.com/entry/2015/01/25/000000)
* [CentOS に Apache Tomcat を導入する](http://dotnsf.blog.jp/archives/1005038706.html)