LoginSignup
73
76

More than 5 years have passed since last update.

Docker で Node.js(Express)アプリケーションを動かす

Posted at

学習がてらやってみたのでメモ。

作業環境

OS:Mac OS X 10.9.5
Docker:1.6.2

前提として、Mac への Docker のセットアップは完了しているものとします。

また Docker のイメージはこれ(たぶん公式)を使います。
https://registry.hub.docker.com/_/node/

手順

Docker イメージの動作確認

まずは Node.js 用の Docker イメージ(公式)がきちんと動くか確認してみます。イメージ名は node のようです。

$ docker run -it node /bin/bash

初回はローカルにイメージをダウンロードするため時間がかかります。

接続したら、Node.js のバージョンを表示してみます。

# node -v

v0.12.4

$ docker run コマンドで利用できるオプションは $ docker help run で確認できます。

Node.js(Express)アプリケーションの用意

適当にプロジェクト用のディレクトリを作り $ npm init します。

$ mkdir express_app
$ cd express_app
$ npm init

質問に適当に答えます。

スクリーンショット 2015-06-12 16.46.32.png

すると package.json が作成されます。

package.json
{
  "name": "express_app",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

好みに応じて修正します。私の場合は次のとおり。

package.json
{
  "name": "express_app",
  "version": "0.0.1",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "license": "MIT"
}

次に Express(Node.js 用のフレームワーク) を導入します。

$ npm install --save express

すると node_modules ディレクトリ配下に Express がインストールされ package.json にも Express が追記されます。

スクリーンショット 2015-06-12 16.57.12.png

package.json と同じ階層に、静的ファイル用の public ディレクトリも一応、作っておきます。また同じ階層に index.js を新規に作成します。

スクリーンショット 2015-06-12 16.59.53.png

index.js には次のように記載します。

index.js
var express = require('express');
var app = express();

app.set('port', 5000);
app.use(express.static(__dirname + '/public'));

app.get('/', function(request, response) {
  response.send('Hello World!')
});

app.listen(app.get('port'), function() {
  console.log("Node app is running at localhost:" + app.get('port'))
});

app.set() で設定しているポート番号(今回は5000)は何でもいいです。

もし手元の作業環境に Node.js がインストールされている場合、ここで一旦、動作確認します。アプリケーションを起動し、

$ node index.js

ブラウザで http://localhost:5000 へアクセスしてみます

スクリーンショット 2015-06-12 17.05.06.png

Docker で Node.js(Express)アプリケーションを動かしてみる

先ほどのプロジェクト用のディレクトリ直下へ移動し、Docker を立ち上げます。

$ cd express_app
$ docker run -it -v `pwd`:/tmp -p 8080:5000 node /bin/bash

-v オプションにより、現在いる場所(プロジェクト用のディレクトリ)を、Docker 内の /tmp へマウントしています。また -p オプションにより、作業環境(Mac)のポート 8080(任意)5000(index.jsに設定したポート番号) へ転送しています。

接続したら、アプリケーションを起動します。

# node /tmp/index.js

ブラウザで Docker ホストの IP の、先ほど指定したポートへアクセスしてみます。

スクリーンショット 2015-06-12 17.08.42.png

上記の Docker ホストの IP は、環境によって異なるかもしれません。$ boot2docker ip で調べることができます。

おわりに

Docker 便利そうなので、他にもいろいろ試してみようと思います。

73
76
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
73
76