k2wankoの技術的なanything

プログラミングとか技術系の情報とか書いてます。

Dockerでio.jsの開発環境を作ってみる

いつものようにDocker Hubを眺めていたら

io.jsの公式Imageがあったのでこれはやるしかない!ということでやっていきます。

https://registry.hub.docker.com/_/iojs/

環境

Mac OS 10.10.1 Docker 1.4.1

figのインストール

figはDockerのコンテナをいい感じにしてくれるツール

設定ファイルを元に短いコマンドでコンテナを起動してくれたりします。

$ sudo pip install -U fig

package.jsonの作成

scriptsにstartとdependenciesにkoaを追加しています。

Dockerのイメージを作成する際にないとエラーになるので先に作っておきます。

{
  "name": "docker-iojs-project-example",
  "version": "0.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node app.js"
  },
  "author": "",
  "license": "MIT",
  "dependencies": {
    "koa": "^0.16.0"
  }
}

Dockerfileの作成

Dockerfileを作成します。

onbuildは短くかけるし便利なのでドンドン使いたいです。

EXPOSEでポートを開けておきましょう

FROM iojs:onbuild
ENV PORT 3000
EXPOSE 3000

fig.ymlの作成

ここでどのようにコンテナを作成するか書きます。

volumesの項目ではカレントディレクトリをコンテナにマウントします。

これで毎回Docker buildせずに起動すればコードが反映されます。

web:
  build: .
  volumes:
    - .:/usr/src/app
  ports:
    - "3000:3000"

fig.ymlを作成したら以下のコマンドでbuildしましょう

$ fig build

koaのHello World

koaはES6のGeneratorsを使って作られたWeb Frameworkです。

Middlewareが書きやすくなります!(今度詳しく調べます)

app.jsという名前で以下のファイルを作成します

var koa = require('koa');
var app = koa();

app.use(function *(next){
  var start = new Date;
  yield next;
  var ms = new Date - start;
  console.log('%s %s - %s', this.method, this.url, ms);
});

app.use(function *(){
  this.body = "Hello World";
});

app.listen(process.env.PORT || 3000);

そしたら以下のコマンドでコンテナを作成して起動しましょう

$ fig up

http://docker-host:3000/にアクセスしてHello Worldが確認できると思います。

まとめ

今年はNode.jsとio.jsはいったいどうなるのか注目です。

Node.jsのFrameworkの定番もexpress.jsからkoaになるかもしれないのでそろそろ調べていこうかと思いました。

それと今度のNode学園ではio.jsについてトークがあるので 申し込みを忘れないようにしておきたいです。