Docker for OSX で Meteor アプリを動かしてみた(meteorhacks/meteord)


# はじめに

先日 Meteor が GitHub リポジトリスター数 Web application frameworks カテゴリで1位になりました :clap: 
ちなみに2位は Ruby on Rails、3位は Express となっております。

* [Web application frameworks - GitHub](https://github.com/showcases/web-application-frameworks)


[GitHub 全体のリポジトリスター数](https://github.com/search?q=stars:%3E1&s=stars&type=Repositories)でも9位となり、Meteor は世界で注目されているプロジェクトとなっております。

そんな今話題の Meteor のアプリケーションを OS X 上の Docker で動かす方法を解説します。

## 検証環境

検証環境は以下の通りです。

* OS X Yosemite 10.10.5
* Docker Toolbox 1.8.1b
  - Docker Client 1.8.1
  - Docker Machine 0.4.1
  - Oracle VM VirtualBox 5.0.2
* Meteor 1.1.0.3

なお、この記事は Docker および Meteor の導入方法については解説いたしません。Docker と Meteor のセットアップがまだな方は、以下のリンクをご参照の上、セットアップを行ってからこの記事をお読みください。

* [Docker Toolbox | docker](https://www.docker.com/toolbox)
* [Get started | Meteor](https://www.meteor.com/install)

# Meteor アプリケーションを Docker 上で動かす手順

[meteorhacks/meteord](https://github.com/meteorhacks/meteord)を用いて、Meteor を Docker 上で動かしてみます。

## 1. Meteor プロジェクトの作成

```bash:bash$
meteor create meteor-example
```

## 2. Dockerfile 作成

Dockerfile を Meteor プロジェクトディレクトリのルートに作成します。

```bash:bash$
# Meteor プロジェクトディレクトリに移動
cd meteor-example

# Dockerfile 作成
echo "FROM meteorhacks/meteord:onbuild" > Dockerfile
```

できあがった Dockerfile はこちら。

```text:Dockerfile
FROM meteorhacks/meteord:onbuild
```

## 3. Docker イメージのビルド

```bash:bash$
docker build -t yourname/app .
```

**yourname/app** は Meteor アプリの Docker イメージ名になります。お好きな名前に変更してください。

### 例:

```bash:bash$
docker build -t n-oshiro/meteord-example-app .
```

```text:実行結果
Sending build context to Docker daemon 14.34 kB
Step 0 : FROM meteorhacks/meteord:onbuild
# Executing 2 build triggers
Trigger 0, COPY ./ /app
Step 0 : COPY ./ /app
Trigger 1, RUN bash $METEORD_DIR/on_build.sh
Step 0 : RUN bash $METEORD_DIR/on_build.sh
 ---> Running in fdc0350bcf8a
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  6121    0  6121    0     0   2672      0 --:--:--  0:00:02 --:--:--  5747
Downloading Meteor distribution
######################################################################## 100.0%

Meteor 1.1.0.3 has been installed in your home directory (~/.meteor).
Writing a launcher script to /usr/local/bin/meteor for your convenience.

To get started fast:

  $ meteor create ~/my_cool_app
  $ cd ~/my_cool_app
  $ meteor

... (省略) ...

Removing intermediate container fd0f093a6f23
Removing intermediate container fdc0350bcf8a
Successfully built fb122de5bcc1
```

ビルドが終わったら、イメージの一覧を確認します。

```bash:bash$
docker images |grep meteord
```

```
n-oshiro/meteord-example-app    latest     fb122de5bcc1    3 minutes ago     313.9 MB
meteorhacks/meteord             onbuild    d0263be6aff1    3 months ago     302.1 MB
```

Dockerfile で指定した `meteorhacks/meteord` というイメージと、 先ほど作成したイメージが追加されていますね。

## 4. Meteor アプリケーションを Docker で起動

以下のコマンドで Meteor アプリを Docker で起動します。

```bash:bash$
docker run -d \
    -e ROOT_URL=http://yourapp.com \
    -e MONGO_URL=mongodb://url \
    -e MONGO_OPLOG_URL=mongodb://oplog_url \
    -p 8080:80 \
    yourname/app 
```

なお、OS X の Docker は、VirtualBox の boot2docker 仮想マシン上で動いています。OS X 上で 上記コマンドを試す時は、ROOT_URL には boot2docker のIPアドレス(もしくはホスト名)とポートを指定する必要があります。

boot2docker の IP アドレスは $DOCKER_HOST を参照してください。

### 例:

```bash:bash$
echo $DOCKER_HOST
tcp://192.168.99.100:2376
```

```bash:bash$
docker run -d -e ROOT_URL=http://192.168.99.100:8080 -p 8080:80 n-oshiro/meteord-example-app
```

これで Meteor アプリが Docker 上で動きます。
`docker ps` コマンドでプロセスを確認してみます。

```bash:bash
$ docker ps
CONTAINER ID        IMAGE                          COMMAND                  CREATED              STATUS              PORTS                  NAMES
cd0db059012f        n-oshiro/meteord-example-app   "/bin/sh -c 'bash $ME"   About a minute ago   Up About a minute   0.0.0.0:8080->80/tcp   kickass_cray
```

Meteor アプリが起動しているのが確認できますね。

## 5. ブラウザで Meteor アプリケーションの動作確認

前のステップで docker run で起動する時に ROOT_URL に指定したURLにブラウザでアクセスします。

http://192.168.99.100:8080

![meteord-example.png](https://qiita-image-store.s3.amazonaws.com/0/24450/d04f524c-2d08-e89e-df98-21dcaee9599f.png "meteord-example.png")

動いた！

# おわりに

この記事では OS X の Docker 上で Meteor アプリを動かす方法を解説しました。

[meteorhacks/meteod](https://github.com/meteorhacks/meteord)を使うと簡単に Meteor アプリを Docker イメージにすることができます。

検証はしていませんが、OS X でなくても Meteor と Docker が動く環境ならこの手順で Docker イメージを作成することができると思います。

Meteor も Docker も日本語の情報が少ないので、この記事がこれから試される方の手助けになれば幸いです。

よい Docker & Meteor ライフを！

# 参考

* [meteorhacks/meteord - GitHub](https://github.com/meteorhacks/meteord)
* [Mac OSX向けDocker 1.8アップグレードガイド – Docker Toolboxの導入 ｜ Developers.IO](http://dev.classmethod.jp/tool/docker1-8-macosx/)