Running under Docker

Docker配下でNode-REDを実行する方法はたくさんあります。 このガイドではあなたができるいくつかの方法を紹介しています。

ここではDockerとDocker Command Lineについての基礎的な知識があることを前提にしています。

コンテナのバージョン

私たちは3つのタグバージョンでコンテナを DockerHubで公開しています

Alpine Linuxを使用すると、ビルドされたイメージのサイズが縮小されます(約100MBから700MB) ネイティブモジュールのコンパイルに必要な標準の依存関係が削除されます。 もしネイティブの依存関係を持つモジュールを追加する、標準イメージを使用する、または拡張する場合は、 標準のイメージもしくはslimイメージに不足したパッケージを追加して使用してください。

クイックスタート

最新版コンテナの実行:

docker run -it -p 1880:1880 --name mynodered nodered/node-red-docker

このコマンドはDockerHubからnodered/node-red-dockerコンテナをダウンロードします。 mynoderedという名前でインスタンス名の登録と 1880ポートを開放します。 端末にNode-RED startが表示されます。 起動したらブラウザでhttp://{host-ip}:1880へアクセスするとエディタが開きます。

Ctrl-p Ctrl-qを入力するとコンテナから離れます。 これによりバックグラウンドで実行されます。

コンテナへの再接続方法:

docker attach mynodered

コンテナの停止方法:

docker stop mynodered

コンテナの起動方法:

docker start mynodered

Note: あなたのフローはコンテナ上のflows.jsonに保存されます。これはFLOWS環境変数によって変更が可能です:

docker run -it -p 1880:1880 -e FLOWS=my_flows.json nodered/node-red-docker

Node.jsランタイム引数は、環境パラメータ(NODE_OPTIONS)を使用してコンテナに渡すことができます。 たとえば、Node.jsガベージコレクタで使用されるヒープサイズを修正するには、次のコマンドを使用します:

docker run -it -p 1880:1880 -e NODE_OPTIONS="--max_old_space_size=128" nodered/node-red-docker

カスタマイズ方法

コンテナは、ディレクトリ/dataをユーザ設定ディレクトリとして使用します。 ノードを追加するには、シェルをコンテナに開き、適切なnpm installコマンドを実行します:

# コンテナのシェルを開きます。
docker exec -it mynodered /bin/bash

# コンテナに一旦入り、ノード上の/dataディレクトリでnpm installをします。
cd /data
npm install node-red-node-smooth
exit

# 新しいノードを読み込む為コンテナを再起動します。
docker stop mynodered
docker start mynodered

コンテナの外部にデータを保管する方法

/dataを外部ボリュームにマウントすることが可能です:

docker run -it -p 1880:1880 -v ~/node-red-data:/data --name mynodered nodered/node-red-docker

このコマンドはホストの~/node-red-dataディレクトリをコンテナのユーザ設定ディレクトリとしてマウントします。

コンテナに拡張ノードを追加するには、npm installコマンドをホスト上で実行します。

cd ~/node-red-data
npm install node-red-node-smooth
docker stop mynodered
docker start mynodered

Note: ネイティブの依存関係を持つモジュールはホストマシンのアーキテクチャ上でコンパイルされます。これらのモジュールはアーキテクチャがコンテナのベースイメージと一致しない限りNode-REDコンテナ内では機能しません。ネイティブモジュールの場合は、ローカルシェルを使用してインストールするか、package.jsonを更新して再ビルドすることをお勧めします。

ソースからコンテナをビルドする方法

コンテナをメンテナンスするためのDockerfilesはここの, branchの下にあります。

独自のバージョンをビルドするには:

git clone https://github.com/node-red/node-red-docker.git
cd node-red-docker

# タグを付けてビルドする
docker build -f <version>/Dockerfile -t mynodered:<tag> .

カスタムイメージのビルド方法

パブリックなNode-REDイメージをベースイメージとして新しいDockerイメージを作成すると、ビルドプロセス中に余拡張ノードをインストールできます。

  1. 内容を含むDockerfileを作成します:

     FROM nodered/node-red-docker
     RUN npm install node-red-node-wordpos
    
  2. 次のコマンドを実行してイメージをビルドします:

     docker build -t mynodered:<tag> .
    

これでwordposノードを含むNode-REDイメージを作成します。

アップデート

ベースコンテナのアップデートは次のようにシンプルにできます。

docker pull nodered/node-red-docker
docker stop mynodered
docker start mynodered

コンテナのリンク

--linkオプションを使用してDockerランタイム上のコンテナ間を内部的にリンクすることができます。

例えば、mybrokerという名前のMQTTブローカコンテナを提供するコンテナがある場合は、Node-REDコンテナをlinkパラメータで実行して2つを接続する事ができます:

docker run -it -p 1880:1880 --name mynodered --link mybroker:broker nodered/node-red-docker

これによりbrokerはNode-REDコンテナ内の既知のホスト名となり、フロー内のサービスにアクセスするために使用できます。Dockerホストの外部に公開する必要はありません。

[{"id":"190c0df7.e6f3f2","type":"mqtt-broker","broker":"broker","port":"1883","clientid":""},{"id":"37963300.c869cc","type":"mqtt in","name":"","topic":"test","broker":"190c0df7.e6f3f2","x":226,"y":244,"z":"f34f9922.0cb068","wires":[["802d92f9.7fd27"]]},{"id":"edad4162.1252c","type":"mqtt out","name":"","topic":"test","qos":"","retain":"","broker":"190c0df7.e6f3f2","x":453,"y":135,"z":"f34f9922.0cb068","wires":[]},{"id":"13d1cf31.ec2e31","type":"inject","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":226,"y":157,"z":"f34f9922.0cb068","wires":[["edad4162.1252c"]]},{"id":"802d92f9.7fd27","type":"debug","name":"","active":true,"console":"false","complete":"false","x":441,"y":261,"z":"f34f9922.0cb068","wires":[]}]