0%

Node-RED on Docker - Part1: インストール

Node.jsでつくるIoTのサーバーサイドにNode-REDを使います。MQTTからメッセージを取得してMongoDBに保存する処理をワイヤリングします。IoTプラットフォームはDockerコンテナで構築していきます。

google/nodejs-runtimeのDockerイメージ

google/nodejs-runtimeを使う場合の前提条件は以下です。

  • package.jsonがあること
  • エントリーポイントのserver.jsまたは、package.jsonにscriptsの記述があること
  • アプリのportは8080でlistenしていること

Node-REDのGitHubリポジトリ

Node-REDのリポジトリを確認して、google/nodejs-runtimeの仕様にあわせます。

package.jsonにエントリーポイントの指定があります。

package.json
...
"scripts" : {
"start": "node red.js",
"test": "./node_modules/.bin/grunt"
},
...

エントリーポイントのred.jsを見ると、設定ファイルはデフォルトでカレントディレクトリのsettings.jsを参照しています。

red.js
...
var settingsFile = "./settings";
...
Usage: node red.js [-v] [-?] [--settings settings.js] [flows.json]
...

settings.jsのポート指定は1880なのでEXPOSEに追加します。

settings.js
...
module.exports = {
// the tcp port that the Node-RED web server is listening on
uiPort: 1880,
...

Dockerfileのビルド

Node-REDをgit cloneします。

$ cd ~/docker_apps
$ git clone https://github.com/node-red/node-red.git
$ cd node-red

Dockerfileを作成して、docker buildを実行します。

$ cat << 'EOF' > Dockerfile
FROM google/nodejs-runtime
EXPOSE 1880
EOF
$ docker build -t node-red .

コンテナの起動

使い捨てのコンテナを起動して、1880ポートをDockerホストにマップします。

$ docker run --rm --name node-red -p 1880:1880 node-red

ブラウザで動作確認をします。

http://10.1.3.67:1880

node-red.png